diff --git a/core/modules/views/tests/modules/user_batch_action_test/user_batch_action_test.info.yml b/core/modules/views/tests/modules/user_batch_action_test/user_batch_action_test.info.yml
new file mode 100644
index 0000000000..931dfc2b6c
--- /dev/null
+++ b/core/modules/views/tests/modules/user_batch_action_test/user_batch_action_test.info.yml
@@ -0,0 +1,9 @@
+name: 'User batch action test'
+type: module
+description: 'Support module for user batch action testing.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+  - views
+  - user
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 09a7aad57c..011e2d5ec0 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -142,6 +142,11 @@
 }
 
 $test_list = simpletest_script_get_test_list();
+if (in_array('Drupal\file\Tests\FileFieldWidgetTest', $test_list)) {
+  $test_list = array_fill(0, 8, 'Drupal\file\Tests\FileFieldWidgetTest');
+} else {
+  $test_list = [];
+}
 
 // Try to allocate unlimited time to run the tests.
 drupal_set_time_limit(0);
diff --git a/.gitattributes b/.gitattributes
index a37894e8e4..1c6f274547 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -45,17 +45,13 @@
 # Define binary file attributes.
 # - Do not treat them as text.
 # - Include binary diff in patches instead of "binary files differ."
-*.eot     -text diff
-*.exe     -text diff
 *.gif     -text diff
 *.gz      -text diff
 *.ico     -text diff
 *.jpeg    -text diff
 *.jpg     -text diff
-*.otf     -text diff
-*.phar    -text diff
 *.png     -text diff
+*.phar    -text diff
+*.exe     -text diff
 *.svgz    -text diff
 *.ttf     -text diff
-*.woff    -text diff
-*.woff2   -text diff
diff --git a/composer.lock b/composer.lock
index 835ea153ac..310254b2e0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -60,16 +60,16 @@
         },
         {
             "name": "composer/installers",
-            "version": "v1.4.0",
+            "version": "v1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/installers.git",
-                "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b"
+                "reference": "d78064c68299743e0161004f2de3a0204e33b804"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/installers/zipball/9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b",
-                "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b",
+                "url": "https://api.github.com/repos/composer/installers/zipball/d78064c68299743e0161004f2de3a0204e33b804",
+                "reference": "d78064c68299743e0161004f2de3a0204e33b804",
                 "shasum": ""
             },
             "require": {
@@ -111,17 +111,12 @@
             "keywords": [
                 "Craft",
                 "Dolibarr",
-                "Eliasis",
                 "Hurad",
                 "ImageCMS",
-                "Kanboard",
-                "Lan Management System",
                 "MODX Evo",
                 "Mautic",
-                "Maya",
                 "OXID",
                 "Plentymarkets",
-                "Porto",
                 "RadPHP",
                 "SMF",
                 "Thelia",
@@ -139,24 +134,20 @@
                 "croogo",
                 "dokuwiki",
                 "drupal",
-                "eZ Platform",
                 "elgg",
                 "expressionengine",
                 "fuelphp",
                 "grav",
                 "installer",
-                "itop",
                 "joomla",
                 "kohana",
                 "laravel",
-                "lavalite",
                 "lithium",
                 "magento",
                 "mako",
                 "mediawiki",
                 "modulework",
                 "moodle",
-                "osclass",
                 "phpbb",
                 "piwik",
                 "ppi",
@@ -165,7 +156,6 @@
                 "roundcube",
                 "shopware",
                 "silverstripe",
-                "sydes",
                 "symfony",
                 "typo3",
                 "wordpress",
@@ -173,7 +163,7 @@
                 "zend",
                 "zikula"
             ],
-            "time": "2017-08-09T07:53:48+00:00"
+            "time": "2016-08-13T20:53:52+00:00"
         },
         {
             "name": "composer/semver",
@@ -751,16 +741,16 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.0",
+            "version": "6.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
+                "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
-                "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8d6c6cc55186db87b7dc5009827429ba4e9dc006",
+                "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006",
                 "shasum": ""
             },
             "require": {
@@ -770,12 +760,9 @@
             },
             "require-dev": {
                 "ext-curl": "*",
-                "phpunit/phpunit": "^4.0 || ^5.0",
+                "phpunit/phpunit": "^4.0",
                 "psr/log": "^1.0"
             },
-            "suggest": {
-                "psr/log": "Required for using the Log middleware"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -812,7 +799,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2017-06-22T18:50:49+00:00"
+            "time": "2017-02-28T22:50:30+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -932,16 +919,16 @@
         },
         {
             "name": "masterminds/html5",
-            "version": "2.3.0",
+            "version": "2.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Masterminds/html5-php.git",
-                "reference": "2c37c6c520b995b761674de3be8455a381679067"
+                "reference": "7866e93dcf0245de22378414e0c2c7350abc45af"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067",
-                "reference": "2c37c6c520b995b761674de3be8455a381679067",
+                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/7866e93dcf0245de22378414e0c2c7350abc45af",
+                "reference": "7866e93dcf0245de22378414e0c2c7350abc45af",
                 "shasum": ""
             },
             "require": {
@@ -993,7 +980,7 @@
                 "serializer",
                 "xml"
             ],
-            "time": "2017-09-04T12:26:28+00:00"
+            "time": "2016-09-22T11:01:11+00:00"
         },
         {
             "name": "paragonie/random_compat",
@@ -1191,16 +1178,16 @@
         },
         {
             "name": "symfony-cmf/routing",
-            "version": "1.4.1",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony-cmf/routing.git",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+                "url": "https://github.com/symfony-cmf/Routing.git",
+                "reference": "b93704ca098334f56e9b317932f21a4362e620db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/b93704ca098334f56e9b317932f21a4362e620db",
+                "reference": "b93704ca098334f56e9b317932f21a4362e620db",
                 "shasum": ""
             },
             "require": {
@@ -1246,7 +1233,7 @@
                 "database",
                 "routing"
             ],
-            "time": "2017-05-09T08:10:41+00:00"
+            "time": "2016-03-31T09:11:39+00:00"
         },
         {
             "name": "symfony/class-loader",
@@ -2319,16 +2306,16 @@
         },
         {
             "name": "wikimedia/composer-merge-plugin",
-            "version": "v1.4.1",
+            "version": "v1.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/wikimedia/composer-merge-plugin.git",
-                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100"
+                "reference": "ca453f9f13d8b05f86f20ea10be992a782e6f78c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
-                "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100",
+                "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/ca453f9f13d8b05f86f20ea10be992a782e6f78c",
+                "reference": "ca453f9f13d8b05f86f20ea10be992a782e6f78c",
                 "shasum": ""
             },
             "require": {
@@ -2364,20 +2351,20 @@
                 }
             ],
             "description": "Composer plugin to merge multiple composer.json files",
-            "time": "2017-04-25T02:31:25+00:00"
+            "time": "2017-03-13T16:52:55+00:00"
         },
         {
             "name": "zendframework/zend-diactoros",
-            "version": "1.4.1",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-diactoros.git",
-                "reference": "424a840dc3bedcdeea510b42e056c77c2d6c4bef"
+                "reference": "b03f285a333f51e58c95cce54109a4a9ed691436"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/424a840dc3bedcdeea510b42e056c77c2d6c4bef",
-                "reference": "424a840dc3bedcdeea510b42e056c77c2d6c4bef",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/b03f285a333f51e58c95cce54109a4a9ed691436",
+                "reference": "b03f285a333f51e58c95cce54109a4a9ed691436",
                 "shasum": ""
             },
             "require": {
@@ -2416,7 +2403,7 @@
                 "psr",
                 "psr-7"
             ],
-            "time": "2017-08-17T21:21:00+00:00"
+            "time": "2017-04-06T16:18:34+00:00"
         },
         {
             "name": "zendframework/zend-escaper",
@@ -3041,16 +3028,16 @@
         },
         {
             "name": "mikey179/vfsStream",
-            "version": "v1.6.5",
+            "version": "v1.6.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mikey179/vfsStream.git",
-                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145"
+                "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
-                "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145",
+                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/0247f57b2245e8ad2e689d7cee754b45fbabd592",
+                "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592",
                 "shasum": ""
             },
             "require": {
@@ -3083,7 +3070,7 @@
             ],
             "description": "Virtual file system to mock the real file system in unit tests.",
             "homepage": "http://vfs.bovigo.org/",
-            "time": "2017-08-01T08:02:14+00:00"
+            "time": "2016-07-18T14:02:57+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -3447,16 +3434,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "4.8.36",
+            "version": "4.8.35",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
+                "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87",
+                "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87",
                 "shasum": ""
             },
             "require": {
@@ -3515,7 +3502,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2017-06-21T08:07:12+00:00"
+            "time": "2017-02-06T05:18:07+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
diff --git a/core/.eslintignore b/core/.eslintignore
index fae394892b..ac3272e162 100644
--- a/core/.eslintignore
+++ b/core/.eslintignore
@@ -1,6 +1,6 @@
 assets/vendor/**/*
+modules/locale/tests/locale_test.js
 node_modules/**/*
 **/js_test_files/**/*
 *.js
 !*.es6.js
-modules/locale/tests/locale_test.es6.js
diff --git a/core/MAINTAINERS.txt b/core/MAINTAINERS.txt
index c02a30b962..53d7bd752b 100644
--- a/core/MAINTAINERS.txt
+++ b/core/MAINTAINERS.txt
@@ -311,6 +311,9 @@ Node Access
 Options
 - ?
 
+Outside In
+- Ted Bowman 'tedbow' https://www.drupal.org/u/tedbow
+
 Page Cache
 - Lorenz Schori 'znerol' https://www.drupal.org/u/znerol
 - Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx
@@ -357,9 +360,6 @@ Search
 Serialization
 - Damian Lee 'damiankloip' https://www.drupal.org/u/damiankloip
 
-Settings Tray
-- Ted Bowman 'tedbow' https://www.drupal.org/u/tedbow
-
 Seven
 - ?
 
diff --git a/core/assets/vendor/ckeditor/CHANGES.md b/core/assets/vendor/ckeditor/CHANGES.md
index 19c099e4c6..7b47476373 100644
--- a/core/assets/vendor/ckeditor/CHANGES.md
+++ b/core/assets/vendor/ckeditor/CHANGES.md
@@ -1,34 +1,6 @@
 CKEditor 4 Changelog
 ====================
 
-## CKEditor 4.7.2
-
-New Features:
-
-* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/#!/guide/dev_acf) integration with the [Justify](http://ckeditor.com/addon/justify) plugin.
-
-Fixed Issues:
-
-* [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error.
-* [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell.
-* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](http://ckeditor.com/addon/table) dialog.
-* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/addon/selectall) button in [Source Mode](http://ckeditor.com/addon/sourcearea).
-* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](http://ckeditor.com/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)!
-* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](http://ckeditor.com/addon/toolbar) plugin inside the [Notification](http://ckeditor.com/addon/notification) plugin.
-* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](http://ckeditor.com/addon/stylescombo) plugin menu in the editor without any selection.
-* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](http://ckeditor.com/addon/link) plugin.
-* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error.
-* [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error.
-* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element.
-* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected.
-* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`.
-
-Other Changes:
-
-* Updated the [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type) plugin:
-	* [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it.
-* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList).
-
 ## CKEditor 4.7.1
 
 New Features:
diff --git a/core/assets/vendor/ckeditor/ckeditor.js b/core/assets/vendor/ckeditor/ckeditor.js
index 3b942199d6..7d1bfcbae7 100644
--- a/core/assets/vendor/ckeditor/ckeditor.js
+++ b/core/assets/vendor/ckeditor/ckeditor.js
@@ -3,14 +3,14 @@ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
 (function(){function ja(a,e){CKEDITOR.tools.extend(this,e,{editor:a,id:"cke-"+CKEDITOR.tools.getUniqueId(),area:a._.notificationArea});e.type||(this.type="info");this.element=this._createElement();a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(this.element)}function ka(a){var e=this;this.editor=a;this.notifications=[];this.element=this._createElement();this._uiBuffer=CKEDITOR.tools.eventsBuffer(10,this._layout,this);this._changeBuffer=CKEDITOR.tools.eventsBuffer(500,this._layout,
-this);a.on("destroy",function(){e._removeListeners();e.element.remove()})}window.CKEDITOR&&window.CKEDITOR.dom||(window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"H7NE",version:"4.7.2",revision:"c9b79c9",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var c=document.getElementsByTagName("script"),e=0;e<c.length;e++){var k=c[e].src.match(a);
+this);a.on("destroy",function(){e._removeListeners();e.element.remove()})}window.CKEDITOR&&window.CKEDITOR.dom||(window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"H6C8",version:"4.7.1",revision:"08ffd39",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var c=document.getElementsByTagName("script"),e=0;e<c.length;e++){var k=c[e].src.match(a);
 if(k){f=k[1];break}}-1==f.indexOf(":/")&&"//"!=f.slice(0,2)&&(f=0===f.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+f:location.href.match(/^[^\?]*\/(?:)/)[0]+f);if(!f)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return f}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&"/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a)&&(a+=(0<=a.indexOf("?")?
 "\x26":"?")+"t\x3d"+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),f()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),f())}catch(k){}}function f(){for(var a;a=c.shift();)a()}var c=[];return function(k){function d(){try{document.documentElement.doScroll("left")}catch(g){setTimeout(d,1);return}a()}c.push(k);"complete"===document.readyState&&setTimeout(a,
 1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);k=!1;try{k=!window.frameElement}catch(b){}document.documentElement.doScroll&&k&&d()}}}()},c=window.CKEDITOR_GETURL;if(c){var f=e.getUrl;e.getUrl=function(a){return c.call(e,a)||f.call(e,a)}}return e}()),CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=
 function(a){var e=CKEDITOR.event.prototype,c;for(c in e)null==a[c]&&(a[c]=e[c])},CKEDITOR.event.prototype=function(){function a(a){var h=e(this);return h[a]||(h[a]=new c(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},c=function(a){this.name=a;this.listeners=[]};c.prototype={getListenerIndex:function(a){for(var c=0,e=this.listeners;c<e.length;c++)if(e[c].fn==a)return c;return-1}};return{define:function(c,h){var e=a.call(this,c);CKEDITOR.tools.extend(e,
-h,!0)},on:function(c,h,e,l,k){function d(g,a,d,k){g={name:c,sender:this,editor:g,data:a,listenerData:l,stop:d,cancel:k,removeListener:b};return!1===h.call(e,g)?!1:g.data}function b(){n.removeListener(c,h)}var g=a.call(this,c);if(0>g.getListenerIndex(h)){g=g.listeners;e||(e=this);isNaN(k)&&(k=10);var n=this;d.fn=h;d.priority=k;for(var t=g.length-1;0<=t;t--)if(g[t].priority<=k)return g.splice(t+1,0,d),{removeListener:b};g.unshift(d)}return{removeListener:b}},once:function(){var a=Array.prototype.slice.call(arguments),
-c=a[1];a[1]=function(a){a.removeListener();return c.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,c=function(){a=1},m=0,l=function(){m=1};return function(k,d,b){var g=e(this)[k];k=a;var n=m;a=m=0;if(g){var t=g.listeners;if(t.length)for(var t=t.slice(0),u,w=0;w<t.length;w++){if(g.errorProof)try{u=t[w].call(this,b,d,c,l)}catch(p){}else u=t[w].call(this,
-b,d,c,l);!1===u?m=1:"undefined"!=typeof u&&(d=u);if(a||m)break}}d=m?!1:"undefined"==typeof d?!0:d;a=k;m=n;return d}}(),fireOnce:function(a,c,m){c=this.fire(a,c,m);delete e(this)[a];return c},removeListener:function(a,c){var m=e(this)[a];if(m){var l=m.getListenerIndex(c);0<=l&&m.listeners.splice(l,1)}},removeAllListeners:function(){var a=e(this),c;for(c in a)delete a[c]},hasListeners:function(a){return(a=e(this)[a])&&0<a.listeners.length}}}()),CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,
+h,!0)},on:function(c,h,e,l,k){function d(g,d,a,k){g={name:c,sender:this,editor:g,data:d,listenerData:l,stop:a,cancel:k,removeListener:b};return!1===h.call(e,g)?!1:g.data}function b(){n.removeListener(c,h)}var g=a.call(this,c);if(0>g.getListenerIndex(h)){g=g.listeners;e||(e=this);isNaN(k)&&(k=10);var n=this;d.fn=h;d.priority=k;for(var u=g.length-1;0<=u;u--)if(g[u].priority<=k)return g.splice(u+1,0,d),{removeListener:b};g.unshift(d)}return{removeListener:b}},once:function(){var a=Array.prototype.slice.call(arguments),
+c=a[1];a[1]=function(a){a.removeListener();return c.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,c=function(){a=1},m=0,l=function(){m=1};return function(k,d,b){var g=e(this)[k];k=a;var n=m;a=m=0;if(g){var u=g.listeners;if(u.length)for(var u=u.slice(0),r,w=0;w<u.length;w++){if(g.errorProof)try{r=u[w].call(this,b,d,c,l)}catch(p){}else r=u[w].call(this,
+b,d,c,l);!1===r?m=1:"undefined"!=typeof r&&(d=r);if(a||m)break}}d=m?!1:"undefined"==typeof d?!0:d;a=k;m=n;return d}}(),fireOnce:function(a,c,m){c=this.fire(a,c,m);delete e(this)[a];return c},removeListener:function(a,c){var m=e(this)[a];if(m){var l=m.getListenerIndex(c);0<=l&&m.listeners.splice(l,1)}},removeAllListeners:function(){var a=e(this),c;for(c in a)delete a[c]},hasListeners:function(a){return(a=e(this)[a])&&0<a.listeners.length}}}()),CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,
 arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)),CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e=a.match(/edge[ \/](\d+.?\d*)/),
 c=-1<a.indexOf("trident/"),c=!(!e&&!c),c={ie:c,edge:!!e,webkit:!c&&-1<a.indexOf(" applewebkit/"),air:-1<a.indexOf(" adobeair/"),mac:-1<a.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<a.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,c=window.location.hostname;return a!=c&&a!="["+c+"]"},secure:"https:"==location.protocol};c.gecko="Gecko"==navigator.product&&
 !c.webkit&&!c.ie;c.webkit&&(-1<a.indexOf("chrome")?c.chrome=!0:c.safari=!0);var f=0;c.ie&&(f=e?parseFloat(e[1]):c.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode,c.ie9Compat=9==f,c.ie8Compat=8==f,c.ie7Compat=7==f,c.ie6Compat=7>f||c.quirks);c.gecko&&(e=a.match(/rv:([\d\.]+)/))&&(e=e[1].split("."),f=1E4*e[0]+100*(e[1]||0)+1*(e[2]||0));c.air&&(f=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));c.webkit&&(f=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));c.version=
@@ -23,7 +23,7 @@ c)}},null,null,999),CKEDITOR.dom={},function(){var a=[],e=CKEDITOR.env.gecko?"-m
 g){return b.charAt(0).toUpperCase()+(g?b.slice(1):b.slice(1).toLowerCase())},extend:function(b){var g=arguments.length,a,d;"boolean"==typeof(a=arguments[g-1])?g--:"boolean"==typeof(a=arguments[g-2])&&(d=arguments[g-1],g-=2);for(var k=1;k<g;k++){var c=arguments[k],f;for(f in c)if(!0===a||null==b[f])if(!d||f in d)b[f]=c[f]}return b},prototypedCopy:function(b){var g=function(){};g.prototype=b;return new g},copy:function(b){var g={},a;for(a in b)g[a]=b[a];return g},isArray:function(b){return"[object Array]"==
 Object.prototype.toString.call(b)},isEmpty:function(b){for(var g in b)if(b.hasOwnProperty(g))return!1;return!0},cssVendorPrefix:function(b,g,a){if(a)return e+b+":"+g+";"+b+":"+g;a={};a[b]=g;a[e+b]=g;return a},cssStyleToDomStyle:function(){var b=document.createElement("div").style,g="undefined"!=typeof b.cssFloat?"cssFloat":"undefined"!=typeof b.styleFloat?"styleFloat":"float";return function(b){return"float"==b?g:b.replace(/-./g,function(g){return g.substr(1).toUpperCase()})}}(),buildStyleHtml:function(b){b=
 [].concat(b);for(var g,a=[],d=0;d<b.length;d++)if(g=b[d])/@import|[{}]/.test(g)?a.push("\x3cstyle\x3e"+g+"\x3c/style\x3e"):a.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+g+'"\x3e');return a.join("")},htmlEncode:function(b){return void 0===b||null===b?"":String(b).replace(c,"\x26amp;").replace(f,"\x26gt;").replace(h,"\x26lt;")},htmlDecode:function(b){return b.replace(l,d)},htmlEncodeAttr:function(b){return CKEDITOR.tools.htmlEncode(b).replace(m,"\x26quot;")},htmlDecodeAttr:function(b){return CKEDITOR.tools.htmlDecode(b)},
-transformPlainTextToHtml:function(b,g){var a=g==CKEDITOR.ENTER_BR,d=this.htmlEncode(b.replace(/\r\n/g,"\n")),d=d.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),k=g==CKEDITOR.ENTER_P?"p":"div";if(!a){var c=/\n{2}/g;if(c.test(d))var f="\x3c"+k+"\x3e",h="\x3c/"+k+"\x3e",d=f+d.replace(c,function(){return h+f})+h}d=d.replace(/\n/g,"\x3cbr\x3e");a||(d=d.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+k+"\x3e)"),function(g){return CKEDITOR.tools.repeat(g,2)}));d=d.replace(/^ | $/g,"\x26nbsp;");return d=d.replace(/(>|\s) /g,
+transformPlainTextToHtml:function(b,g){var a=g==CKEDITOR.ENTER_BR,d=this.htmlEncode(b.replace(/\r\n/g,"\n")),d=d.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),k=g==CKEDITOR.ENTER_P?"p":"div";if(!a){var c=/\n{2}/g;if(c.test(d))var f="\x3c"+k+"\x3e",e="\x3c/"+k+"\x3e",d=f+d.replace(c,function(){return e+f})+e}d=d.replace(/\n/g,"\x3cbr\x3e");a||(d=d.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+k+"\x3e)"),function(g){return CKEDITOR.tools.repeat(g,2)}));d=d.replace(/^ | $/g,"\x26nbsp;");return d=d.replace(/(>|\s) /g,
 function(g,b){return b+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var b=0;return function(){return++b}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var b="e",g=0;8>g;g++)b+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return b},override:function(b,g){var a=g(b);a.prototype=b.prototype;return a},setTimeout:function(b,g,a,d,k){k||(k=window);a||(a=k);return k.setTimeout(function(){d?b.apply(a,[].concat(d)):b.apply(a)},
 g||0)},trim:function(){var b=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(b,"")}}(),ltrim:function(){var b=/^[ \t\n\r]+/g;return function(g){return g.replace(b,"")}}(),rtrim:function(){var b=/[ \t\n\r]+$/g;return function(g){return g.replace(b,"")}}(),indexOf:function(b,g){if("function"==typeof g)for(var a=0,d=b.length;a<d;a++){if(g(b[a]))return a}else{if(b.indexOf)return b.indexOf(g);a=0;for(d=b.length;a<d;a++)if(b[a]===g)return a}return-1},search:function(b,g){var a=CKEDITOR.tools.indexOf(b,
 g);return 0<=a?b[a]:null},bind:function(b,g){return function(){return b.apply(g,arguments)}},createClass:function(b){var g=b.$,a=b.base,d=b.privates||b._,k=b.proto;b=b.statics;!g&&(g=function(){a&&this.base.apply(this,arguments)});if(d)var c=g,g=function(){var g=this._||(this._={}),b;for(b in d){var a=d[b];g[b]="function"==typeof a?CKEDITOR.tools.bind(a,this):a}c.apply(this,arguments)};a&&(g.prototype=this.prototypedCopy(a.prototype),g.prototype.constructor=g,g.base=a,g.baseProto=a.prototype,g.prototype.base=
@@ -79,38 +79,38 @@ href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.create
 getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var c=this.$.documentElement,f=0;c&&f<a.length;f++){var h=a[f];if(e)for(var m=-1,l=0;l<c.childNodes.length;l++){var k=c.childNodes[l];if(!0!==e||3!=k.nodeType||!k.previousSibling||3!=k.previousSibling.nodeType)if(m++,m==h){c=k;break}}else c=c.childNodes[h]}return c?new CKEDITOR.dom.node(c):
 null},getElementsByTag:function(a,e){CKEDITOR.env.ie&&8>=document.documentMode||!e||(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||
 this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||
-(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}}),CKEDITOR.dom.nodeList=function(a){this.$=a},CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(a){return new CKEDITOR.dom.node(a)})}},CKEDITOR.dom.element=function(a,e){"string"==typeof a&&
-(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))},CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node,CKEDITOR.dom.element.createFromHtml=function(a,e){var c=new CKEDITOR.dom.element("div",e);c.setHtml(a);return c.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(a,e,c,f){var h=e.getCustomData("list_marker_id")||
-e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),m=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[h]=e;m[c]=1;return e.setCustomData(c,f)},CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)},CKEDITOR.dom.element.clearMarkers=function(a,e,c){var f=e.getCustomData("list_marker_names"),h=e.getCustomData("list_marker_id"),m;for(m in f)e.removeCustomData(m);
-e.removeCustomData("list_marker_names");c&&(e.removeCustomData("list_marker_id"),delete a[h])},function(){function a(a,d){return-1<(" "+a+" ").replace(m," ").indexOf(" "+d+" ")}function e(a){var d=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),d=!1);return function(){d||a.removeAttribute("id")}}function c(a,d){var b=CKEDITOR.tools.escapeCss(a.$.id);return"#"+b+" "+d.split(/,\s*/).join(", #"+b+" ")}function f(a){for(var d=0,b=0,g=l[a].length;b<g;b++)d+=parseFloat(this.getComputedStyle(l[a][b])||
-0,10)||0;return d}var h=document.createElement("_").classList,h="undefined"!==typeof h&&null!==String(h.add).match(/\[Native code\]/gi),m=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:h?function(a){this.$.classList.add(a);return this}:function(k){var d=this.$.className;d&&(a(d,k)||(d+=" "+k));this.$.className=d||k;return this},removeClass:h?function(a){var d=this.$;d.classList.remove(a);d.className||d.removeAttribute("class");return this}:function(k){var d=
-this.getAttribute("class");d&&a(d,k)&&((d=d.replace(new RegExp("(?:^|\\s+)"+k+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class"));return this},hasClass:function(k){return a(this.$.className,k)},append:function(a,d){"string"==typeof a&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());
-d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!=this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,
-d){var b=new CKEDITOR.dom.range(this.getDocument());b.setStartAfter(this);b.setEndAfter(a);var g=b.extractContents(!1,d||!1),c;b.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(b=new CKEDITOR.dom.element("div");c=g.getFirst();)c.$.style.backgroundColor&&(c.$.style.backgroundColor=c.$.style.backgroundColor),b.append(c);b.insertAfter(this);b.remove(!0)}else g.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&
-16)}:function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(d){}}return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));
-return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(g){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=
-a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;
-case "tabindex":return a=this.$.getAttribute(a,2),0!==a&&0===this.$.tabIndex&&(a=null),a;case "checked":return a=this.$.attributes.getNamedItem(a),(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getAttributes:function(a){var d=
-{},b=this.$.attributes,g;a=CKEDITOR.tools.isArray(a)?a:[];for(g=0;g<b.length;g++)-1===CKEDITOR.tools.indexOf(a,b[g].name)&&(d[b[g].name]=b[g].value);return d},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=
-CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute("tabindex"),10)?a:-1},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||
-null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&8>=document.documentMode){var d=this.$.scopeName;"HTML"!=d&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},
-is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]==a)return!0;return!1},isEditable:function(a){var d=this.getName();return this.isReadOnly()||"none"==this.getComputedStyle("display")||"hidden"==this.getComputedStyle("visibility")||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[d]||
-CKEDITOR.dtd.span,!(!a||!a["#"])):!0},isIdentical:function(a){var d=this.clone(0,1);a=a.clone(0,1);d.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode)return d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),d.$.isEqualNode(a.$);d=d.getOuterHtml();a=
-a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var b=this.getParent();b.type==CKEDITOR.NODE_ELEMENT&&(b=b.clone(),b.setHtml(d),d=b.getHtml(),b.setHtml(a),a=b.getHtml())}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),d,b;a&&CKEDITOR.env.webkit&&(d=this.getWindow(),!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement)&&(a=(new CKEDITOR.dom.element(b)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;
-for(var a=this.getChildren(),d=0,b=a.count();d<b;d++){var g=a.getItem(d);if(g.type!=CKEDITOR.NODE_ELEMENT||!g.data("cke-bookmark"))if(g.type==CKEDITOR.NODE_ELEMENT&&!g.isEmptyInlineRemoveable()||g.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(g.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return!0;case "data-cke-expando":continue;
-default:if(b.specified)return!0}}return!1}:function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return 0<d&&(2<d||!b[a[0].nodeName]||2==d&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var b=this.$.attributes.getNamedItem(d);if("input"==this.getName())switch(d){case "class":return 0<this.$.className.length;case "checked":return!!this.$.checked;case "value":return d=this.getAttribute("type"),"checkbox"==d||"radio"==d?"on"!=this.$.value:!!this.$.value}return b?
-b.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(d){return"name"==d?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$;a=a.$;if(b!=a){var g;if(d)for(;g=b.lastChild;)a.insertBefore(b.removeChild(g),a.firstChild);else for(;g=b.firstChild;)a.appendChild(b.removeChild(g))}},mergeSiblings:function(){function a(d,b,g){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var c=
-[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();)if(c.push(b),b=g?b.getNext():b.getPrevious(),!b||b.type!=CKEDITOR.NODE_ELEMENT)return;if(d.isIdentical(b)){for(var f=g?d.getLast():d.getFirst();c.length;)c.shift().move(d,!g);b.moveChildren(d,!g);b.remove();f&&f.type==CKEDITOR.NODE_ELEMENT&&f.mergeSiblings()}}}return function(d){if(!1===d||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"",
-visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){"class"==d?this.$.className=b:"style"==d?this.$.style.cssText=b:"tabindex"==d?this.$.tabIndex=b:"checked"==d?this.$.checked=b:"contenteditable"==d?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if("src"==d&&b.match(/^http:\/\//))try{a.apply(this,
-arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=
-0;d<a.length;d++)this.removeAttribute(a[d]);else for(d in a=a||this.getAttributes(),a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(d.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)d.removeProperty?d.removeProperty(a):d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var b=["top","left","right","bottom"],g;"border"==a&&(g=["color","style","width"]);for(var d=[],c=0;c<b.length;c++)if(g)for(var f=
-0;f<g.length;f++)d.push([a,b[c],g[f]].join("-"));else d.push([a,b[c]].join("-"));for(a=0;a<d.length;a++)this.removeStyle(d[a])}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
-"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,g=d.count();b<g;b++)a=d.getItem(b),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var d=0,b=0,g=this.getDocument(),c=g.getBody(),f="BackCompat"==g.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie?
-8!==CKEDITOR.env.version:1)){var h=this.$.getBoundingClientRect(),e=g.$.documentElement,p=e.clientTop||c.$.clientTop||0,r=e.clientLeft||c.$.clientLeft||0,m=!0;CKEDITOR.env.ie&&(m=g.getDocumentElement().contains(this),g=g.getBody().contains(this),m=f&&g||!f&&m);m&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(d=c.$.scrollLeft||e.scrollLeft,b=c.$.scrollTop||e.scrollTop):(b=f?c.$:e,d=b.scrollLeft,b=b.scrollTop),d=h.left+d-r,b=h.top+b-p)}else for(p=this,r=null;p&&"body"!=p.getName()&&
-"html"!=p.getName();){d+=p.$.offsetLeft-p.$.scrollLeft;b+=p.$.offsetTop-p.$.scrollTop;p.equals(this)||(d+=p.$.clientLeft||0,b+=p.$.clientTop||0);for(;r&&!r.equals(p);)d-=r.$.scrollLeft,b-=r.$.scrollTop,r=r.getParent();r=p;p=(h=p.$.offsetParent)?new CKEDITOR.dom.element(h):null}a&&(h=this.getWindow(),p=a.getWindow(),!h.equals(p)&&h.$.frameElement&&(a=(new CKEDITOR.dom.element(h.$.frameElement)).getDocumentPosition(a),d+=a.x,b+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||
+(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}}),CKEDITOR.dom.nodeList=function(a){this.$=a},CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null}},CKEDITOR.dom.element=function(a,e){"string"==typeof a&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.element.get=function(a){return(a=
+"string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))},CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node,CKEDITOR.dom.element.createFromHtml=function(a,e){var c=new CKEDITOR.dom.element("div",e);c.setHtml(a);return c.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(a,e,c,f){var h=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),m=e.getCustomData("list_marker_names")||
+e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[h]=e;m[c]=1;return e.setCustomData(c,f)},CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)},CKEDITOR.dom.element.clearMarkers=function(a,e,c){var f=e.getCustomData("list_marker_names"),h=e.getCustomData("list_marker_id"),m;for(m in f)e.removeCustomData(m);e.removeCustomData("list_marker_names");c&&(e.removeCustomData("list_marker_id"),delete a[h])},function(){function a(a,
+d){return-1<(" "+a+" ").replace(m," ").indexOf(" "+d+" ")}function e(a){var d=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),d=!1);return function(){d||a.removeAttribute("id")}}function c(a,d){var b=CKEDITOR.tools.escapeCss(a.$.id);return"#"+b+" "+d.split(/,\s*/).join(", #"+b+" ")}function f(a){for(var d=0,b=0,g=l[a].length;b<g;b++)d+=parseFloat(this.getComputedStyle(l[a][b])||0,10)||0;return d}var h=document.createElement("_").classList,h="undefined"!==typeof h&&null!==String(h.add).match(/\[Native code\]/gi),
+m=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:h?function(a){this.$.classList.add(a);return this}:function(k){var d=this.$.className;d&&(a(d,k)||(d+=" "+k));this.$.className=d||k;return this},removeClass:h?function(a){var d=this.$;d.classList.remove(a);d.className||d.removeAttribute("class");return this}:function(k){var d=this.getAttribute("class");d&&a(d,k)&&((d=d.replace(new RegExp("(?:^|\\s+)"+k+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",
+d):this.removeAttribute("class"));return this},hasClass:function(k){return a(this.$.className,k)},append:function(a,d){"string"==typeof a&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!=this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?
+this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,d){var b=new CKEDITOR.dom.range(this.getDocument());b.setStartAfter(this);b.setEndAfter(a);var g=b.extractContents(!1,d||!1),c;b.insertNode(this.remove());
+if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(b=new CKEDITOR.dom.element("div");c=g.getFirst();)c.$.style.backgroundColor&&(c.$.style.backgroundColor=c.$.style.backgroundColor),b.append(c);b.insertAfter(this);b.remove(!0)}else g.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(d){}}
+return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&
+(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(g){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");
+a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":return a=this.$.getAttribute(a,2),0!==a&&0===this.$.tabIndex&&(a=null),a;case "checked":return a=this.$.attributes.getNamedItem(a),
+(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getAttributes:function(a){var d={},b=this.$.attributes,g;a=CKEDITOR.tools.isArray(a)?a:[];for(g=0;g<b.length;g++)-1===CKEDITOR.tools.indexOf(a,b[g].name)&&(d[b[g].name]=
+b[g].value);return d},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,
+getTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute("tabindex"),10)?a:-1},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&8>=document.documentMode){var d=this.$.scopeName;"HTML"!=
+d&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&a&&!a(d)&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];
+for(var d=0;d<arguments.length;d++)if(arguments[d]==a)return!0;return!1},isEditable:function(a){var d=this.getName();return this.isReadOnly()||"none"==this.getComputedStyle("display")||"hidden"==this.getComputedStyle("visibility")||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span,!(!a||!a["#"])):!0},isIdentical:function(a){var d=this.clone(0,1);a=a.clone(0,
+1);d.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode)return d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),d.$.isEqualNode(a.$);d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var b=this.getParent();
+b.type==CKEDITOR.NODE_ELEMENT&&(b=b.clone(),b.setHtml(d),d=b.getHtml(),b.setHtml(a),a=b.getHtml())}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),d,b;a&&CKEDITOR.env.webkit&&(d=this.getWindow(),!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement)&&(a=(new CKEDITOR.dom.element(b)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;for(var a=this.getChildren(),
+d=0,b=a.count();d<b;d++){var g=a.getItem(d);if(g.type!=CKEDITOR.NODE_ELEMENT||!g.data("cke-bookmark"))if(g.type==CKEDITOR.NODE_ELEMENT&&!g.isEmptyInlineRemoveable()||g.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(g.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return!0;case "data-cke-expando":continue;default:if(b.specified)return!0}}return!1}:
+function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return 0<d&&(2<d||!b[a[0].nodeName]||2==d&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var b=this.$.attributes.getNamedItem(d);if("input"==this.getName())switch(d){case "class":return 0<this.$.className.length;case "checked":return!!this.$.checked;case "value":return d=this.getAttribute("type"),"checkbox"==d||"radio"==d?"on"!=this.$.value:!!this.$.value}return b?b.specified:!1}return CKEDITOR.env.ie?
+8>CKEDITOR.env.version?function(d){return"name"==d?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$;a=a.$;if(b!=a){var g;if(d)for(;g=b.lastChild;)a.insertBefore(b.removeChild(g),a.firstChild);else for(;g=b.firstChild;)a.appendChild(b.removeChild(g))}},mergeSiblings:function(){function a(d,b,g){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var c=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();)if(c.push(b),
+b=g?b.getNext():b.getPrevious(),!b||b.type!=CKEDITOR.NODE_ELEMENT)return;if(d.isIdentical(b)){for(var f=g?d.getLast():d.getFirst();c.length;)c.shift().move(d,!g);b.moveChildren(d,!g);b.remove();f&&f.type==CKEDITOR.NODE_ELEMENT&&f.mergeSiblings()}}}return function(d){if(!1===d||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,
+b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){"class"==d?this.$.className=b:"style"==d?this.$.style.cssText=b:"tabindex"==d?this.$.tabIndex=b:"checked"==d?this.$.checked=b:"contenteditable"==d?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if("src"==d&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,
+a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=0;d<a.length;d++)this.removeAttribute(a[d]);else for(d in a=a||this.getAttributes(),
+a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(d.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)d.removeProperty?d.removeProperty(a):d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var b=["top","left","right","bottom"],g;"border"==a&&(g=["color","style","width"]);for(var d=[],c=0;c<b.length;c++)if(g)for(var f=0;f<g.length;f++)d.push([a,b[c],g[f]].join("-"));else d.push([a,b[c]].join("-"));
+for(a=0;a<d.length;a++)this.removeStyle(d[a])}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));
+if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,g=d.count();b<g;b++)a=d.getItem(b),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var d=0,b=0,g=this.getDocument(),c=g.getBody(),f="BackCompat"==g.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie?
+8!==CKEDITOR.env.version:1)){var h=this.$.getBoundingClientRect(),e=g.$.documentElement,p=e.clientTop||c.$.clientTop||0,t=e.clientLeft||c.$.clientLeft||0,m=!0;CKEDITOR.env.ie&&(m=g.getDocumentElement().contains(this),g=g.getBody().contains(this),m=f&&g||!f&&m);m&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(d=c.$.scrollLeft||e.scrollLeft,b=c.$.scrollTop||e.scrollTop):(b=f?c.$:e,d=b.scrollLeft,b=b.scrollTop),d=h.left+d-t,b=h.top+b-p)}else for(p=this,t=null;p&&"body"!=p.getName()&&
+"html"!=p.getName();){d+=p.$.offsetLeft-p.$.scrollLeft;b+=p.$.offsetTop-p.$.scrollTop;p.equals(this)||(d+=p.$.clientLeft||0,b+=p.$.clientTop||0);for(;t&&!t.equals(p);)d-=t.$.scrollLeft,b-=t.$.scrollTop,t=t.getParent();t=p;p=(h=p.$.offsetParent)?new CKEDITOR.dom.element(h):null}a&&(h=this.getWindow(),p=a.getWindow(),!h.equals(p)&&h.$.frameElement&&(a=(new CKEDITOR.dom.element(h.$.frameElement)).getDocumentPosition(a),d+=a.x,b+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||
 f||(d+=this.$.clientLeft?1:0,b+=this.$.clientTop?1:0);return{x:d,y:b}},scrollIntoView:function(a){var d=this.getParent();if(d){do if((d.$.clientWidth&&d.$.clientWidth<d.$.scrollWidth||d.$.clientHeight&&d.$.clientHeight<d.$.scrollHeight)&&!d.is("body")&&this.scrollIntoParent(d,a,1),d.is("html")){var b=d.getWindow();try{var g=b.$.frameElement;g&&(d=new CKEDITOR.dom.element(g))}catch(c){}}while(d=d.getParent())}},scrollIntoParent:function(a,d,b){var g,c,f,h;function e(g,b){/body|html/.test(a.getName())?
-a.getWindow().$.scrollBy(g,b):(a.$.scrollLeft+=g,a.$.scrollTop+=b)}function p(a,g){var b={x:0,y:0};if(!a.is(m?"body":"html")){var d=a.$.getBoundingClientRect();b.x=d.left;b.y=d.top}d=a.getWindow();d.equals(g)||(d=p(CKEDITOR.dom.element.get(d.$.frameElement),g),b.x+=d.x,b.y+=d.y);return b}function r(a,g){return parseInt(a.getComputedStyle("margin-"+g)||0,10)||0}!a&&(a=this.getWindow());f=a.getDocument();var m="BackCompat"==f.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=m?f.getBody():f.getDocumentElement());
-CKEDITOR.env.webkit&&(f=this.getEditor(!1))&&(f._.previousScrollTop=null);f=a.getWindow();c=p(this,f);var l=p(a,f),B=this.$.offsetHeight;g=this.$.offsetWidth;var q=a.$.clientHeight,z=a.$.clientWidth;f=c.x-r(this,"left")-l.x||0;h=c.y-r(this,"top")-l.y||0;g=c.x+g+r(this,"right")-(l.x+z)||0;c=c.y+B+r(this,"bottom")-(l.y+q)||0;(0>h||0<c)&&e(0,!0===d?h:!1===d?c:0>h?h:c);b&&(0>f||0<g)&&e(0>f?f:g,0)},setState:function(a,d,b){d=d||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(d+"_on");this.removeClass(d+
+a.getWindow().$.scrollBy(g,b):(a.$.scrollLeft+=g,a.$.scrollTop+=b)}function p(a,g){var b={x:0,y:0};if(!a.is(m?"body":"html")){var d=a.$.getBoundingClientRect();b.x=d.left;b.y=d.top}d=a.getWindow();d.equals(g)||(d=p(CKEDITOR.dom.element.get(d.$.frameElement),g),b.x+=d.x,b.y+=d.y);return b}function t(a,g){return parseInt(a.getComputedStyle("margin-"+g)||0,10)||0}!a&&(a=this.getWindow());f=a.getDocument();var m="BackCompat"==f.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=m?f.getBody():f.getDocumentElement());
+CKEDITOR.env.webkit&&(f=this.getEditor(!1))&&(f._.previousScrollTop=null);f=a.getWindow();c=p(this,f);var l=p(a,f),A=this.$.offsetHeight;g=this.$.offsetWidth;var q=a.$.clientHeight,y=a.$.clientWidth;f=c.x-t(this,"left")-l.x||0;h=c.y-t(this,"top")-l.y||0;g=c.x+g+t(this,"right")-(l.x+y)||0;c=c.y+A+t(this,"bottom")-(l.y+q)||0;(0>h||0<c)&&e(0,!0===d?h:!1===d?c:0>h?h:c);b&&(0>f||0<g)&&e(0>f?f:g,0)},setState:function(a,d,b){d=d||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(d+"_on");this.removeClass(d+
 "_off");this.removeClass(d+"_disabled");b&&this.setAttribute("aria-pressed",!0);b&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(d+"_disabled");this.removeClass(d+"_off");this.removeClass(d+"_on");b&&this.setAttribute("aria-disabled",!0);b&&this.removeAttribute("aria-pressed");break;default:this.addClass(d+"_off"),this.removeClass(d+"_on"),this.removeClass(d+"_disabled"),b&&this.removeAttribute("aria-pressed"),b&&this.removeAttribute("aria-disabled")}},
 getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(d){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,d){var b=this.$.attributes;d=d||{};for(var g=0;g<b.length;g++){var c=b[g],f=c.nodeName.toLowerCase(),h;if(!(f in d))if("checked"==f&&(h=this.getAttribute(f)))a.setAttribute(f,h);else if(!CKEDITOR.env.ie||this.hasAttribute(f))h=this.getAttribute(f),null===h&&(h=c.nodeValue),a.setAttribute(f,h)}""!==this.$.style.cssText&&
 (a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var d=this.getDocument();a=new CKEDITOR.dom.element(a,d);this.copyAttributes(a);this.moveChildren(a);this.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(d,b){var g=d.childNodes;if(0<=b&&b<g.length)return g[b]}return function(d){var b=this.$;if(d.slice)for(d=d.slice();0<d.length&&b;)b=a(b,
@@ -119,8 +119,8 @@ d.shift());else b=a(b,d);return b?new CKEDITOR.dom.node(b):null}}(),getChildCoun
 a)));d();return a},findOne:function(a){var d=e(this);a=this.$.querySelector(c(this,a));d();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,d,b){if(!(b||d&&this.type!=d))var g=a(this);if(!1!==g){b=this.getChildren();for(var c=0;c<b.count();c++)g=b.getItem(c),g.type==CKEDITOR.NODE_ELEMENT?g.forEach(a,d):d&&g.type!=d||a(g)}}});var l={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};
 CKEDITOR.dom.element.prototype.setSize=function(a,d,b){"number"==typeof d&&(!b||CKEDITOR.env.ie&&CKEDITOR.env.quirks||(d-=f.call(this,a)),this.setStyle(a,d+"px"))};CKEDITOR.dom.element.prototype.getSize=function(a,d){var b=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;d&&(b-=f.call(this,a));return b}}(),CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a},CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,
 CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)},getHtml:function(){var a=new CKEDITOR.dom.element("div");this.clone(1,1).appendTo(a);return a.getHtml().replace(/\s*data-cke-expando=".*?"/g,"")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,
-getChildCount:1,getChild:1,getChildren:1}),function(){function a(a,g){var b=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(b.collapsed)return this.end(),null;b.optimize()}var d,c=b.startContainer;d=b.endContainer;var f=b.startOffset,h=b.endOffset,e,n=this.guard,k=this.type,m=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var l=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),D=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(h):d.getNext();this._.guardLTR=function(a,
-g){return(!g||!l.equals(a))&&(!D||!a.equals(D))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(b.root))}}if(a&&!this._.guardRTL){var C=c.type==CKEDITOR.NODE_ELEMENT?c:c.getParent(),G=c.type==CKEDITOR.NODE_ELEMENT?f?c.getChild(f-1):null:c.getPrevious();this._.guardRTL=function(a,g){return(!g||!C.equals(a))&&(!G||!a.equals(G))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(b.root))}}var F=a?this._.guardRTL:this._.guardLTR;e=n?function(a,g){return!1===F(a,g)?!1:n(a,g)}:F;this.current?d=this.current[m](!1,
+getChildCount:1,getChild:1,getChildren:1}),function(){function a(a,g){var b=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(b.collapsed)return this.end(),null;b.optimize()}var d,c=b.startContainer;d=b.endContainer;var f=b.startOffset,h=b.endOffset,e,n=this.guard,k=this.type,m=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var l=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),B=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(h):d.getNext();this._.guardLTR=function(a,
+g){return(!g||!l.equals(a))&&(!B||!a.equals(B))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(b.root))}}if(a&&!this._.guardRTL){var D=c.type==CKEDITOR.NODE_ELEMENT?c:c.getParent(),G=c.type==CKEDITOR.NODE_ELEMENT?f?c.getChild(f-1):null:c.getPrevious();this._.guardRTL=function(a,g){return(!g||!D.equals(a))&&(!G||!a.equals(G))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(b.root))}}var F=a?this._.guardRTL:this._.guardLTR;e=n?function(a,g){return!1===F(a,g)?!1:n(a,g)}:F;this.current?d=this.current[m](!1,
 k,e):(a?d.type==CKEDITOR.NODE_ELEMENT&&(d=0<h?d.getChild(h-1):!1===e(d,!0)?null:d.getPreviousSourceNode(!0,k,e)):(d=c,d.type==CKEDITOR.NODE_ELEMENT&&((d=d.getChild(f))||(d=!1===e(c,!0)?null:c.getNextSourceNode(!0,k,e)))),d&&!1===e(d)&&(d=null));for(;d&&!this._.end;){this.current=d;if(!this.evaluator||!1!==this.evaluator(d)){if(!g)return d}else if(g&&this.evaluator)return!1;d=d[m](!1,k,e)}this.end();return this.current=null}function e(g){for(var b,d=null;b=a.call(this,g);)d=b;return d}CKEDITOR.dom.walker=
 CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return!1!==a.call(this,0,1)},checkBackward:function(){return!1!==a.call(this,1,1)},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,
 "table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1},f={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return"none"!=this.getComputedStyle("float")||this.getComputedStyle("position")in f||!c[this.getComputedStyle("display")]?!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a)):!0};CKEDITOR.dom.walker.blockBoundary=function(a){return function(g){return!(g.type==CKEDITOR.NODE_ELEMENT&&g.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=
@@ -129,15 +129,15 @@ return!!(a^b)}};CKEDITOR.dom.walker.invisible=function(a){var g=CKEDITOR.dom.wal
 b=b.getNext(g),d=d.isBlockBoundary()&&(!b||b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()));return!!(a^d)}};CKEDITOR.dom.walker.temp=function(a){return function(g){g.type!=CKEDITOR.NODE_ELEMENT&&(g=g.getParent());g=g&&g.hasAttribute("data-cke-temp");return!!(a^g)}};var h=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,m=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),k=CKEDITOR.dom.walker.temp(),d=function(a){return l(a)||m(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};
 CKEDITOR.dom.walker.ignored=function(a){return function(g){g=m(g)||l(g)||k(g);return!!(a^g)}};var b=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(g){for(var d=0,c=g.getChildCount();d<c;++d)if(!b(g.getChild(d)))return!!a;return!a}};var g=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var g={},b;for(b in a)CKEDITOR.dtd[b]["#"]&&(g[b]=1);return g}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=
 function(a){return function(d){d=b(d)?!1:d.type==CKEDITOR.NODE_TEXT||d.type==CKEDITOR.NODE_ELEMENT&&(d.is(CKEDITOR.dtd.$inline)||d.is("hr")||"false"==d.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&d.is(n)&&g(d))?!0:!1;return!!(a^d)}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(d(a));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&h.test(a.getText()))?a:!1}}(),CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=
-this.startOffset=this.startContainer=null;this.collapsed=!0;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a},function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function e(a,b,d,c,f){function h(a,g,b,d){var c=b?a.getPrevious():a.getNext();if(d&&m)return c;q||d?g.append(a.clone(!0,f),b):(a.remove(),l&&g.append(a,b));return c}function e(){var a,g,b,d=Math.min(O.length,
-E.length);for(a=0;a<d;a++)if(g=O[a],b=E[a],!g.equals(b))return a;return a-1}function k(){var b=S-1,d=F&&I&&!z.equals(y);b<L-1||b<P-1||d?(d?a.moveToPosition(y,CKEDITOR.POSITION_BEFORE_START):P==b+1&&G?a.moveToPosition(E[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(E[b+1],CKEDITOR.POSITION_BEFORE_START),c&&(b=O[b+1])&&b.type==CKEDITOR.NODE_ELEMENT&&(d=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',a.document),d.insertAfter(b),
-b.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var m=0===b,l=1==b,q=2==b;b=q||l;var z=a.startContainer,y=a.endContainer,x=a.startOffset,D=a.endOffset,C,G,F,I,H,N;if(q&&y.type==CKEDITOR.NODE_TEXT&&(z.equals(y)||z.type===CKEDITOR.NODE_ELEMENT&&z.getFirst().equals(y)))d.append(a.document.createText(y.substring(x,D)));else{y.type==CKEDITOR.NODE_TEXT?q?N=!0:y=y.split(D):0<y.getChildCount()?D>=y.getChildCount()?(y=y.getChild(D-1),G=!0):y=y.getChild(D):I=G=!0;z.type==
-CKEDITOR.NODE_TEXT?q?H=!0:z.split(x):0<z.getChildCount()?0===x?(z=z.getChild(x),C=!0):z=z.getChild(x-1):F=C=!0;for(var O=z.getParents(),E=y.getParents(),S=e(),L=O.length-1,P=E.length-1,J=d,T,V,W,X=-1,M=S;M<=L;M++){V=O[M];W=V.getNext();for(M!=L||V.equals(E[M])&&L<P?b&&(T=J.append(V.clone(0,f))):C?h(V,J,!1,F):H&&J.append(a.document.createText(V.substring(x)));W;){if(W.equals(E[M])){X=M;break}W=h(W,J)}J=T}J=d;for(M=S;M<=P;M++)if(d=E[M],W=d.getPrevious(),d.equals(O[M]))b&&(J=J.getChild(0));else{M!=P||
-d.equals(O[M])&&P<L?b&&(T=J.append(d.clone(0,f))):G?h(d,J,!1,I):N&&J.append(a.document.createText(d.substring(0,D)));if(M>X)for(;W;)W=h(W,J,!0);J=T}q||k()}}function c(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),c=CKEDITOR.dom.walker.bogus();return function(f){return d(f)||b(f)?!0:c(f)&&!a?a=!0:f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(m)?!1:!0}}function f(a){var b=CKEDITOR.dom.walker.whitespaces(),
-d=CKEDITOR.dom.walker.bookmark(1);return function(c){return d(c)||b(c)?!0:!a&&l(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$removeEmpty)}}function h(a){return function(){var c;return this[a?"getPreviousNode":"getNextNode"](function(a){!c&&b(a)&&(c=a);return d(a)&&!(l(a)&&a.equals(c))})}}var m={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},l=CKEDITOR.dom.walker.bogus(),
-k=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,d=CKEDITOR.dom.walker.editable(),b=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),
-this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||e(this,0,null,a)},extractContents:function(a,b){var d=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,d,a,"undefined"==typeof b?!0:b);return d},createBookmark:function(a){var b,d,c,f,h=this.collapsed;b=this.document.createElement("span");
-b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(c="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id",c+(h?"C":"S")));h||(d=b.clone(),d.setHtml("\x26nbsp;"),a&&d.setAttribute("id",c+"E"),f=this.clone(),f.collapse(),f.insertNode(d));f=this.clone();f.collapse(!0);f.insertNode(b);d?(this.setStartAfter(b),this.setEndBefore(d)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?c+(h?"C":"S"):b,endNode:a?c+"E":d,serializable:a,collapsed:h}},createBookmark2:function(){function a(g){var b=
+this.startOffset=this.startContainer=null;this.collapsed=!0;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a},function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function e(a,b,d,c,f){function h(a,g,b,d){var c=b?a.getPrevious():a.getNext();if(d&&m)return c;q||d?g.append(a.clone(!0,f),b):(a.remove(),l&&g.append(a));return c}function e(){var a,g,b,d=Math.min(O.length,
+E.length);for(a=0;a<d;a++)if(g=O[a],b=E[a],!g.equals(b))return a;return a-1}function k(){var b=S-1,d=F&&I&&!y.equals(x);b<L-1||b<P-1||d?(d?a.moveToPosition(x,CKEDITOR.POSITION_BEFORE_START):P==b+1&&G?a.moveToPosition(E[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(E[b+1],CKEDITOR.POSITION_BEFORE_START),c&&(b=O[b+1])&&b.type==CKEDITOR.NODE_ELEMENT&&(d=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',a.document),d.insertAfter(b),
+b.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var m=0===b,l=1==b,q=2==b;b=q||l;var y=a.startContainer,x=a.endContainer,C=a.startOffset,B=a.endOffset,D,G,F,I,H,N;if(q&&x.type==CKEDITOR.NODE_TEXT&&y.equals(x))y=a.document.createText(y.substring(C,B)),d.append(y);else{x.type==CKEDITOR.NODE_TEXT?q?N=!0:x=x.split(B):0<x.getChildCount()?B>=x.getChildCount()?(x=x.getChild(B-1),G=!0):x=x.getChild(B):I=G=!0;y.type==CKEDITOR.NODE_TEXT?q?H=!0:y.split(C):0<y.getChildCount()?
+0===C?(y=y.getChild(C),D=!0):y=y.getChild(C-1):F=D=!0;for(var O=y.getParents(),E=x.getParents(),S=e(),L=O.length-1,P=E.length-1,J=d,T,V,W,X=-1,M=S;M<=L;M++){V=O[M];W=V.getNext();for(M!=L||V.equals(E[M])&&L<P?b&&(T=J.append(V.clone(0,f))):D?h(V,J,!1,F):H&&J.append(a.document.createText(V.substring(C)));W;){if(W.equals(E[M])){X=M;break}W=h(W,J)}J=T}J=d;for(M=S;M<=P;M++)if(d=E[M],W=d.getPrevious(),d.equals(O[M]))b&&(J=J.getChild(0));else{M!=P||d.equals(O[M])&&P<L?b&&(T=J.append(d.clone(0,f))):G?h(d,
+J,!1,I):N&&J.append(a.document.createText(d.substring(0,B)));if(M>X)for(;W;)W=h(W,J,!0);J=T}q||k()}}function c(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),c=CKEDITOR.dom.walker.bogus();return function(f){return d(f)||b(f)?!0:c(f)&&!a?a=!0:f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(m)?!1:!0}}function f(a){var b=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(1);
+return function(c){return d(c)||b(c)?!0:!a&&l(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$removeEmpty)}}function h(a){return function(){var c;return this[a?"getPreviousNode":"getNextNode"](function(a){!c&&b(a)&&(c=a);return d(a)&&!(l(a)&&a.equals(c))})}}var m={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},l=CKEDITOR.dom.walker.bogus(),k=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,
+d=CKEDITOR.dom.walker.editable(),b=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);
+this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||e(this,0,null,a)},extractContents:function(a,b){var d=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,d,a,"undefined"==typeof b?!0:b);return d},createBookmark:function(a){var b,d,c,f,h=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display",
+"none");b.setHtml("\x26nbsp;");a&&(c="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id",c+(h?"C":"S")));h||(d=b.clone(),d.setHtml("\x26nbsp;"),a&&d.setAttribute("id",c+"E"),f=this.clone(),f.collapse(),f.insertNode(d));f=this.clone();f.collapse(!0);f.insertNode(b);d?(this.setStartAfter(b),this.setEndBefore(d)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?c+(h?"C":"S"):b,endNode:a?c+"E":d,serializable:a,collapsed:h}},createBookmark2:function(){function a(g){var b=
 g.container,c=g.offset,f;f=b;var h=c;f=f.type!=CKEDITOR.NODE_ELEMENT||0===h||h==f.getChildCount()?0:f.getChild(h-1).type==CKEDITOR.NODE_TEXT&&f.getChild(h).type==CKEDITOR.NODE_TEXT;f&&(b=b.getChild(c-1),c=b.getLength());if(b.type==CKEDITOR.NODE_ELEMENT&&0<c){a:{for(f=b;c--;)if(h=f.getChild(c).getIndex(!0),0<=h){c=h;break a}c=-1}c+=1}if(b.type==CKEDITOR.NODE_TEXT){f=b;for(h=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)h+=f.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,"").length;
 f=h;b.getText()?c+=f:(h=b.getPrevious(d),f?(c=f,b=h?h.getNext():b.getParent().getFirst()):(b=b.getParent(),c=h?h.getIndex(!0)+1:0))}g.container=b;g.offset=c}function b(a,g){var d=g.getCustomData("cke-fillingChar");if(d){var c=a.container;d.equals(c)&&(a.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=a.offset&&(a.offset=c.getIndex(),a.container=c.getParent()))}}var d=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(d){var c=this.collapsed,f={container:this.startContainer,
 offset:this.startOffset},h={container:this.endContainer,offset:this.endOffset};d&&(a(f),b(f,this.root),c||(a(h),b(h,this.root)));return{start:f.container.getAddress(d),end:c?null:h.container.getAddress(d),startOffset:f.offset,endOffset:h.offset,normalized:d,collapsed:c,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),d=a.startOffset,c=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,d);c?this.setEnd(c,a):this.collapse(!0)}else b=
@@ -146,16 +146,16 @@ a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(f=b.getChildCount()
 d:d.getCommonAncestor(c);return b&&!d.is?d.getParent():d},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);
 b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var d=this.startContainer,c=this.startOffset,f=this.collapsed;if((!a||f)&&d&&d.type==CKEDITOR.NODE_TEXT){if(c)if(c>=d.getLength())c=d.getIndex()+1,d=d.getParent();else{var h=d.split(c),c=d.getIndex()+1,d=d.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(h,this.endOffset-this.startOffset):d.equals(this.endContainer)&&(this.endOffset+=1)}else c=d.getIndex(),d=d.getParent();
 this.setStart(d,c);if(f){this.collapse(!0);return}}d=this.endContainer;c=this.endOffset;b||f||!d||d.type!=CKEDITOR.NODE_TEXT||(c?(c>=d.getLength()||d.split(c),c=d.getIndex()+1):c=d.getIndex(),d=d.getParent(),this.setEnd(d,c))},enlarge:function(a,b){function d(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var c=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:var h=function(a,b){var g=new CKEDITOR.dom.range(k);
-g.setStart(a,b);g.setEndAt(k,CKEDITOR.POSITION_BEFORE_END);var g=new CKEDITOR.dom.walker(g),d;for(g.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};d=g.next();){if(d.type!=CKEDITOR.NODE_TEXT)return!1;C=d!=a?d.getText():d.substring(b);if(c.test(C))return!1}return!0};if(this.collapsed)break;var e=this.getCommonAncestor(),k=this.root,m,l,q,z,y,x=!1,D,C;D=this.startContainer;var G=this.startOffset;D.type==CKEDITOR.NODE_TEXT?(G&&(D=!CKEDITOR.tools.trim(D.substring(0,G)).length&&
-D,x=!!D),D&&((z=D.getPrevious())||(q=D.getParent()))):(G&&(z=D.getChild(G-1)||D.getLast()),z||(q=D));for(q=d(q);q||z;){if(q&&!z){!y&&q.equals(e)&&(y=!0);if(f?q.isBlockBoundary():!k.contains(q))break;x&&"inline"==q.getComputedStyle("display")||(x=!1,y?m=q:this.setStartBefore(q));z=q.getPrevious()}for(;z;)if(D=!1,z.type==CKEDITOR.NODE_COMMENT)z=z.getPrevious();else{if(z.type==CKEDITOR.NODE_TEXT)C=z.getText(),c.test(C)&&(z=null),D=/[\s\ufeff]$/.test(C);else if((z.$.offsetWidth>(CKEDITOR.env.webkit?1:
-0)||b&&z.is("br"))&&!z.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[z.getName()]){C=z.getText();if(c.test(C))z=null;else for(var G=z.$.getElementsByTagName("*"),F=0,I;I=G[F++];)if(!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break}z&&(D=!!C.length)}else z=null;D&&(x?y?m=q:q&&this.setStartBefore(q):x=!0);if(z){D=z.getPrevious();if(!q&&!D){q=z;z=null;break}z=D}else q=null}q&&(q=d(q.getParent()))}D=this.endContainer;G=this.endOffset;q=z=null;y=x=!1;D.type==CKEDITOR.NODE_TEXT?
-CKEDITOR.tools.trim(D.substring(G)).length?x=!0:(x=!D.getLength(),G==D.getLength()?(z=D.getNext())||(q=D.getParent()):h(D,G)&&(q=D.getParent())):(z=D.getChild(G))||(q=D);for(;q||z;){if(q&&!z){!y&&q.equals(e)&&(y=!0);if(f?q.isBlockBoundary():!k.contains(q))break;x&&"inline"==q.getComputedStyle("display")||(x=!1,y?l=q:q&&this.setEndAfter(q));z=q.getNext()}for(;z;){D=!1;if(z.type==CKEDITOR.NODE_TEXT)C=z.getText(),h(z,0)||(z=null),D=/^[\s\ufeff]/.test(C);else if(z.type==CKEDITOR.NODE_ELEMENT){if((0<z.$.offsetWidth||
-b&&z.is("br"))&&!z.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[z.getName()]){C=z.getText();if(c.test(C))z=null;else for(G=z.$.getElementsByTagName("*"),F=0;I=G[F++];)if(!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break}z&&(D=!!C.length)}else z=null}else D=1;D&&x&&(y?l=q:this.setEndAfter(q));if(z){D=z.getNext();if(!q&&!D){q=z;z=null;break}z=D}else q=null}q&&(q=d(q.getParent()))}m&&l&&(e=m.contains(l)?l:m,this.setStartBefore(e),this.setEndAfter(e));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:q=
+g.setStart(a,b);g.setEndAt(k,CKEDITOR.POSITION_BEFORE_END);var g=new CKEDITOR.dom.walker(g),d;for(g.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};d=g.next();){if(d.type!=CKEDITOR.NODE_TEXT)return!1;D=d!=a?d.getText():d.substring(b);if(c.test(D))return!1}return!0};if(this.collapsed)break;var e=this.getCommonAncestor(),k=this.root,m,l,q,y,x,C=!1,B,D;B=this.startContainer;var G=this.startOffset;B.type==CKEDITOR.NODE_TEXT?(G&&(B=!CKEDITOR.tools.trim(B.substring(0,G)).length&&
+B,C=!!B),B&&((y=B.getPrevious())||(q=B.getParent()))):(G&&(y=B.getChild(G-1)||B.getLast()),y||(q=B));for(q=d(q);q||y;){if(q&&!y){!x&&q.equals(e)&&(x=!0);if(f?q.isBlockBoundary():!k.contains(q))break;C&&"inline"==q.getComputedStyle("display")||(C=!1,x?m=q:this.setStartBefore(q));y=q.getPrevious()}for(;y;)if(B=!1,y.type==CKEDITOR.NODE_COMMENT)y=y.getPrevious();else{if(y.type==CKEDITOR.NODE_TEXT)D=y.getText(),c.test(D)&&(y=null),B=/[\s\ufeff]$/.test(D);else if((y.$.offsetWidth>(CKEDITOR.env.webkit?1:
+0)||b&&y.is("br"))&&!y.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[y.getName()]){D=y.getText();if(c.test(D))y=null;else for(var G=y.$.getElementsByTagName("*"),F=0,I;I=G[F++];)if(!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]){y=null;break}y&&(B=!!D.length)}else y=null;B&&(C?x?m=q:q&&this.setStartBefore(q):C=!0);if(y){B=y.getPrevious();if(!q&&!B){q=y;y=null;break}y=B}else q=null}q&&(q=d(q.getParent()))}B=this.endContainer;G=this.endOffset;q=y=null;x=C=!1;B.type==CKEDITOR.NODE_TEXT?
+CKEDITOR.tools.trim(B.substring(G)).length?C=!0:(C=!B.getLength(),G==B.getLength()?(y=B.getNext())||(q=B.getParent()):h(B,G)&&(q=B.getParent())):(y=B.getChild(G))||(q=B);for(;q||y;){if(q&&!y){!x&&q.equals(e)&&(x=!0);if(f?q.isBlockBoundary():!k.contains(q))break;C&&"inline"==q.getComputedStyle("display")||(C=!1,x?l=q:q&&this.setEndAfter(q));y=q.getNext()}for(;y;){B=!1;if(y.type==CKEDITOR.NODE_TEXT)D=y.getText(),h(y,0)||(y=null),B=/^[\s\ufeff]/.test(D);else if(y.type==CKEDITOR.NODE_ELEMENT){if((0<y.$.offsetWidth||
+b&&y.is("br"))&&!y.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[y.getName()]){D=y.getText();if(c.test(D))y=null;else for(G=y.$.getElementsByTagName("*"),F=0;I=G[F++];)if(!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]){y=null;break}y&&(B=!!D.length)}else y=null}else B=1;B&&C&&(x?l=q:this.setEndAfter(q));if(y){B=y.getNext();if(!q&&!B){q=y;y=null;break}y=B}else q=null}q&&(q=d(q.getParent()))}m&&l&&(e=m.contains(l)?l:m,this.setStartBefore(e),this.setEndAfter(e));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:q=
 new CKEDITOR.dom.range(this.root);k=this.root;q.setStartAt(k,CKEDITOR.POSITION_AFTER_START);q.setEnd(this.startContainer,this.startOffset);q=new CKEDITOR.dom.walker(q);var H,N,O=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),E=null,S=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&"false"==a.getAttribute("contenteditable"))if(E){if(E.equals(a)){E=null;return}}else E=a;else if(E)return;var b=O(a);b||(H=a);return b},f=function(a){var b=S(a);!b&&a.is&&a.is("br")&&
 (N=a);return b};q.guard=S;q=q.lastBackward();H=H||k;this.setStartAt(H,!H.is("br")&&(!q&&this.checkStartOfBlock()||q&&H.contains(q))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){q=this.clone();q=new CKEDITOR.dom.walker(q);var L=CKEDITOR.dom.walker.whitespaces(),P=CKEDITOR.dom.walker.bookmark();q.evaluator=function(a){return!L(a)&&!P(a)};if((q=q.previous())&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("br"))break}q=this.clone();q.collapse();q.setEndAt(k,
 CKEDITOR.POSITION_BEFORE_END);q=new CKEDITOR.dom.walker(q);q.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:S;H=E=N=null;q=q.lastForward();H=H||k;this.setEndAt(H,!q&&this.checkEndOfBlock()||q&&H.contains(q)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);N&&this.setEndAfter(N)}},shrink:function(a,b,d){var c="boolean"===typeof d?d:d&&"boolean"===typeof d.shrinkOnBlockBoundary?d.shrinkOnBlockBoundary:!0,f=d&&d.skipBogus;if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var h=this.clone(),e=
-this.startContainer,k=this.endContainer,m=this.startOffset,l=this.endOffset,q=d=1;e&&e.type==CKEDITOR.NODE_TEXT&&(m?m>=e.getLength()?h.setStartAfter(e):(h.setStartBefore(e),d=0):h.setStartBefore(e));k&&k.type==CKEDITOR.NODE_TEXT&&(l?l>=k.getLength()?h.setEndAfter(k):(h.setEndAfter(k),q=0):h.setEndBefore(k));var h=new CKEDITOR.dom.walker(h),z=CKEDITOR.dom.walker.bookmark(),y=CKEDITOR.dom.walker.bogus();h.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};
-var x;h.guard=function(b,d){if(f&&y(b)||z(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(x)||!1===c&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;d||b.type!=CKEDITOR.NODE_ELEMENT||(x=b);return!0};d&&(e=h[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);q&&(h.reset(),(h=h[a==CKEDITOR.SHRINK_ELEMENT?
+this.startContainer,k=this.endContainer,m=this.startOffset,l=this.endOffset,q=d=1;e&&e.type==CKEDITOR.NODE_TEXT&&(m?m>=e.getLength()?h.setStartAfter(e):(h.setStartBefore(e),d=0):h.setStartBefore(e));k&&k.type==CKEDITOR.NODE_TEXT&&(l?l>=k.getLength()?h.setEndAfter(k):(h.setEndAfter(k),q=0):h.setEndBefore(k));var h=new CKEDITOR.dom.walker(h),y=CKEDITOR.dom.walker.bookmark(),x=CKEDITOR.dom.walker.bogus();h.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};
+var C;h.guard=function(b,d){if(f&&x(b)||y(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(C)||!1===c&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;d||b.type!=CKEDITOR.NODE_ELEMENT||(C=b);return!0};d&&(e=h[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);q&&(h.reset(),(h=h[a==CKEDITOR.SHRINK_ELEMENT?
 "lastBackward":"previous"]())&&this.setEndAt(h,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!d&&!q)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,d=b.getChild(this.startOffset);d?a.insertBefore(d):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);
 this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,d){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(d=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=d;this.endContainer||(this._setEndContainer(b),this.endOffset=d);a(this)},setEnd:function(b,d){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(d=b.getIndex()+
 1,b=b.getParent());this._setEndContainer(b);this.endOffset=d;this.startContainer||(this._setStartContainer(b),this.startOffset=d);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,d){switch(d){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);
@@ -179,51 +179,51 @@ c.startNode.equals(d),m=d.getPosition(c.endNode)&CKEDITOR.POSITION_PRECEDING+CKE
 for(g=c.next();f(g)||b.endContainer.equals(g);)g=c.next();c=!g}c?d.setEnd(b.endContainer,b.endOffset):a.push(b);return a},[])}}(),CKEDITOR.POSITION_AFTER_START=1,CKEDITOR.POSITION_BEFORE_END=2,CKEDITOR.POSITION_BEFORE_START=3,CKEDITOR.POSITION_AFTER_END=4,CKEDITOR.ENLARGE_ELEMENT=1,CKEDITOR.ENLARGE_BLOCK_CONTENTS=2,CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3,CKEDITOR.ENLARGE_INLINE=4,CKEDITOR.START=1,CKEDITOR.END=2,CKEDITOR.SHRINK_ELEMENT=1,CKEDITOR.SHRINK_TEXT=2,"use strict",function(){function a(a){1>
 arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function e(a){var d=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return d.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return d}function c(a,d,f,h){a:{null==h&&(h=e(f));for(var k;k=h.shift();)if(k.getDtd().p){h={element:k,remaining:h};break a}h=null}if(!h)return 0;if((k=CKEDITOR.filter.instances[h.element.data("cke-filter")])&&!k.check(d))return c(a,d,f,h.remaining);
 d=new CKEDITOR.dom.range(h.element);d.selectNodeContents(h.element);d=d.createIterator();d.enlargeBr=a.enlargeBr;d.enforceRealBlocks=a.enforceRealBlocks;d.activeFilter=d.filter=k;a._.nestedEditable={element:h.element,container:f,remaining:h.remaining,iterator:d};return 1}function f(a,d,c){if(!d)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(d,c?CKEDITOR.START:CKEDITOR.END)}var h=/^[\r\n\t ]+$/,m=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),k=function(a){return m(a)&&
-l(a)},d={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var g,e,l,u,w;a=a||"p";if(this._.nestedEditable){if(g=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,g;this.activeFilter=this.filter;if(c(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=null}if(!this.range.root.getDtd()[a])return null;
-if(!this._.started){var p=this.range.clone();e=p.startPath();var r=p.endPath(),v=!p.collapsed&&f(p,e.block),A=!p.collapsed&&f(p,r.block,1);p.shrink(CKEDITOR.SHRINK_ELEMENT,!0);v&&p.setStartAt(e.block,CKEDITOR.POSITION_BEFORE_END);A&&p.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);e=p.endContainer.hasAscendant("pre",!0)||p.startContainer.hasAscendant("pre",!0);p.enlarge(this.forceBrBreak&&!e||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);p.collapsed||(e=new CKEDITOR.dom.walker(p.clone()),
-r=CKEDITOR.dom.walker.bookmark(!0,!0),e.evaluator=r,this._.nextNode=e.next(),e=new CKEDITOR.dom.walker(p.clone()),e.evaluator=r,e=e.previous(),this._.lastNode=e.getNextSourceNode(!0,null,p.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(r=this.range.clone(),r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),r.checkEndOfBlock()&&(r=new CKEDITOR.dom.elementPath(r.endContainer,
-r.root),this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(!0))),this._.lastNode&&p.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=p.document.createText(""),this._.lastNode.insertAfter(e)),p=null);this._.started=1;e=p}r=this._.nextNode;p=this._.lastNode;for(this._.nextNode=null;r;){var v=0,A=r.hasAscendant("pre"),B=r.type!=CKEDITOR.NODE_ELEMENT,q=0;if(B)r.type==CKEDITOR.NODE_TEXT&&h.test(r.getText())&&(B=0);else{var z=r.getName();if(CKEDITOR.dtd.$block[z]&&"false"==r.getAttribute("contenteditable")){g=
-r;c(this,a,g);break}else if(r.isBlockBoundary(this.forceBrBreak&&!A&&{br:1})){if("br"==z)B=1;else if(!e&&!r.getChildCount()&&"hr"!=z){g=r;l=r.equals(p);break}e&&(e.setEndAt(r,CKEDITOR.POSITION_BEFORE_START),"br"!=z&&(this._.nextNode=r));v=1}else{if(r.getFirst()){e||(e=this.range.clone(),e.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));r=r.getFirst();continue}B=1}}B&&!e&&(e=this.range.clone(),e.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));l=(!v||B)&&r.equals(p);if(e&&!v)for(;!r.getNext(k)&&!l;){z=
-r.getParent();if(z.isBlockBoundary(this.forceBrBreak&&!A&&{br:1})){v=1;B=0;l||z.equals(p);e.setEndAt(z,CKEDITOR.POSITION_BEFORE_END);break}r=z;B=1;l=r.equals(p);q=1}B&&e.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=this._getNextSourceNode(r,q,p);if((l=!r)||v&&e)break}if(!g){if(!e)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;g=new CKEDITOR.dom.elementPath(e.startContainer,e.root);r=g.blockLimit;v={div:1,th:1,td:1};g=g.block;!g&&r&&!this.enforceRealBlocks&&v[r.getName()]&&
-e.checkStartOfBlock()&&e.checkEndOfBlock()&&!r.equals(e.root)?g=r:!g||this.enforceRealBlocks&&g.is(d)?(g=this.range.document.createElement(a),e.extractContents().appendTo(g),g.trim(),e.insertNode(g),u=w=!0):"li"!=g.getName()?e.checkStartOfBlock()&&e.checkEndOfBlock()||(g=g.clone(!1),e.extractContents().appendTo(g),g.trim(),w=e.splitBlock(),u=!w.wasStartOfBlock,w=!w.wasEndOfBlock,e.insertNode(g)):l||(this._.nextNode=g.equals(p)?null:this._getNextSourceNode(e.getBoundaryNodes().endNode,1,p))}u&&(u=
-g.getPrevious())&&u.type==CKEDITOR.NODE_ELEMENT&&("br"==u.getName()?u.remove():u.getLast()&&"br"==u.getLast().$.nodeName.toLowerCase()&&u.getLast().remove());w&&(u=g.getLast())&&u.type==CKEDITOR.NODE_ELEMENT&&"br"==u.getName()&&(!CKEDITOR.env.needsBrFiller||u.getPrevious(m)||u.getNext(m))&&u.remove();this._.nextNode||(this._.nextNode=l||g.equals(p)||!p?null:this._getNextSourceNode(g,1,p));return g},_getNextSourceNode:function(a,d,c){function f(a){return!(a.equals(c)||a.equals(h))}var h=this.range.root;
+l(a)},d={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var g,e,l,r,w;a=a||"p";if(this._.nestedEditable){if(g=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,g;this.activeFilter=this.filter;if(c(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=null}if(!this.range.root.getDtd()[a])return null;
+if(!this._.started){var p=this.range.clone();e=p.startPath();var t=p.endPath(),v=!p.collapsed&&f(p,e.block),z=!p.collapsed&&f(p,t.block,1);p.shrink(CKEDITOR.SHRINK_ELEMENT,!0);v&&p.setStartAt(e.block,CKEDITOR.POSITION_BEFORE_END);z&&p.setEndAt(t.block,CKEDITOR.POSITION_AFTER_START);e=p.endContainer.hasAscendant("pre",!0)||p.startContainer.hasAscendant("pre",!0);p.enlarge(this.forceBrBreak&&!e||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);p.collapsed||(e=new CKEDITOR.dom.walker(p.clone()),
+t=CKEDITOR.dom.walker.bookmark(!0,!0),e.evaluator=t,this._.nextNode=e.next(),e=new CKEDITOR.dom.walker(p.clone()),e.evaluator=t,e=e.previous(),this._.lastNode=e.getNextSourceNode(!0,null,p.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(t=this.range.clone(),t.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),t.checkEndOfBlock()&&(t=new CKEDITOR.dom.elementPath(t.endContainer,
+t.root),this._.lastNode=(t.block||t.blockLimit).getNextSourceNode(!0))),this._.lastNode&&p.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=p.document.createText(""),this._.lastNode.insertAfter(e)),p=null);this._.started=1;e=p}t=this._.nextNode;p=this._.lastNode;for(this._.nextNode=null;t;){var v=0,z=t.hasAscendant("pre"),A=t.type!=CKEDITOR.NODE_ELEMENT,q=0;if(A)t.type==CKEDITOR.NODE_TEXT&&h.test(t.getText())&&(A=0);else{var y=t.getName();if(CKEDITOR.dtd.$block[y]&&"false"==t.getAttribute("contenteditable")){g=
+t;c(this,a,g);break}else if(t.isBlockBoundary(this.forceBrBreak&&!z&&{br:1})){if("br"==y)A=1;else if(!e&&!t.getChildCount()&&"hr"!=y){g=t;l=t.equals(p);break}e&&(e.setEndAt(t,CKEDITOR.POSITION_BEFORE_START),"br"!=y&&(this._.nextNode=t));v=1}else{if(t.getFirst()){e||(e=this.range.clone(),e.setStartAt(t,CKEDITOR.POSITION_BEFORE_START));t=t.getFirst();continue}A=1}}A&&!e&&(e=this.range.clone(),e.setStartAt(t,CKEDITOR.POSITION_BEFORE_START));l=(!v||A)&&t.equals(p);if(e&&!v)for(;!t.getNext(k)&&!l;){y=
+t.getParent();if(y.isBlockBoundary(this.forceBrBreak&&!z&&{br:1})){v=1;A=0;l||y.equals(p);e.setEndAt(y,CKEDITOR.POSITION_BEFORE_END);break}t=y;A=1;l=t.equals(p);q=1}A&&e.setEndAt(t,CKEDITOR.POSITION_AFTER_END);t=this._getNextSourceNode(t,q,p);if((l=!t)||v&&e)break}if(!g){if(!e)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;g=new CKEDITOR.dom.elementPath(e.startContainer,e.root);t=g.blockLimit;v={div:1,th:1,td:1};g=g.block;!g&&t&&!this.enforceRealBlocks&&v[t.getName()]&&
+e.checkStartOfBlock()&&e.checkEndOfBlock()&&!t.equals(e.root)?g=t:!g||this.enforceRealBlocks&&g.is(d)?(g=this.range.document.createElement(a),e.extractContents().appendTo(g),g.trim(),e.insertNode(g),r=w=!0):"li"!=g.getName()?e.checkStartOfBlock()&&e.checkEndOfBlock()||(g=g.clone(!1),e.extractContents().appendTo(g),g.trim(),w=e.splitBlock(),r=!w.wasStartOfBlock,w=!w.wasEndOfBlock,e.insertNode(g)):l||(this._.nextNode=g.equals(p)?null:this._getNextSourceNode(e.getBoundaryNodes().endNode,1,p))}r&&(r=
+g.getPrevious())&&r.type==CKEDITOR.NODE_ELEMENT&&("br"==r.getName()?r.remove():r.getLast()&&"br"==r.getLast().$.nodeName.toLowerCase()&&r.getLast().remove());w&&(r=g.getLast())&&r.type==CKEDITOR.NODE_ELEMENT&&"br"==r.getName()&&(!CKEDITOR.env.needsBrFiller||r.getPrevious(m)||r.getNext(m))&&r.remove();this._.nextNode||(this._.nextNode=l||g.equals(p)||!p?null:this._getNextSourceNode(g,1,p));return g},_getNextSourceNode:function(a,d,c){function f(a){return!(a.equals(c)||a.equals(h))}var h=this.range.root;
 for(a=a.getNextSourceNode(d,null,f);!m(a);)a=a.getNextSourceNode(d,null,f);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}}(),CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(c){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==e.exec.call(this,a,c)};this.refresh=function(a,c){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!c.isContextFor(this.context)||
 !this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh",{editor:a,path:c})?!0:e.refresh&&!1!==e.refresh.apply(this,arguments)};var c;this.checkAllowed=function(f){return f||"boolean"!=typeof c?c=a.activeFilter.checkFeature(this):c};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)},CKEDITOR.command.prototype=
 {enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):
 this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}},CKEDITOR.event.implementOn(CKEDITOR.command.prototype),CKEDITOR.ENTER_P=1,CKEDITOR.ENTER_BR=2,CKEDITOR.ENTER_DIV=3,CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),
 extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]},function(){function a(a,b,d,c,g){var f,h;a=[];for(f in b){h=b[f];h="boolean"==typeof h?{}:"function"==typeof h?{match:h}:F(h);"$"!=f.charAt(0)&&(h.elements=f);d&&(h.featureName=d.toLowerCase());var e=h;e.elements=l(e.elements,/\s+/)||null;e.propertiesOnly=e.propertiesOnly||!0===e.elements;var k=/\s*,\s*/,q=void 0;for(q in N){e[q]=l(e[q],
-k)||null;var r=e,m=O[q],n=l(e[O[q]],k),p=e[q],z=[],E=!0,C=void 0;n?E=!1:n={};for(C in p)"!"==C.charAt(0)&&(C=C.slice(1),z.push(C),n[C]=!0,E=!1);for(;C=z.pop();)p[C]=p["!"+C],delete p["!"+C];r[m]=(E?!1:n)||null}e.match=e.match||null;c.push(h);a.push(h)}b=g.elements;g=g.generic;var L;d=0;for(c=a.length;d<c;++d){f=F(a[d]);h=!0===f.classes||!0===f.styles||!0===f.attributes;e=f;q=m=k=void 0;for(k in N)e[k]=v(e[k]);r=!0;for(q in O){k=O[q];m=e[k];n=[];p=void 0;for(p in m)-1<p.indexOf("*")?n.push(new RegExp("^"+
-p.replace(/\*/g,".*")+"$")):n.push(p);m=n;m.length&&(e[k]=m,r=!1)}e.nothingRequired=r;e.noProperties=!(e.attributes||e.classes||e.styles);if(!0===f.elements||null===f.elements)g[h?"unshift":"push"](f);else for(L in e=f.elements,delete f.elements,e)if(b[L])b[L][h?"unshift":"push"](f);else b[L]=[f]}}function e(a,b,d,g){if(!a.match||a.match(b))if(g||k(a,b))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=c(a.attributes,b.attributes,d.validAttributes)),d.allStyles||(d.allStyles=c(a.styles,
+k)||null;var t=e,m=O[q],n=l(e[O[q]],k),p=e[q],y=[],E=!0,D=void 0;n?E=!1:n={};for(D in p)"!"==D.charAt(0)&&(D=D.slice(1),y.push(D),n[D]=!0,E=!1);for(;D=y.pop();)p[D]=p["!"+D],delete p["!"+D];t[m]=(E?!1:n)||null}e.match=e.match||null;c.push(h);a.push(h)}b=g.elements;g=g.generic;var L;d=0;for(c=a.length;d<c;++d){f=F(a[d]);h=!0===f.classes||!0===f.styles||!0===f.attributes;e=f;q=m=k=void 0;for(k in N)e[k]=v(e[k]);t=!0;for(q in O){k=O[q];m=e[k];n=[];p=void 0;for(p in m)-1<p.indexOf("*")?n.push(new RegExp("^"+
+p.replace(/\*/g,".*")+"$")):n.push(p);m=n;m.length&&(e[k]=m,t=!1)}e.nothingRequired=t;e.noProperties=!(e.attributes||e.classes||e.styles);if(!0===f.elements||null===f.elements)g[h?"unshift":"push"](f);else for(L in e=f.elements,delete f.elements,e)if(b[L])b[L][h?"unshift":"push"](f);else b[L]=[f]}}function e(a,b,d,g){if(!a.match||a.match(b))if(g||k(a,b))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=c(a.attributes,b.attributes,d.validAttributes)),d.allStyles||(d.allStyles=c(a.styles,
 b.styles,d.validStyles)),!d.allClasses){a=a.classes;b=b.classes;g=d.validClasses;if(a)if(!0===a)a=!0;else{for(var f=0,h=b.length,e;f<h;++f)e=b[f],g[e]||(g[e]=a(e));a=!1}else a=!1;d.allClasses=a}}function c(a,b,d){if(!a)return!1;if(!0===a)return!0;for(var c in b)d[c]||(d[c]=a(c));return!1}function f(a,b,d){if(!a.match||a.match(b)){if(a.noProperties)return!1;d.hadInvalidAttribute=h(a.attributes,b.attributes)||d.hadInvalidAttribute;d.hadInvalidStyle=h(a.styles,b.styles)||d.hadInvalidStyle;a=a.classes;
 b=b.classes;if(a){for(var c=!1,g=!0===a,f=b.length;f--;)if(g||a(b[f]))b.splice(f,1),c=!0;a=c}else a=!1;d.hadInvalidClass=a||d.hadInvalidClass}}function h(a,b){if(!a)return!1;var d=!1,c=!0===a,g;for(g in b)if(c||a(g))delete b[g],d=!0;return d}function m(a,b,d){if(a.disabled||a.customConfig&&!d||!b)return!1;a._.cachedChecks={};return!0}function l(a,b){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=I(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(b));if(CKEDITOR.tools.isArray(a))return a.length?
 CKEDITOR.tools.convertArrayToObject(a):!1;var d={},c=0,g;for(g in a)d[g]=a[g],c++;return c?d:!1}function k(a,b){if(a.nothingRequired)return!0;var c,g,f,h;if(f=a.requiredClasses)for(h=b.classes,c=0;c<f.length;++c)if(g=f[c],"string"==typeof g){if(-1==CKEDITOR.tools.indexOf(h,g))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(h,g))return!1;return d(b.styles,a.requiredStyles)&&d(b.attributes,a.requiredAttributes)}function d(a,b){if(!b)return!0;for(var d=0,c;d<b.length;++d)if(c=b[d],"string"==
 typeof c){if(!(c in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,c))return!1;return!0}function b(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var b={};a.length;)b[a.shift()]="cke-test";return b}function g(a){var b,d,c,g,f={},h=1;for(a=I(a);b=a.match(E);)(d=b[2])?(c=n(d,"styles"),g=n(d,"attrs"),d=n(d,"classes")):c=g=d=null,f["$"+h++]={elements:b[1],classes:d,styles:c,attributes:g},a=a.slice(b[0].length);return f}function n(a,b){var d=a.match(S[b]);return d?I(d[1]):null}
-function t(a){var b=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function u(a,b,d,c){var g=0,h;c.toHtml&&(b.name=b.name.replace(L,"$1"));if(c.doCallbacks&&a.elementCallbacks){a:{h=a.elementCallbacks;for(var k=0,q=h.length,m;k<q;++k)if(m=h[k](b)){h=m;break a}h=void 0}if(h)return h}if(c.doTransform&&(h=a._.transformations[b.name])){t(b);for(k=0;k<h.length;++k)z(a,b,h[k]);p(b)}if(c.doFilter){a:{k=
-b.name;q=a._;a=q.allowedRules.elements[k];h=q.allowedRules.generic;k=q.disallowedRules.elements[k];q=q.disallowedRules.generic;m=c.skipRequired;var l={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},n,E;if(a||h){t(b);if(k)for(n=0,E=k.length;n<E;++n)if(!1===f(k[n],b,l)){a=null;break a}if(q)for(n=0,E=q.length;n<E;++n)f(q[n],b,l);if(a)for(n=0,E=a.length;n<E;++n)e(a[n],b,l,m);if(h)for(n=
-0,E=h.length;n<E;++n)e(h[n],b,l,m);a=l}else a=null}if(!a||!a.valid)return d.push(b),1;E=a.validAttributes;var v=a.validStyles;h=a.validClasses;var k=b.attributes,O=b.styles,q=b.classes;m=b.classBackup;var C=b.styleBackup,y,x,A=[],l=[],F=/^data-cke-/;n=!1;delete k.style;delete k["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(y in k)E[y]||(F.test(y)?y==(x=y.replace(/^data-cke-saved-/,""))||E[x]||(delete k[y],n=!0):(delete k[y],n=!0));if(!a.allStyles||a.hadInvalidStyle){for(y in O)a.allStyles||
-v[y]?A.push(y+":"+O[y]):n=!0;A.length&&(k.style=A.sort().join("; "))}else C&&(k.style=C);if(!a.allClasses||a.hadInvalidClass){for(y=0;y<q.length;++y)(a.allClasses||h[q[y]])&&l.push(q[y]);l.length&&(k["class"]=l.sort().join(" "));m&&l.length<m.split(/\s+/).length&&(n=!0)}else m&&(k["class"]=m);n&&(g=1);if(!c.skipFinalValidation&&!r(b))return d.push(b),1}c.toHtml&&(b.name=b.name.replace(P,"cke:$1"));return g}function w(a){var b=[],d;for(d in a)-1<d.indexOf("*")&&b.push(d.replace(/\*/g,".*"));return b.length?
-new RegExp("^(?:"+b.join("|")+")$"):null}function p(a){var b=a.attributes,d;delete b.style;delete b["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))b.style=d;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function r(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function v(a){if(!a)return!1;if(!0===a)return!0;var b=w(a);return function(d){return d in a||b&&d.match(b)}}function A(){return new CKEDITOR.htmlParser.element("br")}
-function B(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||G.$block[a.name])}function q(a,b,d){var c=a.name;if(G.$empty[c]||!a.children.length)"hr"==c&&"br"==b?a.replaceWith(A()):(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(G.$block[c]||"tr"==c)if("br"==b)a.previous&&!B(a.previous)&&(b=A(),b.insertBefore(a)),a.next&&!B(a.next)&&(b=A(),b.insertAfter(a)),a.replaceWithChildren();else{var c=a.children,g;b:{g=G[b];for(var f=0,h=c.length,e;f<h;++f)if(e=c[f],e.type==CKEDITOR.NODE_ELEMENT&&
+function u(a){var b=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function r(a,b,d,c){var g=0,h;c.toHtml&&(b.name=b.name.replace(L,"$1"));if(c.doCallbacks&&a.elementCallbacks){a:{h=a.elementCallbacks;for(var k=0,q=h.length,m;k<q;++k)if(m=h[k](b)){h=m;break a}h=void 0}if(h)return h}if(c.doTransform&&(h=a._.transformations[b.name])){u(b);for(k=0;k<h.length;++k)y(a,b,h[k]);p(b)}if(c.doFilter){a:{k=
+b.name;q=a._;a=q.allowedRules.elements[k];h=q.allowedRules.generic;k=q.disallowedRules.elements[k];q=q.disallowedRules.generic;m=c.skipRequired;var l={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},n,E;if(a||h){u(b);if(k)for(n=0,E=k.length;n<E;++n)if(!1===f(k[n],b,l)){a=null;break a}if(q)for(n=0,E=q.length;n<E;++n)f(q[n],b,l);if(a)for(n=0,E=a.length;n<E;++n)e(a[n],b,l,m);if(h)for(n=
+0,E=h.length;n<E;++n)e(h[n],b,l,m);a=l}else a=null}if(!a||!a.valid)return d.push(b),1;E=a.validAttributes;var v=a.validStyles;h=a.validClasses;var k=b.attributes,O=b.styles,q=b.classes;m=b.classBackup;var D=b.styleBackup,x,z,C=[],l=[],F=/^data-cke-/;n=!1;delete k.style;delete k["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(x in k)E[x]||(F.test(x)?x==(z=x.replace(/^data-cke-saved-/,""))||E[z]||(delete k[x],n=!0):(delete k[x],n=!0));if(!a.allStyles||a.hadInvalidStyle){for(x in O)a.allStyles||
+v[x]?C.push(x+":"+O[x]):n=!0;C.length&&(k.style=C.sort().join("; "))}else D&&(k.style=D);if(!a.allClasses||a.hadInvalidClass){for(x=0;x<q.length;++x)(a.allClasses||h[q[x]])&&l.push(q[x]);l.length&&(k["class"]=l.sort().join(" "));m&&l.length<m.split(/\s+/).length&&(n=!0)}else m&&(k["class"]=m);n&&(g=1);if(!c.skipFinalValidation&&!t(b))return d.push(b),1}c.toHtml&&(b.name=b.name.replace(P,"cke:$1"));return g}function w(a){var b=[],d;for(d in a)-1<d.indexOf("*")&&b.push(d.replace(/\*/g,".*"));return b.length?
+new RegExp("^(?:"+b.join("|")+")$"):null}function p(a){var b=a.attributes,d;delete b.style;delete b["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))b.style=d;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function t(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function v(a){if(!a)return!1;if(!0===a)return!0;var b=w(a);return function(d){return d in a||b&&d.match(b)}}function z(){return new CKEDITOR.htmlParser.element("br")}
+function A(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||G.$block[a.name])}function q(a,b,d){var c=a.name;if(G.$empty[c]||!a.children.length)"hr"==c&&"br"==b?a.replaceWith(z()):(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(G.$block[c]||"tr"==c)if("br"==b)a.previous&&!A(a.previous)&&(b=z(),b.insertBefore(a)),a.next&&!A(a.next)&&(b=z(),b.insertAfter(a)),a.replaceWithChildren();else{var c=a.children,g;b:{g=G[b];for(var f=0,h=c.length,e;f<h;++f)if(e=c[f],e.type==CKEDITOR.NODE_ELEMENT&&
 !g[e.name]){g=!1;break b}g=!0}if(g)a.name=b,a.attributes={},d.push({check:"parent-down",el:a});else{g=a.parent;for(var f=g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==g.name,k,q,h=c.length;0<h;)e=c[--h],f&&(e.type==CKEDITOR.NODE_TEXT||e.type==CKEDITOR.NODE_ELEMENT&&G.$inline[e.name])?(k||(k=new CKEDITOR.htmlParser.element(b),k.insertAfter(a),d.push({check:"parent-down",el:k})),k.add(e,0)):(k=null,q=G[g.name]||G.span,e.insertAfter(a),g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||e.type!=CKEDITOR.NODE_ELEMENT||
-q[e.name]||d.push({check:"el-up",el:e}));a.remove()}}else c in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function z(a,b,d){var c,g;for(c=0;c<d.length;++c)if(g=d[c],!(g.check&&!a.check(g.check,!1)||g.left&&!g.left(b))){g.right(b,J);break}}function y(a,b){var d=b.getDefinition(),c=d.attributes,g=d.styles,f,h,e,k;if(a.name!=d.element)return!1;for(f in c)if("class"==f)for(d=c[f].split(/\s+/),e=a.classes.join("|");k=d.pop();){if(-1==e.indexOf(k))return!1}else if(a.attributes[f]!=
-c[f])return!1;for(h in g)if(a.styles[h]!=g[h])return!1;return!0}function x(a,b){var d,c;"string"==typeof a?d=a:a instanceof CKEDITOR.style?c=a:(d=a[0],c=a[1]);return[{element:d,left:c,right:function(a,d){d.transform(a,b)}}]}function D(a){return function(b){return y(b,a)}}function C(a){return function(b,d){d[a](b)}}var G=CKEDITOR.dtd,F=CKEDITOR.tools.copy,I=CKEDITOR.tools.trim,H=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=
+q[e.name]||d.push({check:"el-up",el:e}));a.remove()}}else c in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function y(a,b,d){var c,g;for(c=0;c<d.length;++c)if(g=d[c],!(g.check&&!a.check(g.check,!1)||g.left&&!g.left(b))){g.right(b,J);break}}function x(a,b){var d=b.getDefinition(),c=d.attributes,g=d.styles,f,h,e,k;if(a.name!=d.element)return!1;for(f in c)if("class"==f)for(d=c[f].split(/\s+/),e=a.classes.join("|");k=d.pop();){if(-1==e.indexOf(k))return!1}else if(a.attributes[f]!=
+c[f])return!1;for(h in g)if(a.styles[h]!=g[h])return!1;return!0}function C(a,b){var d,c;"string"==typeof a?d=a:a instanceof CKEDITOR.style?c=a:(d=a[0],c=a[1]);return[{element:d,left:c,right:function(a,d){d.transform(a,b)}}]}function B(a){return function(b){return x(b,a)}}function D(a){return function(b,d){d[a](b)}}var G=CKEDITOR.dtd,F=CKEDITOR.tools.copy,I=CKEDITOR.tools.trim,H=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=
 [];this.elementCallbacks=null;this.disabled=!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a;this.customConfig=!0;var b=a.config.allowedContent;!0===b?this.disabled=!0:(b||(this.customConfig=!1),this.allow(b,"config",1),this.allow(a.config.extraAllowedContent,"extra",1),this.allow(H[a.enterMode]+
 " "+H[a.shiftEnterMode],"default",1),this.disallow(a.config.disallowedContent))}else this.customConfig=!1,this.allow(a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,d,c){if(!m(this,b,c))return!1;var f,h;if("string"==typeof b)b=g(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),d,c);f=b.getDefinition();b={};c=f.attributes;b[f.element]=f={styles:f.styles,requiredStyles:f.styles&&CKEDITOR.tools.objectKeys(f.styles)};
 c&&(c=F(c),f.classes=c["class"]?c["class"].split(/\s+/):null,f.requiredClasses=f.classes,delete c["class"],f.attributes=c,f.requiredAttributes=c&&CKEDITOR.tools.objectKeys(c))}else if(CKEDITOR.tools.isArray(b)){for(f=0;f<b.length;++f)h=this.allow(b[f],d,c);return h}a(this,b,d,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,b,d,c){if(this.disabled)return!1;var g=this,f=[],h=this.editor&&this.editor.config.protectedSource,e,k=!1,m={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:b};
-a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;if(!b||"span"!=a.name||!~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))if(e=u(g,a,f,m),e&1)k=!0;else if(e&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var c=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var q,r,n;if(h)for(r=0;r<h.length;++r)if((n=c.match(h[r]))&&n[0].length==c.length){d=!0;
-break a}c=CKEDITOR.htmlParser.fragment.fromHtml(c);1==c.children.length&&(q=c.children[0]).type==CKEDITOR.NODE_ELEMENT&&u(g,q,d,m);d=!d.length}d||f.push(a)}},null,!0);f.length&&(k=!0);var n;a=[];c=H[c||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var l;d=f.pop();)d.type==CKEDITOR.NODE_ELEMENT?q(d,c,a):d.remove();for(;n=a.pop();)if(d=n.el,d.parent)switch(l=G[d.parent.name]||G.span,n.check){case "it":G.$removeEmpty[d.name]&&!d.children.length?q(d,c,a):r(d)||q(d,c,a);break;case "el-up":d.parent.type==
+a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;if(!b||"span"!=a.name||!~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))if(e=r(g,a,f,m),e&1)k=!0;else if(e&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var c=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var q,t,n;if(h)for(t=0;t<h.length;++t)if((n=c.match(h[t]))&&n[0].length==c.length){d=!0;
+break a}c=CKEDITOR.htmlParser.fragment.fromHtml(c);1==c.children.length&&(q=c.children[0]).type==CKEDITOR.NODE_ELEMENT&&r(g,q,d,m);d=!d.length}d||f.push(a)}},null,!0);f.length&&(k=!0);var n;a=[];c=H[c||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var l;d=f.pop();)d.type==CKEDITOR.NODE_ELEMENT?q(d,c,a):d.remove();for(;n=a.pop();)if(d=n.el,d.parent)switch(l=G[d.parent.name]||G.span,n.check){case "it":G.$removeEmpty[d.name]&&!d.children.length?q(d,c,a):t(d)||q(d,c,a);break;case "el-up":d.parent.type==
 CKEDITOR.NODE_DOCUMENT_FRAGMENT||l[d.name]||q(d,c,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||l[d.name]||q(d.parent,c,a)}return k},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(b){if(!m(this,b,!0))return!1;"string"==typeof b&&(b=g(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return!0},
-addContentForms:function(a){if(!this.disabled&&a){var b,d,c=[],g;for(b=0;b<a.length&&!g;++b)d=a[b],("string"==typeof d||d instanceof CKEDITOR.style)&&this.check(d)&&(g=d);if(g){for(b=0;b<a.length;++b)c.push(x(a[b],g));this.addTransformations(c)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);
-this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):!0},addTransformations:function(a){var b,d;if(!this.disabled&&a){var c=this._.transformations,g;for(g=0;g<a.length;++g){b=a[g];var f=void 0,h=void 0,e=void 0,k=void 0,q=void 0,r=void 0;d=[];for(h=0;h<b.length;++h)e=b[h],"string"==typeof e?(e=e.split(/\s*:\s*/),k=e[0],q=null,r=e[1]):(k=e.check,q=e.left,r=e.right),f||(f=e,f=f.element?f.element:k?k.match(/^([a-z0-9]+)/i)[0]:
-f.left.getDefinition().element),q instanceof CKEDITOR.style&&(q=D(q)),d.push({check:k==f?null:k,left:q,right:"string"==typeof r?C(r):r});b=f;c[b]||(c[b]=[]);c[b].push(d)}}},check:function(a,d,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var f=a.length;f--;)if(this.check(a[f],d,c))return!0;return!1}var h,e;if("string"==typeof a){e=a+"\x3c"+(!1===d?"0":"1")+(c?"1":"0")+"\x3e";if(e in this._.cachedChecks)return this._.cachedChecks[e];f=g(a).$1;h=f.styles;var k=f.classes;f.name=f.elements;
-f.classes=k=k?k.split(/\s*,\s*/):[];f.styles=b(h);f.attributes=b(f.attributes);f.children=[];k.length&&(f.attributes["class"]=k.join(" "));h&&(f.attributes.style=CKEDITOR.tools.writeCssText(f.styles));h=f}else f=a.getDefinition(),h=f.styles,k=f.attributes||{},h&&!CKEDITOR.tools.isEmpty(h)?(h=F(h),k.style=CKEDITOR.tools.writeCssText(h,!0)):h={},h={name:f.element,attributes:k,classes:k["class"]?k["class"].split(/\s+/):[],styles:h,children:[]};var k=CKEDITOR.tools.clone(h),q=[],r;if(!1!==d&&(r=this._.transformations[h.name])){for(f=
-0;f<r.length;++f)z(this,h,r[f]);p(h)}u(this,k,q,{doFilter:!0,doTransform:!1!==d,skipRequired:!c,skipFinalValidation:!c});d=0<q.length?!1:CKEDITOR.tools.objectCompare(h.attributes,k.attributes,!0)?!0:!1;"string"==typeof a&&(this._.cachedChecks[e]=d);return d},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,c){var g=a.slice(),f;if(this.check(H[d]))return d;for(c||(g=g.reverse());f=g.pop();)if(this.check(f))return b[f];
+addContentForms:function(a){if(!this.disabled&&a){var b,d,c=[],g;for(b=0;b<a.length&&!g;++b)d=a[b],("string"==typeof d||d instanceof CKEDITOR.style)&&this.check(d)&&(g=d);if(g){for(b=0;b<a.length;++b)c.push(C(a[b],g));this.addTransformations(c)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);
+this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):!0},addTransformations:function(a){var b,d;if(!this.disabled&&a){var c=this._.transformations,g;for(g=0;g<a.length;++g){b=a[g];var f=void 0,h=void 0,e=void 0,k=void 0,q=void 0,t=void 0;d=[];for(h=0;h<b.length;++h)e=b[h],"string"==typeof e?(e=e.split(/\s*:\s*/),k=e[0],q=null,t=e[1]):(k=e.check,q=e.left,t=e.right),f||(f=e,f=f.element?f.element:k?k.match(/^([a-z0-9]+)/i)[0]:
+f.left.getDefinition().element),q instanceof CKEDITOR.style&&(q=B(q)),d.push({check:k==f?null:k,left:q,right:"string"==typeof t?D(t):t});b=f;c[b]||(c[b]=[]);c[b].push(d)}}},check:function(a,d,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var f=a.length;f--;)if(this.check(a[f],d,c))return!0;return!1}var h,e;if("string"==typeof a){e=a+"\x3c"+(!1===d?"0":"1")+(c?"1":"0")+"\x3e";if(e in this._.cachedChecks)return this._.cachedChecks[e];f=g(a).$1;h=f.styles;var k=f.classes;f.name=f.elements;
+f.classes=k=k?k.split(/\s*,\s*/):[];f.styles=b(h);f.attributes=b(f.attributes);f.children=[];k.length&&(f.attributes["class"]=k.join(" "));h&&(f.attributes.style=CKEDITOR.tools.writeCssText(f.styles));h=f}else f=a.getDefinition(),h=f.styles,k=f.attributes||{},h&&!CKEDITOR.tools.isEmpty(h)?(h=F(h),k.style=CKEDITOR.tools.writeCssText(h,!0)):h={},h={name:f.element,attributes:k,classes:k["class"]?k["class"].split(/\s+/):[],styles:h,children:[]};var k=CKEDITOR.tools.clone(h),q=[],t;if(!1!==d&&(t=this._.transformations[h.name])){for(f=
+0;f<t.length;++f)y(this,h,t[f]);p(h)}r(this,k,q,{doFilter:!0,doTransform:!1!==d,skipRequired:!c,skipFinalValidation:!c});d=0<q.length?!1:CKEDITOR.tools.objectCompare(h.attributes,k.attributes,!0)?!0:!1;"string"==typeof a&&(this._.cachedChecks[e]=d);return d},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,c){var g=a.slice(),f;if(this.check(H[d]))return d;for(c||(g=g.reverse());f=g.pop();)if(this.check(f))return b[f];
 return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;delete this.disallowedContent}};var N={styles:1,attributes:1,classes:1},O={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},E=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,S={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},L=/^cke:(object|embed|param)$/,
 P=/^(object|embed|param)$/,J;J=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,d){d=d||b;if(!(d in a.styles)){var c=a.attributes[b];c&&(/^\d+$/.test(c)&&(c+="px"),a.styles[d]=c)}delete a.attributes[b]},lengthToAttribute:function(a,b,d){d=d||b;if(!(d in a.attributes)){var c=a.styles[b],g=c&&c.match(/^(\d+)(?:\.\d*)?px$/);
 g?a.attributes[d]=g[1]:"cke-test"==c&&(a.attributes[d]="cke-test")}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b=a.attributes.align;if("left"==b||"right"==b)a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if("left"==b||"right"==b)a.attributes.align=b}delete a.styles["float"]},splitBorderShorthand:function(a){function b(c){a.styles["border-top-width"]=d[c[0]];a.styles["border-right-width"]=
 d[c[1]];a.styles["border-bottom-width"]=d[c[2]];a.styles["border-left-width"]=d[c[3]]}if(a.styles.border){var d=a.styles.border.match(/([\.\d]+\w+)/g)||["0px"];switch(d.length){case 1:a.styles["border-width"]=d[0];break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}a.styles["border-style"]=a.styles["border-style"]||(a.styles.border.match(/(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|initial|inherit)/)||[])[0];a.styles["border-style"]||delete a.styles["border-style"];
 delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function b(c){a.styles["margin-top"]=
-d[c[0]];a.styles["margin-right"]=d[c[1]];a.styles["margin-bottom"]=d[c[2]];a.styles["margin-left"]=d[c[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(\-?[\.\d]+\w+)/g)||["0px"];switch(d.length){case 1:b([0,0,0,0]);break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}delete a.styles.margin}},matchesStyle:y,transform:function(a,b){if("string"==typeof b)a.name=b;else{var d=b.getDefinition(),c=d.styles,g=d.attributes,f,h,e,k;a.name=d.element;for(f in g)if("class"==f)for(d=
+d[c[0]];a.styles["margin-right"]=d[c[1]];a.styles["margin-bottom"]=d[c[2]];a.styles["margin-left"]=d[c[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(\-?[\.\d]+\w+)/g)||["0px"];switch(d.length){case 1:b([0,0,0,0]);break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}delete a.styles.margin}},matchesStyle:x,transform:function(a,b){if("string"==typeof b)a.name=b;else{var d=b.getDefinition(),c=d.styles,g=d.attributes,f,h,e,k;a.name=d.element;for(f in g)if("class"==f)for(d=
 a.classes.join("|"),e=g[f].split(/\s+/);k=e.pop();)-1==d.indexOf(k)&&a.classes.push(k);else a.attributes[f]=g[f];for(h in c)a.styles[h]=c[h]}}}}(),function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);a&&(this.currentActive=a);this.hasFocus||this._.locked||((a=CKEDITOR.currentInstance)&&
 a.focusManager.blur(1),this.hasFocus=!0,(a=this._.editor.container)&&a.addClass("cke_focus"),this._.editor.fire("focus"))},lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=!1;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var c=CKEDITOR.focusManager._.blurDelay;a||!c?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;
 e.call(this)},c,this)}},add:function(a,e){var c=a.getCustomData("focusmanager");if(!c||c!=this){c&&c.remove(a);var c="focus",f="blur";e&&(CKEDITOR.env.ie?(c="focusin",f="focusout"):CKEDITOR.event.useCapture=1);var h={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(c,h.focus,this);a.on(f,h.blur,this);e&&(CKEDITOR.event.useCapture=0);a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",h)}},remove:function(a){a.removeCustomData("focusmanager");
@@ -231,12 +231,12 @@ var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur",e.blur
 a&&c.preventDefault(!0);return!a},c=function(c){a&&(a=!1,c.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",c,this)}}}(),function(){CKEDITOR.lang={languages:{af:1,ar:1,az:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,
 lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,oc:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,c){a&&CKEDITOR.lang.languages[a]||(a=this.detect(e,a));var f=this;e=function(){f[a].dir=f.rtl[a]?"rtl":"ltr";c(a,f[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var c=this.languages;e=e||navigator.userLanguage||navigator.language||
 a;var f=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),h=f[1],f=f[2];c[h+"-"+f]?h=h+"-"+f:c[h]||(h=null);CKEDITOR.lang.detect=h?function(){return h}:function(a){return a};return h||a}}}(),CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(c,f,h,m){var l="string"==typeof c;l&&(c=[c]);h||(h=CKEDITOR);var k=c.length,d=[],b=[],g=function(a){f&&(l?f.call(h,a):f.call(h,d,b))};if(0===k)g(!0);else{var n=function(a,c){(c?d:b).push(a);0>=--k&&(m&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),
-g(c))},t=function(b,d){a[b]=1;var c=e[b];delete e[b];for(var g=0;g<c.length;g++)c[g](b,d)},u=function(b){if(a[b])n(b,!0);else{var d=e[b]||(e[b]=[]);d.push(n);if(!(1<d.length)){var c=new CKEDITOR.dom.element("script");c.setAttributes({type:"text/javascript",src:b});f&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?c.$.onreadystatechange=function(){if("loaded"==c.$.readyState||"complete"==c.$.readyState)c.$.onreadystatechange=null,t(b,!0)}:(c.$.onload=function(){setTimeout(function(){t(b,
-!0)},0)},c.$.onerror=function(){t(b,!1)}));c.appendTo(CKEDITOR.document.getHead())}}};m&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var w=0;w<k;w++)u(c[w])}},queue:function(){function a(){var c;(c=f[0])&&this.load(c.scriptUrl,c.callback,CKEDITOR,0)}var f=[];return function(h,e){var l=this;f.push({scriptUrl:h,callback:function(){e&&e.apply(this,arguments);f.shift();a.call(l)}});1==f.length&&a.call(this)}}()}}(),CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=
+g(c))},u=function(b,d){a[b]=1;var c=e[b];delete e[b];for(var g=0;g<c.length;g++)c[g](b,d)},r=function(b){if(a[b])n(b,!0);else{var d=e[b]||(e[b]=[]);d.push(n);if(!(1<d.length)){var c=new CKEDITOR.dom.element("script");c.setAttributes({type:"text/javascript",src:b});f&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?c.$.onreadystatechange=function(){if("loaded"==c.$.readyState||"complete"==c.$.readyState)c.$.onreadystatechange=null,u(b,!0)}:(c.$.onload=function(){setTimeout(function(){u(b,
+!0)},0)},c.$.onerror=function(){u(b,!1)}));c.appendTo(CKEDITOR.document.getHead())}}};m&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var w=0;w<k;w++)r(c[w])}},queue:function(){function a(){var c;(c=f[0])&&this.load(c.scriptUrl,c.callback,CKEDITOR,0)}var f=[];return function(h,e){var l=this;f.push({scriptUrl:h,callback:function(){e&&e.apply(this,arguments);f.shift();a.call(l)}});1==f.length&&a.call(this)}}()}}(),CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=
 e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.');var c=this.registered[a]=e||{};c.name=a;c.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",c);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&&
 e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,c){a=a.split(",");for(var f=0;f<a.length;f++){var h=a[f];c||(e=e.replace(/[^\/]+$/,function(a){c=a;return""}));this.externals[h]={dir:e,file:c||this.fileName+".js"}}},load:function(a,e,c){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var f=this.loaded,h=this.registered,m=[],l={},k={},d=0;d<a.length;d++){var b=a[d];if(b)if(f[b]||
-h[b])k[b]=this.get(b);else{var g=this.getFilePath(b);m.push(g);g in l||(l[g]=[]);l[g].push(b)}}CKEDITOR.scriptLoader.load(m,function(a,b){if(b.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+l[b[0]].join(",")+'" was not found at "'+b[0]+'".');for(var d=0;d<a.length;d++)for(var g=l[a[d]],h=0;h<g.length;h++){var r=g[h];k[r]=this.get(r);f[r]=1}e.call(c,k)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,
-function(a){var e={};return function(c,f,h){var m={},l=function(c){a.call(this,c,function(a){CKEDITOR.tools.extend(m,a);var b=[],c;for(c in a){var k=a[c],t=k&&k.requires;if(!e[c]){if(k.icons)for(var u=k.icons.split(","),w=u.length;w--;)CKEDITOR.skin.addIcon(u[w],k.path+"icons/"+(CKEDITOR.env.hidpi&&k.hidpi?"hidpi/":"")+u[w]+".png");e[c]=1}if(t)for(t.split&&(t=t.split(",")),k=0;k<t.length;k++)m[t[k]]||b.push(t[k])}if(b.length)l.call(this,b);else{for(c in m)k=m[c],k.onLoad&&!k.onLoad._called&&(!1===
+h[b])k[b]=this.get(b);else{var g=this.getFilePath(b);m.push(g);g in l||(l[g]=[]);l[g].push(b)}}CKEDITOR.scriptLoader.load(m,function(a,b){if(b.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+l[b[0]].join(",")+'" was not found at "'+b[0]+'".');for(var d=0;d<a.length;d++)for(var g=l[a[d]],h=0;h<g.length;h++){var t=g[h];k[t]=this.get(t);f[t]=1}e.call(c,k)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,
+function(a){var e={};return function(c,f,h){var m={},l=function(c){a.call(this,c,function(a){CKEDITOR.tools.extend(m,a);var b=[],c;for(c in a){var k=a[c],u=k&&k.requires;if(!e[c]){if(k.icons)for(var r=k.icons.split(","),w=r.length;w--;)CKEDITOR.skin.addIcon(r[w],k.path+"icons/"+(CKEDITOR.env.hidpi&&k.hidpi?"hidpi/":"")+r[w]+".png");e[c]=1}if(u)for(u.split&&(u=u.split(",")),k=0;k<u.length;k++)m[u[k]]||b.push(u[k])}if(b.length)l.call(this,b);else{for(c in m)k=m[c],k.onLoad&&!k.onLoad._called&&(!1===
 k.onLoad()&&delete m[c],k.onLoad._called=1);f&&f.call(h||window,m)}},this)};l.call(this,c)}}),CKEDITOR.plugins.setLang=function(a,e,c){var f=this.get(a);a=f.langEntries||(f.langEntries={});f=f.lang||(f.lang=[]);f.split&&(f=f.split(","));-1==CKEDITOR.tools.indexOf(f,e)&&f.push(e);a[e]=c},CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this},CKEDITOR.ui.prototype={add:function(a,e,c){c.name=a.toLowerCase();var f=this.items[a]={type:e,
 command:c.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(f,c)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],c=e&&this._.handlers[e.type],f=e&&e.command&&this.editor.getCommand(e.command),c=c&&c.create.apply(this,e.args);this.instances[a]=c;f&&f.uiItems.push(c);c&&!c.type&&(c.type=e.type);return c},addHandler:function(a,e){this._.handlers[a]=e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+
 "_"+a}},CKEDITOR.event.implementOn(CKEDITOR.ui),function(){function a(a,b,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==b){if(!(b instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");if(!d)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!c(b,d))throw Error('The specified element mode is not supported on element: "'+
@@ -249,16 +249,16 @@ a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnt
 d){var c=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(d);a.title="string"==typeof c||!1===c?c:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");g(a)})}function g(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);n(a)})}function n(a){var b=a.config,d=b.plugins,c=b.extraPlugins,g=
 b.removePlugins;if(c)var f=new RegExp("(?:^|,)(?:"+c.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),d=d.replace(f,""),d=d+(","+c);if(g)var h=new RegExp("(?:^|,)(?:"+g.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),d=d.replace(h,"");CKEDITOR.env.air&&(d+=",adobeair");CKEDITOR.plugins.load(d.split(","),function(d){var c=[],g=[],f=[];a.plugins=d;for(var e in d){var k=d[e],q=k.lang,m=null,l=k.requires,n;CKEDITOR.tools.isArray(l)&&(l=l.join(","));if(l&&(n=l.match(h)))for(;l=n.pop();)CKEDITOR.error("editor-plugin-required",
 {plugin:l.replace(",",""),requiredBy:e});q&&!a.lang[e]&&(q.split&&(q=q.split(",")),0<=CKEDITOR.tools.indexOf(q,a.langCode)?m=a.langCode:(m=a.langCode.replace(/-.*/,""),m=m!=a.langCode&&0<=CKEDITOR.tools.indexOf(q,m)?m:0<=CKEDITOR.tools.indexOf(q,"en")?"en":q[0]),k.langEntries&&k.langEntries[m]?(a.lang[e]=k.langEntries[m],m=null):f.push(CKEDITOR.getUrl(k.path+"lang/"+m+".js")));g.push(m);c.push(k)}CKEDITOR.scriptLoader.load(f,function(){for(var d=["beforeInit","init","afterInit"],f=0;f<d.length;f++)for(var h=
-0;h<c.length;h++){var e=c[h];0===f&&g[h]&&e.lang&&e.langEntries&&(a.lang[e.name]=e.langEntries[g[h]]);if(e[d[f]])e[d[f]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function t(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();
-this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return!0}return!1}function u(a,b){function d(a){var b=a.startContainer,c=a.endContainer;return b.is&&(b.is("tr")||b.is("td")&&b.equals(c)&&a.endOffset===b.getChildCount())?!0:!1}function c(a){var b=a.startContainer;return b.is("tr")?a.cloneContents():b.clone(!0)}for(var g=new CKEDITOR.dom.documentFragment,f,h,e,k=0;k<a.length;k++){var m=a[k],l=m.startContainer.getAscendant("tr",!0);d(m)?(f||
+0;h<c.length;h++){var e=c[h];0===f&&g[h]&&e.lang&&e.langEntries&&(a.lang[e.name]=e.langEntries[g[h]]);if(e[d[f]])e[d[f]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function u(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();
+this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return!0}return!1}function r(a,b){function d(a){var b=a.startContainer,c=a.endContainer;return b.is&&(b.is("tr")||b.is("td")&&b.equals(c)&&a.endOffset===b.getChildCount())?!0:!1}function c(a){var b=a.startContainer;return b.is("tr")?a.cloneContents():b.clone(!0)}for(var g=new CKEDITOR.dom.documentFragment,f,h,e,k=0;k<a.length;k++){var m=a[k],l=m.startContainer.getAscendant("tr",!0);d(m)?(f||
 (f=l.getAscendant("table").clone(),f.append(l.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),g.append(f),f=f.findOne("thead, tbody, tfoot")),h&&h.equals(l)||(h=l,e=l.clone(),f.append(e)),e.append(c(m))):g.append(m.cloneContents())}return f?g:b.getHtmlFromRange(a[0])}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var w=0,p={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&h(this,d);return this.commands[a]=
 d},_attachToForm:function(){function a(b){d.updateElement();d._.required&&!c.getValue()&&!1===d.fire("required")&&b.data.preventDefault()}function b(a){return!!(a&&a.call&&a.apply)}var d=this,c=d.element,g=new CKEDITOR.dom.element(c.$.form);c.is("textarea")&&g&&(g.on("submit",a),b(g.$.submit)&&(g.$.submit=CKEDITOR.tools.override(g.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}})),d.on("destroy",function(){g.removeListener("submit",a)}))},destroy:function(a){this.fire("beforeDestroy");
-!a&&t.call(this);this.editable(null);this.filter&&(this.filter.destroy(),delete this.filter);delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,
+!a&&u.call(this);this.editable(null);this.filter&&(this.filter.destroy(),delete this.filter);delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,
 b){var d=this.getCommand(a),c={name:a,commandData:b||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",c)&&(c.returnValue=d.exec(c.commandData),!d.async&&!1!==this.fire("afterCommandExec",c))?c.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;"string"!=typeof b&&(b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():
 "");b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,d){var c=!0,g=b;b&&"object"==typeof b&&(d=b.internal,g=b.callback,c=!b.noSnapshot);!d&&c&&this.fire("saveSnapshot");if(g||!d)this.once("dataReady",function(a){!d&&
 c&&this.fire("saveSnapshot");g&&g.call(a.editor)});a={dataValue:a};!d&&this.fire("setData",a);this._.data=a.dataValue;!d&&this.fire("afterSetData",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly=a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire("readOnly"))},insertHtml:function(a,b,d){this.fire("insertHtml",{dataValue:a,mode:b,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",
-a)},getSelectedHtml:function(a){var b=this.editable(),d=this.getSelection(),d=d&&d.getRanges();if(!b||!d||0===d.length)return null;b=u(d,b);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var d=this.editable(),c=this.getSelection().getRanges(),g=new CKEDITOR.dom.documentFragment,f;if(!d||0===c.length)return null;for(f=0;f<c.length;f++)g.append(d.extractHtmlFromRange(c[f],b));b||this.getSelection().selectRanges([c[0]]);return a?g.getHtml():g},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==
-this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return t.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,c,g=b.length;g--;)d=b[g],c=0,CKEDITOR.tools.isArray(d)&&(c=d[1],d=d[0]),c?a[d]=c:delete a[d]},getCommandKeystroke:function(a){if(a="string"===typeof a?this.getCommand(a):a){var b=CKEDITOR.tools.object.findKey(this.commands,
+a)},getSelectedHtml:function(a){var b=this.editable(),d=this.getSelection(),d=d&&d.getRanges();if(!b||!d||0===d.length)return null;b=r(d,b);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var d=this.editable(),c=this.getSelection().getRanges(),g=new CKEDITOR.dom.documentFragment,f;if(!d||0===c.length)return null;for(f=0;f<c.length;f++)g.append(d.extractHtmlFromRange(c[f],b));b||this.getSelection().selectRanges([c[0]]);return a?g.getHtml():g},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==
+this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return u.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,c,g=b.length;g--;)d=b[g],c=0,CKEDITOR.tools.isArray(d)&&(c=d[1],d=d[0]),c?a[d]=c:delete a[d]},getCommandKeystroke:function(a){if(a="string"===typeof a?this.getCommand(a):a){var b=CKEDITOR.tools.object.findKey(this.commands,
 a),d=this.keystrokeHandler.keystrokes,c;if(a.fakeKeystroke)return a.fakeKeystroke;for(c in d)if(d.hasOwnProperty(c)&&d[c]==b)return c}return null},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire("activeFilterChange"),a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,
 b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b)this.activeEnterMode=a,this.activeShiftEnterMode=b,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)}})}(),CKEDITOR.ELEMENT_MODE_NONE=0,CKEDITOR.ELEMENT_MODE_REPLACE=1,CKEDITOR.ELEMENT_MODE_APPENDTO=2,CKEDITOR.ELEMENT_MODE_INLINE=3,CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}},
 function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(c){for(var f,h,m=0,l;f=this._.htmlPartsRegex.exec(c);){h=f.index;if(h>m)if(m=c.substring(m,h),l)l.push(m);else this.onText(m);
@@ -270,13 +270,13 @@ this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e="func
 function(a){this.value=a;this._={isBlockLike:!1}},CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var c=this.value;if(!(c=a.onComment(e,c,this)))return this.remove(),!1;if("string"!=typeof c)return this.replaceWith(c),!1;this.value=c;return!0},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}}),"use strict",function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=
 CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this)))return this.remove(),!1},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})}(),"use strict",
 CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}},function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),c={ol:1,ul:1},f=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),h={ul:"li",
-ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(m,l,k){function d(a){var d;if(0<r.length)for(var c=0;c<r.length;c++){var g=r[c],f=g.name,h=CKEDITOR.dtd[f],e=A.name&&CKEDITOR.dtd[A.name];e&&!e[f]||a&&h&&!h[a]&&CKEDITOR.dtd[a]?f==A.name&&(n(A,A.parent,1),c--):(d||(b(),d=1),g=g.clone(),g.parent=A,A=g,r.splice(c,1),c--)}}function b(){for(;v.length;)n(v.shift(),A)}function g(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var b=
-a.children.length,d=a.children[b-1],c;d&&d.type==CKEDITOR.NODE_TEXT&&((c=CKEDITOR.tools.rtrim(d.value))?d.value=c:a.children.length=b-1)}}function n(b,d,c){d=d||A||p;var f=A;void 0===b.previous&&(t(d,b)&&(A=d,w.onTagOpen(k,{}),b.returnPoint=d=A),g(b),a(b)&&!b.children.length||d.add(b),"pre"==b.name&&(q=!1),"textarea"==b.name&&(B=!1));b.returnPoint?(A=b.returnPoint,delete b.returnPoint):A=c?d:f}function t(a,b){if((a==p||"body"==a.name)&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var d,c;return(d=b.attributes&&
-(c=b.attributes["data-cke-real-element-type"])?c:b.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function u(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||"dt"==a&&"dd"==b||"dd"==a&&"dt"==b:!1}var w=new CKEDITOR.htmlParser,p=l instanceof CKEDITOR.htmlParser.element?l:"string"==typeof l?new CKEDITOR.htmlParser.element(l):new CKEDITOR.htmlParser.fragment,r=[],v=[],A=p,B="textarea"==p.name,q="pre"==p.name;w.onTagOpen=
-function(g,h,k,m){h=new CKEDITOR.htmlParser.element(g,h);h.isUnknown&&k&&(h.isEmpty=!0);h.isOptionalClose=m;if(a(h))r.push(h);else{if("pre"==g)q=!0;else{if("br"==g&&q){A.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==g&&(B=!0)}if("br"==g)v.push(h);else{for(;!(m=(k=A.name)?CKEDITOR.dtd[k]||(A._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f,h.isUnknown||A.isUnknown||m[g]);)if(A.isOptionalClose)w.onTagClose(k);else if(g in c&&k in c)k=A.children,(k=k[k.length-1])&&"li"==k.name||n(k=new CKEDITOR.htmlParser.element("li"),
-A),!h.returnPoint&&(h.returnPoint=A),A=k;else if(g in CKEDITOR.dtd.$listItem&&!u(g,k))w.onTagOpen("li"==g?"ul":"dl",{},0,1);else if(k in e&&!u(g,k))!h.returnPoint&&(h.returnPoint=A),A=A.parent;else if(k in CKEDITOR.dtd.$inline&&r.unshift(A),A.parent)n(A,A.parent,1);else{h.isOrphan=1;break}d(g);b();h.parent=A;h.isEmpty?n(h):A=h}}};w.onTagClose=function(a){for(var d=r.length-1;0<=d;d--)if(a==r[d].name){r.splice(d,1);return}for(var c=[],g=[],f=A;f!=p&&f.name!=a;)f._.isBlockLike||g.unshift(f),c.push(f),
-f=f.returnPoint||f.parent;if(f!=p){for(d=0;d<c.length;d++){var h=c[d];n(h,h.parent)}A=f;f._.isBlockLike&&b();n(f,f.parent);f==A&&(A=A.parent);r=r.concat(g)}"body"==a&&(k=!1)};w.onText=function(a){if(!(A._.hasInlineStarted&&!v.length||q||B)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var c=A.name,g=c?CKEDITOR.dtd[c]||(A._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!B&&!g["#"]&&c in e)w.onTagOpen(h[c]||""),w.onText(a);else{b();d();q||B||(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=
-new CKEDITOR.htmlParser.text(a);if(t(A,a))this.onTagOpen(k,{},0,1);A.add(a)}};w.onCDATA=function(a){A.add(new CKEDITOR.htmlParser.cdata(a))};w.onComment=function(a){b();d();A.add(new CKEDITOR.htmlParser.comment(a))};w.parse(m);for(b();A!=p;)n(A,A.parent,1);g(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,c){isNaN(c)&&(c=this.children.length);var f=0<c?this.children[c-1]:null;if(f){if(a._.isBlockLike&&f.type==CKEDITOR.NODE_TEXT&&(f.value=CKEDITOR.tools.rtrim(f.value),
+ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(m,l,k){function d(a){var d;if(0<t.length)for(var c=0;c<t.length;c++){var g=t[c],f=g.name,h=CKEDITOR.dtd[f],e=z.name&&CKEDITOR.dtd[z.name];e&&!e[f]||a&&h&&!h[a]&&CKEDITOR.dtd[a]?f==z.name&&(n(z,z.parent,1),c--):(d||(b(),d=1),g=g.clone(),g.parent=z,z=g,t.splice(c,1),c--)}}function b(){for(;v.length;)n(v.shift(),z)}function g(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var b=
+a.children.length,d=a.children[b-1],c;d&&d.type==CKEDITOR.NODE_TEXT&&((c=CKEDITOR.tools.rtrim(d.value))?d.value=c:a.children.length=b-1)}}function n(b,d,c){d=d||z||p;var f=z;void 0===b.previous&&(u(d,b)&&(z=d,w.onTagOpen(k,{}),b.returnPoint=d=z),g(b),a(b)&&!b.children.length||d.add(b),"pre"==b.name&&(q=!1),"textarea"==b.name&&(A=!1));b.returnPoint?(z=b.returnPoint,delete b.returnPoint):z=c?d:f}function u(a,b){if((a==p||"body"==a.name)&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var d,c;return(d=b.attributes&&
+(c=b.attributes["data-cke-real-element-type"])?c:b.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function r(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||"dt"==a&&"dd"==b||"dd"==a&&"dt"==b:!1}var w=new CKEDITOR.htmlParser,p=l instanceof CKEDITOR.htmlParser.element?l:"string"==typeof l?new CKEDITOR.htmlParser.element(l):new CKEDITOR.htmlParser.fragment,t=[],v=[],z=p,A="textarea"==p.name,q="pre"==p.name;w.onTagOpen=
+function(g,h,k,m){h=new CKEDITOR.htmlParser.element(g,h);h.isUnknown&&k&&(h.isEmpty=!0);h.isOptionalClose=m;if(a(h))t.push(h);else{if("pre"==g)q=!0;else{if("br"==g&&q){z.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==g&&(A=!0)}if("br"==g)v.push(h);else{for(;!(m=(k=z.name)?CKEDITOR.dtd[k]||(z._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f,h.isUnknown||z.isUnknown||m[g]);)if(z.isOptionalClose)w.onTagClose(k);else if(g in c&&k in c)k=z.children,(k=k[k.length-1])&&"li"==k.name||n(k=new CKEDITOR.htmlParser.element("li"),
+z),!h.returnPoint&&(h.returnPoint=z),z=k;else if(g in CKEDITOR.dtd.$listItem&&!r(g,k))w.onTagOpen("li"==g?"ul":"dl",{},0,1);else if(k in e&&!r(g,k))!h.returnPoint&&(h.returnPoint=z),z=z.parent;else if(k in CKEDITOR.dtd.$inline&&t.unshift(z),z.parent)n(z,z.parent,1);else{h.isOrphan=1;break}d(g);b();h.parent=z;h.isEmpty?n(h):z=h}}};w.onTagClose=function(a){for(var d=t.length-1;0<=d;d--)if(a==t[d].name){t.splice(d,1);return}for(var c=[],g=[],f=z;f!=p&&f.name!=a;)f._.isBlockLike||g.unshift(f),c.push(f),
+f=f.returnPoint||f.parent;if(f!=p){for(d=0;d<c.length;d++){var h=c[d];n(h,h.parent)}z=f;f._.isBlockLike&&b();n(f,f.parent);f==z&&(z=z.parent);t=t.concat(g)}"body"==a&&(k=!1)};w.onText=function(a){if(!(z._.hasInlineStarted&&!v.length||q||A)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var c=z.name,g=c?CKEDITOR.dtd[c]||(z._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!A&&!g["#"]&&c in e)w.onTagOpen(h[c]||""),w.onText(a);else{b();d();q||A||(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=
+new CKEDITOR.htmlParser.text(a);if(u(z,a))this.onTagOpen(k,{},0,1);z.add(a)}};w.onCDATA=function(a){z.add(new CKEDITOR.htmlParser.cdata(a))};w.onComment=function(a){b();d();z.add(new CKEDITOR.htmlParser.comment(a))};w.parse(m);for(b();z!=p;)n(z,z.parent,1);g(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,c){isNaN(c)&&(c=this.children.length);var f=0<c?this.children[c-1]:null;if(f){if(a._.isBlockLike&&f.type==CKEDITOR.NODE_TEXT&&(f.value=CKEDITOR.tools.rtrim(f.value),
 0===f.value.length)){this.children.pop();this.add(a);return}f.next=a}a.previous=f;a.parent=this;this.children.splice(c,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,c){c=this.getFilterContext(c);a.onRoot(c,this);this.filterChildren(a,!1,c)},filterChildren:function(a,c,f){if(this.childrenFilteredBy!=a.id){f=this.getFilterContext(f);if(c&&!this.parent)a.onRoot(f,this);this.childrenFilteredBy=a.id;
 for(c=0;c<this.children.length;c++)!1===this.children[c].filter(a,f)&&c--}},writeHtml:function(a,c){c&&this.filter(c);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,c,f){var d=this.getFilterContext();if(f&&!this.parent&&c)c.onRoot(d,this);c&&this.filterChildren(c,!1,d);c=0;f=this.children;for(d=f.length;c<d;c++)f[c].writeHtml(a)},forEach:function(a,c,f){if(!(f||c&&this.type!=c))var d=a(this);if(!1!==d){f=this.children;for(var b=0;b<f.length;b++)d=f[b],d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,
 c):c&&d.type!=c||a(d)}},getFilterContext:function(a){return a||{}}}}(),"use strict",function(){function a(){this.rules=[]}function e(c,f,h,e){var l,k;for(l in f)(k=c[l])||(k=c[l]=new a),k.add(f[l],h,e)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(c){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;c&&this.addRules(c,10)},
@@ -286,25 +286,25 @@ e.exec(a,f,this);if(!1===e)return null;if(e&&e!=f)return this.onNode(a,e);if(f.p
 {add:function(a,f,h){this.rules.splice(this.findIndex(f),0,{value:a,priority:f,options:h})},addMany:function(a,f,h){for(var e=[this.findIndex(f),0],l=0,k=a.length;l<k;l++)e.push({value:a[l],priority:f,options:h});this.rules.splice.apply(this.rules,e)},findIndex:function(a){for(var f=this.rules,h=f.length-1;0<=h&&a<f[h].priority;)h--;return h+1},exec:function(a,f){var h=f instanceof CKEDITOR.htmlParser.node||f instanceof CKEDITOR.htmlParser.fragment,e=Array.prototype.slice.call(arguments,1),l=this.rules,
 k=l.length,d,b,g,n;for(n=0;n<k;n++)if(h&&(d=f.type,b=f.name),g=l[n],!(a.nonEditable&&!g.options.applyToAll||a.nestedEditable&&g.options.excludeNestedEditable)){g=g.value.apply(null,e);if(!1===g||h&&g&&(g.name!=b||g.type!=d))return g;null!=g&&(e[0]=f=g)}return f},execOnName:function(a,f){for(var h=0,e=this.rules,l=e.length,k;f&&h<l;h++)k=e[h],a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable||(f=f.replace(k.value[0],k.value[1]));return f}}}(),function(){function a(a,
 b){function d(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function g(a,b){return function(g){if(g.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var h=[],k=c(g),q,l;if(k)for(e(k,1)&&h.push(k);k;)m(k)&&(q=f(k))&&e(q)&&((l=f(q))&&!m(l)?h.push(q):(d(n).insertAfter(q),q.remove())),k=k.previous;for(k=0;k<h.length;k++)h[k].remove();if(h=!a||!1!==("function"==typeof b?b(g):b))n||CKEDITOR.env.needsBrFiller||g.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?
-n||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||g.name in CKEDITOR.dtd.tr||g.name in CKEDITOR.dtd.$listItem)?(h=c(g),h=!h||"form"==g.name&&"input"==h.name):h=!1:h=!1;h&&g.add(d(a))}}}function e(a,b){if((!n||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(r))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&
-n&&(!b||a.parent.name in p)||!n&&((d=a.previous)&&"br"==d.name||!d||m(d)))?!0:!1}var k={elements:{}},n="html"==b,p=CKEDITOR.tools.extend({},q),E;for(E in p)"#"in A[E]||delete p[E];for(E in p)k.elements[E]=g(n,a.config.fillEmptyBlocks);k.root=g(n,!1);k.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=b.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=b.next;c&&h(c);)c=c.next;var g=f(b);!c&&m(b.parent)?l(b.parent,
+n||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||g.name in CKEDITOR.dtd.tr||g.name in CKEDITOR.dtd.$listItem)?(h=c(g),h=!h||"form"==g.name&&"input"==h.name):h=!1:h=!1;h&&g.add(d(a))}}}function e(a,b){if((!n||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(t))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&
+n&&(!b||a.parent.name in p)||!n&&((d=a.previous)&&"br"==d.name||!d||m(d)))?!0:!1}var k={elements:{}},n="html"==b,p=CKEDITOR.tools.extend({},q),E;for(E in p)"#"in z[E]||delete p[E];for(E in p)k.elements[E]=g(n,a.config.fillEmptyBlocks);k.root=g(n,!1);k.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=b.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=b.next;c&&h(c);)c=c.next;var g=f(b);!c&&m(b.parent)?l(b.parent,
 d(a)):m(c)&&g&&!m(g)&&d(a).insertBefore(c)}}}}(n);return k}function e(a,b){return a!=CKEDITOR.ENTER_BR&&!1!==b?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function c(a){for(a=a.children[a.children.length-1];a&&h(a);)a=a.previous;return a}function f(a){for(a=a.previous;a&&h(a);)a=a.previous;return a}function h(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function m(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in
-q||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function l(a,b){var d=a.children[a.children.length-1];a.children.push(b);b.parent=a;d&&(d.next=b,b.previous=d)}function k(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function d(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function b(a){return a.replace(C,function(a,b,d){return"\x3c"+b+d.replace(G,
-function(a,b){return F.test(b)&&-1==d.indexOf("data-cke-saved-"+b)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function g(a,b){return a.replace(b,function(a,b,d){0===a.indexOf("\x3ctextarea")&&(a=b+u(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(N,function(a,b){return decodeURIComponent(b)})}function t(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
-function(a){return"\x3c!--"+v+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function u(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function w(a,b){var d=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return d&&d[b]||""})}function p(a,b){var d=[],c=b.config.protectedSource,g=b._.dataStore||(b._.dataStore=
+q||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function l(a,b){var d=a.children[a.children.length-1];a.children.push(b);b.parent=a;d&&(d.next=b,b.previous=d)}function k(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function d(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function b(a){return a.replace(D,function(a,b,d){return"\x3c"+b+d.replace(G,
+function(a,b){return F.test(b)&&-1==d.indexOf("data-cke-saved-"+b)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function g(a,b){return a.replace(b,function(a,b,d){0===a.indexOf("\x3ctextarea")&&(a=b+r(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(N,function(a,b){return decodeURIComponent(b)})}function u(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
+function(a){return"\x3c!--"+v+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function r(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function w(a,b){var d=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return d&&d[b]||""})}function p(a,b){var d=[],c=b.config.protectedSource,g=b._.dataStore||(b._.dataStore=
 {id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,c=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(c);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(d.push(a)-1)+"--\x3e"});for(var h=0;h<c.length;h++)a=a.replace(c[h],function(a){a=a.replace(f,function(a,b,c){return d[c]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(f,function(a,b,c){return"\x3c!--"+v+(b?"{C}":
-"")+encodeURIComponent(d[c]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){g[g.id]=decodeURIComponent(b);return"{cke_protected_"+g.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,c,g){return"\x3c"+d+c+"\x3e"+w(u(g),b)+"\x3c/"+d+"\x3e"})}CKEDITOR.htmlDataProcessor=function(d){var c,
-f,h=this;this.editor=d;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=f=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(z);c.addRules(y,{applyToAll:!0});c.addRules(a(d,"data"),{applyToAll:!0});f.addRules(x);f.addRules(D,{applyToAll:!0});f.addRules(a(d,"html"),{applyToAll:!0});d.on("toHtml",function(a){a=a.data;var c=a.dataValue,f,c=p(c,d),c=g(c,H),c=b(c),c=g(c,I),c=c.replace(O,"$1cke:$2"),c=c.replace(S,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),
-c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");f=a.context||d.editable().getName();var h;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==f&&(f="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",h=1);f=d.document.createElement(f);f.setHtml("a"+c);c=f.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");h&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(E,"$1$2");c=n(c);c=u(c);f=!1===a.fixForBody?!1:
+"")+encodeURIComponent(d[c]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){g[g.id]=decodeURIComponent(b);return"{cke_protected_"+g.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,c,g){return"\x3c"+d+c+"\x3e"+w(r(g),b)+"\x3c/"+d+"\x3e"})}CKEDITOR.htmlDataProcessor=function(d){var c,
+f,h=this;this.editor=d;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=f=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(y);c.addRules(x,{applyToAll:!0});c.addRules(a(d,"data"),{applyToAll:!0});f.addRules(C);f.addRules(B,{applyToAll:!0});f.addRules(a(d,"html"),{applyToAll:!0});d.on("toHtml",function(a){a=a.data;var c=a.dataValue,f,c=p(c,d),c=g(c,H),c=b(c),c=g(c,I),c=c.replace(O,"$1cke:$2"),c=c.replace(S,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),
+c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");f=a.context||d.editable().getName();var h;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==f&&(f="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",h=1);f=d.document.createElement(f);f.setHtml("a"+c);c=f.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");h&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(E,"$1$2");c=n(c);c=r(c);f=!1===a.fixForBody?!1:
 e(a.enterMode,d.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,f);f&&(h=c,!h.children.length&&CKEDITOR.dtd[h.name][f]&&(f=new CKEDITOR.htmlParser.element(f),h.add(f)));a.dataValue=c},null,null,5);d.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&d.fire("dataFiltered")},null,null,6);d.on("toHtml",function(a){a.data.dataValue.filterChildren(h.dataFilter,!0)},null,null,10);d.on("toHtml",function(a){a=a.data;var b=a.dataValue,
-d=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(d);b=d.getHtml(!0);a.dataValue=t(b)},null,null,15);d.on("toDataFormat",function(a){var b=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(b,a.data.context,e(a.data.enterMode,d.config.autoParagraph))},null,null,5);d.on("toDataFormat",function(a){a.data.dataValue.filterChildren(h.htmlFilter,!0)},null,null,10);d.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,
-!1,!0)},null,null,11);d.on("toDataFormat",function(a){var b=a.data.dataValue,c=h.writer;c.reset();b.writeChildrenHtml(c);b=c.getHtml(!0);b=u(b);b=w(b,d);a.data.dataValue=b},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,d,c){var g=this.editor,f,h,e,k;b&&"object"==typeof b?(f=b.context,d=b.fixForBody,c=b.dontFilter,h=b.filter,e=b.enterMode,k=b.protectedWhitespaces):f=b;f||null===f||(f=g.editable().getName());return g.fire("toHtml",{dataValue:a,context:f,fixForBody:d,dontFilter:c,
-filter:h||g.filter,enterMode:e||g.enterMode,protectedWhitespaces:k}).dataValue},toDataFormat:function(a,b){var d,c,g;b&&(d=b.context,c=b.filter,g=b.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:c||this.editor.filter,context:d,enterMode:g||this.editor.enterMode}).dataValue}};var r=/(?:&nbsp;|\xa0)$/,v="{cke_protected}",A=CKEDITOR.dtd,B="caption colgroup col thead tfoot tbody".split(" "),q=CKEDITOR.tools.extend({},A.$blockLimit,
-A.$block),z={elements:{input:k,textarea:k}},y={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},x={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var d=b.attributes.width,b=b.attributes.height;
-d&&(a.attributes.width=d);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},D={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var d=["name","href","src"],c,g=0;g<d.length;g++)c="data-cke-saved-"+d[g],c in b&&delete b[d[g]]}return a},
-table:function(a){a.children.slice(0).sort(function(a,b){var d,c;a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type&&(d=CKEDITOR.tools.indexOf(B,a.name),c=CKEDITOR.tools.indexOf(B,b.name));-1<d&&-1<c&&d!=c||(d=a.parent?a.getIndex():-1,c=b.parent?b.getIndex():-1);return d>c?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;
-delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&l(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:d,textarea:d},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(D.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,
-function(a){return a.toLowerCase()})});var C=/<(a|area|img|input|source)\b([^>]*)>/gi,G=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,I=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,H=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,N=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,O=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,S=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi}(),
+d=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(d);b=d.getHtml(!0);a.dataValue=u(b)},null,null,15);d.on("toDataFormat",function(a){var b=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(b,a.data.context,e(a.data.enterMode,d.config.autoParagraph))},null,null,5);d.on("toDataFormat",function(a){a.data.dataValue.filterChildren(h.htmlFilter,!0)},null,null,10);d.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,
+!1,!0)},null,null,11);d.on("toDataFormat",function(a){var b=a.data.dataValue,c=h.writer;c.reset();b.writeChildrenHtml(c);b=c.getHtml(!0);b=r(b);b=w(b,d);a.data.dataValue=b},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,d,c){var g=this.editor,f,h,e,k;b&&"object"==typeof b?(f=b.context,d=b.fixForBody,c=b.dontFilter,h=b.filter,e=b.enterMode,k=b.protectedWhitespaces):f=b;f||null===f||(f=g.editable().getName());return g.fire("toHtml",{dataValue:a,context:f,fixForBody:d,dontFilter:c,
+filter:h||g.filter,enterMode:e||g.enterMode,protectedWhitespaces:k}).dataValue},toDataFormat:function(a,b){var d,c,g;b&&(d=b.context,c=b.filter,g=b.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:c||this.editor.filter,context:d,enterMode:g||this.editor.enterMode}).dataValue}};var t=/(?:&nbsp;|\xa0)$/,v="{cke_protected}",z=CKEDITOR.dtd,A="caption colgroup col thead tfoot tbody".split(" "),q=CKEDITOR.tools.extend({},z.$blockLimit,
+z.$block),y={elements:{input:k,textarea:k}},x={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},C={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var d=b.attributes.width,b=b.attributes.height;
+d&&(a.attributes.width=d);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},B={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var d=["name","href","src"],c,g=0;g<d.length;g++)c="data-cke-saved-"+d[g],c in b&&delete b[d[g]]}return a},
+table:function(a){a.children.slice(0).sort(function(a,b){var d,c;a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type&&(d=CKEDITOR.tools.indexOf(A,a.name),c=CKEDITOR.tools.indexOf(A,b.name));-1<d&&-1<c&&d!=c||(d=a.parent?a.getIndex():-1,c=b.parent?b.getIndex():-1);return d>c?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;
+delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&l(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:d,textarea:d},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(B.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,
+function(a){return a.toLowerCase()})});var D=/<(a|area|img|input|source)\b([^>]*)>/gi,G=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,I=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,H=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,N=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,O=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,S=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi}(),
 "use strict",CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var c=a||"",f=c.match(/^cke:(.*)/);f&&(c=f[1]);c=!!(CKEDITOR.dtd.$nonBodyContent[c]||CKEDITOR.dtd.$block[c]||CKEDITOR.dtd.$listItem[c]||CKEDITOR.dtd.$tableContent[c]||CKEDITOR.dtd.$nonEditable[c]||"br"==c);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:c,hasInlineStarted:this.isEmpty||!c}},CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof
 CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,f,h){"font-family"==f&&(h=h.replace(/["']/g,""));e[f.toLowerCase()]=h});return{rules:e,populate:function(a){var f=this.toString();f&&(a instanceof CKEDITOR.dom.element?a.setAttribute("style",f):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=f:a.style=f)},toString:function(){var a=[],f;for(f in e)e[f]&&a.push(f,":",e[f],";");return a.join("")}}},function(){function a(a){return function(c){return c.type==
 CKEDITOR.NODE_ELEMENT&&("string"==typeof a?c.name==a:c.name in a)}}var e=function(a,c){a=a[0];c=c[0];return a<c?-1:a>c?1:0},c=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:c.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,c){var e=this,l,k;c=e.getFilterContext(c);if(c.off)return!0;if(!e.parent)a.onRoot(c,e);for(;;){l=e.name;if(!(k=
@@ -330,30 +330,30 @@ e.resetDirty();b?e.fire("unlockSnapshot"):"wysiwyg"==a&&e.fire("saveSnapshot");s
 0),k=Math.max(c-(e?0:g),0);c=e?c+g:c;d.setStyle("height",k+"px");b&&(b.style.width="100%");this.fire("resize",{outerHeight:c,contentsHeight:k,outerWidth:a||l.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})}(),CKEDITOR.config.startupMode="wysiwyg",function(){function a(a){var b=a.editor,d=a.data.path,c=d.blockLimit,g=a.data.selection,
 h=g.getRanges()[0],k;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(g=e(g,d))g.appendBogus(),k=CKEDITOR.env.ie;l(b,d.block,c)&&h.collapsed&&!h.getCommonAncestor().isReadOnly()&&(d=h.clone(),d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),c=new CKEDITOR.dom.walker(d),c.guard=function(a){return!f(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!c.checkForward()||d.checkStartOfBlock()&&d.checkEndOfBlock())&&(b=h.fixBlock(!0,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||
 (b=b.getFirst(f))&&b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/)&&b.remove(),k=1,a.cancel());k&&h.select()}function e(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,c=d&&d.getLast(f);if(!(!d||!d.isBlockBoundary()||c&&c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()||d.is("pre")||d.getBogus()))return d}function c(a){var b=a.data.getTarget();b.is("input")&&(b=b.getAttribute("type"),"submit"!=b&&"reset"!=b||a.data.preventDefault())}function f(a){return g(a)&&
-n(a)}function h(a,b){return function(d){var c=d.data.$.toElement||d.data.$.fromElement||d.data.$.relatedTarget;(c=c&&c.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(c):null)&&(b.equals(c)||b.contains(c))||a.call(this,d)}}function m(a){function b(a){return function(b,c){c&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(g)&&(d=b);if(!(c||!f(b)||a&&u(b)))return!1}}var d,c=a.getRanges()[0];a=a.root;var g={table:1,ul:1,ol:1,dl:1};if(c.startPath().contains(g)){var e=c.clone();e.collapse(1);e.setStartAt(a,
+n(a)}function h(a,b){return function(d){var c=d.data.$.toElement||d.data.$.fromElement||d.data.$.relatedTarget;(c=c&&c.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(c):null)&&(b.equals(c)||b.contains(c))||a.call(this,d)}}function m(a){function b(a){return function(b,c){c&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(g)&&(d=b);if(!(c||!f(b)||a&&r(b)))return!1}}var d,c=a.getRanges()[0];a=a.root;var g={table:1,ul:1,ol:1,dl:1};if(c.startPath().contains(g)){var e=c.clone();e.collapse(1);e.setStartAt(a,
 CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(e);a.guard=b();a.checkBackward();if(d)return e=c.clone(),e.collapse(),e.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(e),a.guard=b(!0),d=!1,a.checkForward(),d}return null}function l(a,b,d){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(d)&&!b||b&&"true"==b.getAttribute("contenteditable"))}function k(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?
-a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function d(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function b(a,b,d){var c=a.getCommonAncestor(b);for(b=a=d?b:a;(a=a.getParent())&&!c.equals(a)&&1==a.getChildCount();)b=a;b.remove()}var g,n,t,u,w,p,r,v,A,B;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;
+a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function d(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function b(a,b,d){var c=a.getCommonAncestor(b);for(b=a=d?b:a;(a=a.getParent())&&!c.equals(a)&&1==a.getChildCount();)b=a;b.remove()}var g,n,u,r,w,p,t,v,z,A;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;
 if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{if(!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document))if(CKEDITOR.env.chrome){var b=this.$.scrollTop;this.$.focus();this.$.scrollTop=b}else this.$.focus();
 else this.$.setActive()}catch(d){if(!CKEDITOR.env.ie)throw d;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,b){var d=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(a)&&(a="focus"==a?"focusin":"focusout",b=h(b,this),d[0]=a,d[1]=b);return CKEDITOR.dom.element.prototype.on.apply(this,d)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,
 1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,d;for(d in a)a.hasOwnProperty(d)&&(b=a[d],null!==b?this.setAttribute(d,b):this.removeAttribute(d))},attachClass:function(a){var b=this.getCustomData("classes");this.hasClass(a)||(!b&&(b=[]),b.push(a),this.setCustomData("classes",b),this.addClass(a))},changeAttr:function(a,b){var d=this.getAttribute(a);
 b!==d&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=d),this.setAttribute(a,b))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),"text")},transformPlainTextToHtml:function(a){var b=this.editor.getSelection().getStartElement().hasAscendant("pre",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,b)},insertHtml:function(a,b,c){var g=this.editor;g.focus();g.fire("saveSnapshot");
 c||(c=g.getSelection().getRanges()[0]);p(this,b||"html",a,c);c.select();d(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,b,d){p(this,d||"html",a,b);this.editor.fire("afterInsertHtml",{intoRange:b})},insertElement:function(a,b){var c=this.editor;c.focus();c.fire("saveSnapshot");var g=c.activeEnterMode,c=c.getSelection(),e=a.getName(),e=CKEDITOR.dtd.$block[e];b||(b=c.getRanges()[0]);this.insertElementIntoRange(a,b)&&(b.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),e&&((e=
-a.getNext(function(a){return f(a)&&!u(a)}))&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block)?e.getDtd()["#"]?b.moveToElementEditStart(e):b.moveToElementEditEnd(a):e||g==CKEDITOR.ENTER_BR||(e=b.fixBlock(!0,g==CKEDITOR.ENTER_DIV?"div":"p"),b.moveToElementEditStart(e))));c.selectRanges([b]);d(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var d=this.editor,c=d.config.enterMode,g=a.getName(),f=CKEDITOR.dtd.$block[g];if(b.checkReadOnly())return!1;
-b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?r(b):b.startContainer.is(CKEDITOR.dtd.$list)&&v(b));var e,h;if(f)for(;(e=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[e.getName()])&&(!h||!h[g]);)e.getName()in CKEDITOR.dtd.span?b.splitElement(e):b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(e),b.collapse(!0),e.remove()):b.splitBlock(c==CKEDITOR.ENTER_DIV?"div":"p",d.editable());b.insertNode(a);return!0},setData:function(a,
+a.getNext(function(a){return f(a)&&!r(a)}))&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block)?e.getDtd()["#"]?b.moveToElementEditStart(e):b.moveToElementEditEnd(a):e||g==CKEDITOR.ENTER_BR||(e=b.fixBlock(!0,g==CKEDITOR.ENTER_DIV?"div":"p"),b.moveToElementEditStart(e))));c.selectRanges([b]);d(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var d=this.editor,c=d.config.enterMode,g=a.getName(),f=CKEDITOR.dtd.$block[g];if(b.checkReadOnly())return!1;
+b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?t(b):b.startContainer.is(CKEDITOR.dtd.$list)&&v(b));var e,h;if(f)for(;(e=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[e.getName()])&&(!h||!h[g]);)e.getName()in CKEDITOR.dtd.span?b.splitElement(e):b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(e),b.collapse(!0),e.remove()):b.splitBlock(c==CKEDITOR.ENTER_DIV?"div":"p",d.editable());b.insertNode(a);return!0},setData:function(a,
 b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},
 fixInitialSelection:function(){function a(){var b=d.getDocument().$,c=b.getSelection(),g;a:if(c.anchorNode&&c.anchorNode==d.$)g=!0;else{if(CKEDITOR.env.webkit&&(g=d.getDocument().getActive())&&g.equals(d)&&!c.anchorNode){g=!0;break a}g=void 0}g&&(g=new CKEDITOR.dom.range(d),g.moveToElementEditStart(d),b=b.createRange(),b.setStart(g.startContainer.$,g.startOffset),b.collapse(!0),c.removeAllRanges(),c.addRange(b))}function b(){var a=d.getDocument().$,c=a.selection,g=d.getDocument().getActive();"None"==
 c.type&&g.equals(d)&&(c=new CKEDITOR.dom.range(d),a=a.body.createTextRange(),c.moveToElementEditStart(d),c=c.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent()),a.moveToElementText(c.$),a.collapse(!0),a.select())}var d=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);
-a={doc:this.getDocument(),range:a.clone()};A.eol.detect(a,this);A.bogus.exclude(a);A.cell.shrink(a);a.fragment=a.range.cloneContents();A.tree.rebuild(a,this);A.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var d=B,c={range:a,doc:a.document},g=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),g;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);d.table.detectPurge(c);c.bookmark=a.createBookmark();delete c.range;var f=this.editor.createRange();
-f.moveToPosition(c.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);c.targetBookmark=f.createBookmark();d.list.detectMerge(c,this);d.table.detectRanges(c,this);d.block.detectMerge(c,this);c.tableContentsRanges?(d.table.deleteRanges(c),a.moveToBookmark(c.bookmark),c.range=a):(a.moveToBookmark(c.bookmark),c.range=a,a.extractContents(d.detectExtractMerge(c)));a.moveToBookmark(c.targetBookmark);a.optimize();d.fixUneditableRangePosition(a);d.list.merge(c,this);d.table.purge(c,this);d.block.merge(c,this);
-if(b){d=a.startPath();if(c=a.checkStartOfBlock()&&a.checkEndOfBlock()&&d.block&&!a.root.equals(d.block)){a:{var c=d.block.getElementsByTag("span"),f=0,e;if(c)for(;e=c.getItem(f++);)if(!n(e)){c=!0;break a}c=!1}c=!c}c&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),t(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return g},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=
+a={doc:this.getDocument(),range:a.clone()};z.eol.detect(a,this);z.bogus.exclude(a);z.cell.shrink(a);a.fragment=a.range.cloneContents();z.tree.rebuild(a,this);z.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var d=A,c={range:a,doc:a.document},g=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),g;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);d.table.detectPurge(c);c.bookmark=a.createBookmark();delete c.range;var e=this.editor.createRange();
+e.moveToPosition(c.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);c.targetBookmark=e.createBookmark();d.list.detectMerge(c,this);d.table.detectRanges(c,this);d.block.detectMerge(c,this);c.tableContentsRanges?(d.table.deleteRanges(c),a.moveToBookmark(c.bookmark),c.range=a):(a.moveToBookmark(c.bookmark),c.range=a,a.extractContents(d.detectExtractMerge(c)));a.moveToBookmark(c.targetBookmark);a.optimize();d.fixUneditableRangePosition(a);d.list.merge(c,this);d.table.purge(c,this);d.block.merge(c,this);
+if(b){d=a.startPath();if(c=a.checkStartOfBlock()&&a.checkEndOfBlock()&&d.block&&!a.root.equals(d.block)){a:{var c=d.block.getElementsByTag("span"),e=0,f;if(c)for(;f=c.getItem(e++);)if(!n(f)){c=!0;break a}c=!1}c=!c}c&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),u(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return g},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=
 this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(w,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&"Control"==b.type||this.focus()},
 this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||
 this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var d=function(){var b=a.editable();
 null!=a._.previousScrollTop&&b.getDocument().equals(CKEDITOR.document)&&(b.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll",d))};this.on("scroll",d)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",
 !a.config.disableNativeSpellChecker);var h=a.config.contentsLangDirection;this.getDirection(1)!=h&&this.changeAttr("dir",h);var k=CKEDITOR.getCss();if(k){var h=e.getHead(),n=h.getCustomData("stylesheet");n?k!=n.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?n.$.styleSheet.cssText=k:n.setText(k)):(k=e.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),h.setCustomData("stylesheet",k),k.data("cke-temp",1))}h=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",
-h+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var d=b.data.domEvent.getKey(),c;b=a.getSelection();if(0!==b.getRanges().length){if(d in l){var f,e=b.getRanges()[0],h=e.startPath(),k,n,p,d=8==d;CKEDITOR.env.ie&&
-11>CKEDITOR.env.version&&(f=b.getSelectedElement())||(f=m(b))?(a.fire("saveSnapshot"),e.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f.remove(),e.select(),a.fire("saveSnapshot"),c=1):e.collapsed&&((k=h.block)&&(p=k[d?"getPrevious":"getNext"](g))&&p.type==CKEDITOR.NODE_ELEMENT&&p.is("table")&&e[d?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),e[d?"checkEndOfBlock":"checkStartOfBlock"]()&&k.remove(),e["moveToElementEdit"+(d?"End":"Start")](p),e.select(),a.fire("saveSnapshot"),
-c=1):h.blockLimit&&h.blockLimit.is("td")&&(n=h.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(n,d?CKEDITOR.START:CKEDITOR.END)&&(p=n[d?"getPrevious":"getNext"](g))?(a.fire("saveSnapshot"),e["moveToElementEdit"+(d?"End":"Start")](p),e.checkStartOfBlock()&&e.checkEndOfBlock()?p.remove():e.select(),a.fire("saveSnapshot"),c=1):(n=h.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(n,d?CKEDITOR.START:CKEDITOR.END)&&(c=1))}return!c}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&
+h+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var d=b.data.domEvent.getKey(),c;b=a.getSelection();if(0!==b.getRanges().length){if(d in l){var e,f=b.getRanges()[0],h=f.startPath(),k,n,p,d=8==d;CKEDITOR.env.ie&&
+11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=m(b))?(a.fire("saveSnapshot"),f.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),f.select(),a.fire("saveSnapshot"),c=1):f.collapsed&&((k=h.block)&&(p=k[d?"getPrevious":"getNext"](g))&&p.type==CKEDITOR.NODE_ELEMENT&&p.is("table")&&f[d?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),f[d?"checkEndOfBlock":"checkStartOfBlock"]()&&k.remove(),f["moveToElementEdit"+(d?"End":"Start")](p),f.select(),a.fire("saveSnapshot"),
+c=1):h.blockLimit&&h.blockLimit.is("td")&&(n=h.blockLimit.getAscendant("table"))&&f.checkBoundaryOfElement(n,d?CKEDITOR.START:CKEDITOR.END)&&(p=n[d?"getPrevious":"getNext"](g))?(a.fire("saveSnapshot"),f["moveToElementEdit"+(d?"End":"Start")](p),f.checkStartOfBlock()&&f.checkEndOfBlock()?p.remove():f.select(),a.fire("saveSnapshot"),c=1):(n=h.contains(["td","th","caption"]))&&f.checkBoundaryOfElement(n,d?CKEDITOR.START:CKEDITOR.END)&&(c=1))}return!c}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&
 this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in l&&!this.getFirst(f)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",c);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown",function(b){var d=b.data.getTarget();d.is("img","hr",
 "input","textarea","select")&&!d.isReadOnly()&&(a.getSelection().selectElement(d),d.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(w,""))){var d=a.createRange();d.moveToElementEditStart(b);d.select(!0)}});CKEDITOR.env.webkit&&
 (this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(d){if(a.readOnly)return!0;var c=d.data.domEvent.getKey();if(c in l&&(d=a.getSelection(),0!==d.getRanges().length)){var c=8==c,g=d.getRanges()[0];d=g.startPath();if(g.collapsed)a:{var e=d.block;if(e&&g[c?"checkStartOfBlock":
@@ -362,28 +362,28 @@ b(e,g,!c);h.selectBookmarks(f);d=!0}}else d=!1}else c=g,h=d.block,g=c.endPath().
 return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var d=a.getCustomData("stylesheet_ref");--d?a.setCustomData("stylesheet_ref",d):(a.removeCustomData("stylesheet_ref"),b.removeCustomData("stylesheet").remove())}}this.editor.fire("contentDomUnload");
 delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(b){var d=b.editor;d.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")?
 "true":"1"),a.setAttribute("contentEditable",!1))});d.on("selectionChange",function(b){if(!d.readOnly){var c=d.getSelection();c&&!c.isLocked&&(c=d.checkDirty(),d.fire("lockSnapshot"),a(b),d.fire("unlockSnapshot"),!c&&d.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var d=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",d);d&&a.changeAttr("title",d);var c=b.fire("ariaEditorHelpLabel",{}).label;
-if(c&&(d=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var g=CKEDITOR.tools.getNextId(),c=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+c+"\x3c/span\x3e");d.append(c);a.changeAttr("aria-describedby",g)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");g=CKEDITOR.dom.walker.whitespaces(!0);n=CKEDITOR.dom.walker.bookmark(!1,!0);t=CKEDITOR.dom.walker.empty();
-u=CKEDITOR.dom.walker.bogus();w=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;p=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(d,c){var g,e,f,h,k=[],l=c.range.startContainer;g=c.range.startPath();for(var l=n[l.getName()],p=0,m=d.getChildren(),r=m.count(),t=-1,v=-1,C=0,w=g.contains(n.$list);p<r;++p)g=m.getItem(p),a(g)?(f=g.getName(),w&&f in CKEDITOR.dtd.$list?k=k.concat(b(g,c)):(h=!!l[f],
-"br"!=f||!g.data("cke-eol")||p&&p!=r-1||(C=(e=p?k[p-1].node:m.getItem(p+1))&&(!a(e)||!e.is("br")),e=e&&a(e)&&n.$block[e.getName()]),-1!=t||h||(t=p),h||(v=p),k.push({isElement:1,isLineBreak:C,isBlock:g.isBlockBoundary(),hasBlockSibling:e,node:g,name:f,allowed:h}),e=C=0)):k.push({isElement:0,node:g,allowed:1});-1<t&&(k[t].firstNotAllowed=1);-1<v&&(k[v].lastNotAllowed=1);return k}function d(b,c){var g=[],e=b.getChildren(),f=e.count(),h,k=0,l=n[c],p=!b.is(n.$inline)||b.is("br");for(p&&g.push(" ");k<f;k++)h=
+if(c&&(d=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var g=CKEDITOR.tools.getNextId(),c=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+c+"\x3c/span\x3e");d.append(c);a.changeAttr("aria-describedby",g)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");g=CKEDITOR.dom.walker.whitespaces(!0);n=CKEDITOR.dom.walker.bookmark(!1,!0);u=CKEDITOR.dom.walker.empty();
+r=CKEDITOR.dom.walker.bogus();w=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;p=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(d,c){var g,e,f,h,k=[],l=c.range.startContainer;g=c.range.startPath();for(var l=n[l.getName()],p=0,m=d.getChildren(),t=m.count(),u=-1,v=-1,D=0,w=g.contains(n.$list);p<t;++p)g=m.getItem(p),a(g)?(f=g.getName(),w&&f in CKEDITOR.dtd.$list?k=k.concat(b(g,c)):(h=!!l[f],
+"br"!=f||!g.data("cke-eol")||p&&p!=t-1||(D=(e=p?k[p-1].node:m.getItem(p+1))&&(!a(e)||!e.is("br")),e=e&&a(e)&&n.$block[e.getName()]),-1!=u||h||(u=p),h||(v=p),k.push({isElement:1,isLineBreak:D,isBlock:g.isBlockBoundary(),hasBlockSibling:e,node:g,name:f,allowed:h}),e=D=0)):k.push({isElement:0,node:g,allowed:1});-1<u&&(k[u].firstNotAllowed=1);-1<v&&(k[v].lastNotAllowed=1);return k}function d(b,c){var g=[],e=b.getChildren(),f=e.count(),h,k=0,l=n[c],p=!b.is(n.$inline)||b.is("br");for(p&&g.push(" ");k<f;k++)h=
 e.getItem(k),a(h)&&!h.is(l)?g=g.concat(d(h,c)):g.push(h);p&&g.push(" ");return g}function c(b){return a(b.startContainer)&&b.startContainer.getChild(b.startOffset-1)}function g(b){return b&&a(b)&&(b.is(n.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function e(b,d,c,g){var f=b.clone(),h,k;f.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);(h=(new CKEDITOR.dom.walker(f)).next())&&a(h)&&p[h.getName()]&&(k=h.getPrevious())&&a(k)&&!k.getParent().equals(b.startContainer)&&c.contains(k)&&g.contains(h)&&h.isIdentical(k)&&
-(h.moveChildren(k),h.remove(),e(b,d,c,g))}function h(b,d){function c(b,d){if(d.isBlock&&d.isElement&&!d.node.is("br")&&a(b)&&b.is("br"))return b.remove(),1}var g=d.endContainer.getChild(d.endOffset),e=d.endContainer.getChild(d.endOffset-1);g&&c(g,b[b.length-1]);e&&c(e,b[0])&&(d.setEnd(d.endContainer,d.endOffset-1),d.collapse())}var n=CKEDITOR.dtd,p={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},r=CKEDITOR.tools.extend({},
-n.$inline);delete r.br;return function(p,E,t,v){var w=p.editor,A=!1;"unfiltered_html"==E&&(E="html",A=!0);if(!v.checkReadOnly()){var u=(new CKEDITOR.dom.elementPath(v.startContainer,v.root)).blockLimit||v.root;p={type:E,dontFilter:A,editable:p,editor:w,range:v,blockLimit:u,mergeCandidates:[],zombies:[]};E=p.range;v=p.mergeCandidates;var B,I;"text"==p.type&&E.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(B=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",E.document),E.insertNode(B),
-E.setStartAfter(B));A=new CKEDITOR.dom.elementPath(E.startContainer);p.endPath=u=new CKEDITOR.dom.elementPath(E.endContainer);if(!E.collapsed){var w=u.block||u.blockLimit,X=E.getCommonAncestor();w&&!w.equals(X)&&!w.contains(X)&&E.checkEndOfBlock()&&p.zombies.push(w);E.deleteContents()}for(;(I=c(E))&&a(I)&&I.isBlockBoundary()&&A.contains(I);)E.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END);e(E,p.blockLimit,A,u);B&&(E.setEndBefore(B),E.collapse(),B.remove());B=E.startPath();if(w=B.contains(g,!1,1))E.splitElement(w),
-p.inlineStylesRoot=w,p.inlineStylesPeak=B.lastElement;B=E.createBookmark();(w=B.startNode.getPrevious(f))&&a(w)&&g(w)&&v.push(w);(w=B.startNode.getNext(f))&&a(w)&&g(w)&&v.push(w);for(w=B.startNode;(w=w.getParent())&&g(w);)v.push(w);E.moveToBookmark(B);if(B=t){B=p.range;if("text"==p.type&&p.inlineStylesRoot){I=p.inlineStylesPeak;E=I.getDocument().createText("{cke-peak}");for(v=p.inlineStylesRoot.getParent();!I.equals(v);)E=E.appendTo(I.clone()),I=I.getParent();t=E.getOuterHtml().split("{cke-peak}").join(t)}I=
-p.blockLimit.getName();if(/^\s+|\s+$/.test(t)&&"span"in CKEDITOR.dtd[I]){var M='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';t=M+t+M}t=p.editor.dataProcessor.toHtml(t,{context:null,fixForBody:!1,protectedWhitespaces:!!M,dontFilter:p.dontFilter,filter:p.editor.activeFilter,enterMode:p.editor.activeEnterMode});I=B.document.createElement("body");I.setHtml(t);M&&(I.getFirst().remove(),I.getLast().remove());if((M=B.startPath().block)&&(1!=M.getChildCount()||!M.getBogus()))a:{var K;if(1==
-I.getChildCount()&&a(K=I.getFirst())&&K.is(m)&&!K.hasAttribute("contenteditable")){M=K.getElementsByTag("*");B=0;for(v=M.count();B<v;B++)if(E=M.getItem(B),!E.is(r))break a;K.moveChildren(K.getParent(1));K.remove()}}p.dataWrapper=I;B=t}if(B){K=p.range;B=K.document;var Q;I=p.blockLimit;v=0;var U,M=[],R,ba;t=w=0;var Y,ca;E=K.startContainer;var A=p.endPath.elements[0],da,u=A.getPosition(E),X=!!A.getCommonAncestor(E)&&u!=CKEDITOR.POSITION_IDENTICAL&&!(u&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);
-E=b(p.dataWrapper,p);for(h(E,K);v<E.length;v++){u=E[v];if(Q=u.isLineBreak){Q=K;Y=I;var aa=void 0,ea=void 0;u.hasBlockSibling?Q=1:(aa=Q.startContainer.getAscendant(n.$block,1))&&aa.is({div:1,p:1})?(ea=aa.getPosition(Y),ea==CKEDITOR.POSITION_IDENTICAL||ea==CKEDITOR.POSITION_CONTAINS?Q=0:(Y=Q.splitElement(aa),Q.moveToPosition(Y,CKEDITOR.POSITION_AFTER_START),Q=1)):Q=0}if(Q)t=0<v;else{Q=K.startPath();!u.isBlock&&l(p.editor,Q.block,Q.blockLimit)&&(ba=k(p.editor))&&(ba=B.createElement(ba),ba.appendBogus(),
-K.insertNode(ba),CKEDITOR.env.needsBrFiller&&(U=ba.getBogus())&&U.remove(),K.moveToPosition(ba,CKEDITOR.POSITION_BEFORE_END));if((Q=K.startPath().block)&&!Q.equals(R)){if(U=Q.getBogus())U.remove(),M.push(Q);R=Q}u.firstNotAllowed&&(w=1);if(w&&u.isElement){Q=K.startContainer;for(Y=null;Q&&!n[Q.getName()][u.name];){if(Q.equals(I)){Q=null;break}Y=Q;Q=Q.getParent()}if(Q)Y&&(ca=K.splitElement(Y),p.zombies.push(ca),p.zombies.push(Y));else{Y=I.getName();da=!v;Q=v==E.length-1;Y=d(u.node,Y);for(var aa=[],ea=
-Y.length,fa=0,ha=void 0,ia=0,ga=-1;fa<ea;fa++)ha=Y[fa]," "==ha?(ia||da&&!fa||(aa.push(new CKEDITOR.dom.text(" ")),ga=aa.length),ia=1):(aa.push(ha),ia=0);Q&&ga==aa.length&&aa.pop();da=aa}}if(da){for(;Q=da.pop();)K.insertNode(Q);da=0}else K.insertNode(u.node);u.lastNotAllowed&&v<E.length-1&&((ca=X?A:ca)&&K.setEndAt(ca,CKEDITOR.POSITION_AFTER_START),w=0);K.collapse()}}1!=E.length?U=!1:(U=E[0],U=U.isElement&&"false"==U.node.getAttribute("contenteditable"));U&&(t=!0,Q=E[0].node,K.setStartAt(Q,CKEDITOR.POSITION_BEFORE_START),
-K.setEndAt(Q,CKEDITOR.POSITION_AFTER_END));p.dontMoveCaret=t;p.bogusNeededBlocks=M}U=p.range;var Z;ca=p.bogusNeededBlocks;for(da=U.createBookmark();R=p.zombies.pop();)R.getParent()&&(ba=U.clone(),ba.moveToElementEditStart(R),ba.removeEmptyBlocksAtEnd());if(ca)for(;R=ca.pop();)CKEDITOR.env.needsBrFiller?R.appendBogus():R.append(U.document.createText(" "));for(;R=p.mergeCandidates.pop();)R.mergeSiblings();U.moveToBookmark(da);if(!p.dontMoveCaret){for(R=c(U);R&&a(R)&&!R.is(n.$empty);){if(R.isBlockBoundary())U.moveToPosition(R,
-CKEDITOR.POSITION_BEFORE_END);else{if(g(R)&&R.getHtml().match(/(\s|&nbsp;)$/g)){Z=null;break}Z=U.clone();Z.moveToPosition(R,CKEDITOR.POSITION_BEFORE_END)}R=R.getLast(f)}Z&&U.moveToRange(Z)}}}}();r=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,d,c){d=a.getDocument().createElement(d);a.append(d,c);return d}
+(h.moveChildren(k),h.remove(),e(b,d,c,g))}function h(b,d){function c(b,d){if(d.isBlock&&d.isElement&&!d.node.is("br")&&a(b)&&b.is("br"))return b.remove(),1}var g=d.endContainer.getChild(d.endOffset),e=d.endContainer.getChild(d.endOffset-1);g&&c(g,b[b.length-1]);e&&c(e,b[0])&&(d.setEnd(d.endContainer,d.endOffset-1),d.collapse())}var n=CKEDITOR.dtd,p={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},t=CKEDITOR.tools.extend({},
+n.$inline);delete t.br;return function(p,E,u,v){var w=p.editor,z=!1;"unfiltered_html"==E&&(E="html",z=!0);if(!v.checkReadOnly()){var r=(new CKEDITOR.dom.elementPath(v.startContainer,v.root)).blockLimit||v.root;p={type:E,dontFilter:z,editable:p,editor:w,range:v,blockLimit:r,mergeCandidates:[],zombies:[]};E=p.range;v=p.mergeCandidates;var A,I;"text"==p.type&&E.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(A=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",E.document),E.insertNode(A),
+E.setStartAfter(A));z=new CKEDITOR.dom.elementPath(E.startContainer);p.endPath=r=new CKEDITOR.dom.elementPath(E.endContainer);if(!E.collapsed){var w=r.block||r.blockLimit,X=E.getCommonAncestor();w&&!w.equals(X)&&!w.contains(X)&&E.checkEndOfBlock()&&p.zombies.push(w);E.deleteContents()}for(;(I=c(E))&&a(I)&&I.isBlockBoundary()&&z.contains(I);)E.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END);e(E,p.blockLimit,z,r);A&&(E.setEndBefore(A),E.collapse(),A.remove());A=E.startPath();if(w=A.contains(g,!1,1))E.splitElement(w),
+p.inlineStylesRoot=w,p.inlineStylesPeak=A.lastElement;A=E.createBookmark();(w=A.startNode.getPrevious(f))&&a(w)&&g(w)&&v.push(w);(w=A.startNode.getNext(f))&&a(w)&&g(w)&&v.push(w);for(w=A.startNode;(w=w.getParent())&&g(w);)v.push(w);E.moveToBookmark(A);if(A=u){A=p.range;if("text"==p.type&&p.inlineStylesRoot){I=p.inlineStylesPeak;E=I.getDocument().createText("{cke-peak}");for(v=p.inlineStylesRoot.getParent();!I.equals(v);)E=E.appendTo(I.clone()),I=I.getParent();u=E.getOuterHtml().split("{cke-peak}").join(u)}I=
+p.blockLimit.getName();if(/^\s+|\s+$/.test(u)&&"span"in CKEDITOR.dtd[I]){var M='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';u=M+u+M}u=p.editor.dataProcessor.toHtml(u,{context:null,fixForBody:!1,protectedWhitespaces:!!M,dontFilter:p.dontFilter,filter:p.editor.activeFilter,enterMode:p.editor.activeEnterMode});I=A.document.createElement("body");I.setHtml(u);M&&(I.getFirst().remove(),I.getLast().remove());if((M=A.startPath().block)&&(1!=M.getChildCount()||!M.getBogus()))a:{var K;if(1==
+I.getChildCount()&&a(K=I.getFirst())&&K.is(m)&&!K.hasAttribute("contenteditable")){M=K.getElementsByTag("*");A=0;for(v=M.count();A<v;A++)if(E=M.getItem(A),!E.is(t))break a;K.moveChildren(K.getParent(1));K.remove()}}p.dataWrapper=I;A=u}if(A){K=p.range;A=K.document;var Q;I=p.blockLimit;v=0;var U,M=[],R,ba;u=w=0;var Y,ca;E=K.startContainer;var z=p.endPath.elements[0],da,r=z.getPosition(E),X=!!z.getCommonAncestor(E)&&r!=CKEDITOR.POSITION_IDENTICAL&&!(r&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);
+E=b(p.dataWrapper,p);for(h(E,K);v<E.length;v++){r=E[v];if(Q=r.isLineBreak){Q=K;Y=I;var aa=void 0,ea=void 0;r.hasBlockSibling?Q=1:(aa=Q.startContainer.getAscendant(n.$block,1))&&aa.is({div:1,p:1})?(ea=aa.getPosition(Y),ea==CKEDITOR.POSITION_IDENTICAL||ea==CKEDITOR.POSITION_CONTAINS?Q=0:(Y=Q.splitElement(aa),Q.moveToPosition(Y,CKEDITOR.POSITION_AFTER_START),Q=1)):Q=0}if(Q)u=0<v;else{Q=K.startPath();!r.isBlock&&l(p.editor,Q.block,Q.blockLimit)&&(ba=k(p.editor))&&(ba=A.createElement(ba),ba.appendBogus(),
+K.insertNode(ba),CKEDITOR.env.needsBrFiller&&(U=ba.getBogus())&&U.remove(),K.moveToPosition(ba,CKEDITOR.POSITION_BEFORE_END));if((Q=K.startPath().block)&&!Q.equals(R)){if(U=Q.getBogus())U.remove(),M.push(Q);R=Q}r.firstNotAllowed&&(w=1);if(w&&r.isElement){Q=K.startContainer;for(Y=null;Q&&!n[Q.getName()][r.name];){if(Q.equals(I)){Q=null;break}Y=Q;Q=Q.getParent()}if(Q)Y&&(ca=K.splitElement(Y),p.zombies.push(ca),p.zombies.push(Y));else{Y=I.getName();da=!v;Q=v==E.length-1;Y=d(r.node,Y);for(var aa=[],ea=
+Y.length,fa=0,ha=void 0,ia=0,ga=-1;fa<ea;fa++)ha=Y[fa]," "==ha?(ia||da&&!fa||(aa.push(new CKEDITOR.dom.text(" ")),ga=aa.length),ia=1):(aa.push(ha),ia=0);Q&&ga==aa.length&&aa.pop();da=aa}}if(da){for(;Q=da.pop();)K.insertNode(Q);da=0}else K.insertNode(r.node);r.lastNotAllowed&&v<E.length-1&&((ca=X?z:ca)&&K.setEndAt(ca,CKEDITOR.POSITION_AFTER_START),w=0);K.collapse()}}1!=E.length?U=!1:(U=E[0],U=U.isElement&&"false"==U.node.getAttribute("contenteditable"));U&&(u=!0,Q=E[0].node,K.setStartAt(Q,CKEDITOR.POSITION_BEFORE_START),
+K.setEndAt(Q,CKEDITOR.POSITION_AFTER_END));p.dontMoveCaret=u;p.bogusNeededBlocks=M}U=p.range;var Z;ca=p.bogusNeededBlocks;for(da=U.createBookmark();R=p.zombies.pop();)R.getParent()&&(ba=U.clone(),ba.moveToElementEditStart(R),ba.removeEmptyBlocksAtEnd());if(ca)for(;R=ca.pop();)CKEDITOR.env.needsBrFiller?R.appendBogus():R.append(U.document.createText(" "));for(;R=p.mergeCandidates.pop();)R.mergeSiblings();U.moveToBookmark(da);if(!p.dontMoveCaret){for(R=c(U);R&&a(R)&&!R.is(n.$empty);){if(R.isBlockBoundary())U.moveToPosition(R,
+CKEDITOR.POSITION_BEFORE_END);else{if(g(R)&&R.getHtml().match(/(\s|&nbsp;)$/g)){Z=null;break}Z=U.clone();Z.moveToPosition(R,CKEDITOR.POSITION_BEFORE_END)}R=R.getLast(f)}Z&&U.moveToRange(Z)}}}}();t=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,d,c){d=a.getDocument().createElement(d);a.append(d,c);return d}
 function d(a){var b=a.count(),c;for(b;0<b--;)c=a.getItem(b),CKEDITOR.tools.trim(c.getHtml())||(c.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&c.getChildCount()&&c.getFirst().remove())}return function(c){var g=c.startContainer,e=g.getAscendant("table",1),f=!1;d(e.getElementsByTag("td"));d(e.getElementsByTag("th"));e=c.clone();e.setStart(g,0);e=a(e).lastBackward();e||(e=c.clone(),e.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),f=!0);e||(e=g);e.is("table")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),
 c.collapse(!0),e.remove()):(e.is({tbody:1,thead:1,tfoot:1})&&(e=b(e,"tr",f)),e.is("tr")&&(e=b(e,e.getParent().is("thead")?"th":"td",f)),(g=e.getBogus())&&g.remove(),c.moveToPosition(e,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();v=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&
-a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var d=b.startContainer,c=!1,g;g=b.clone();g.setStart(d,0);g=a(g).lastBackward();g||(g=b.clone(),g.setEndAt(d,CKEDITOR.POSITION_BEFORE_END),g=a(g).lastForward(),c=!0);g||(g=d);g.is(CKEDITOR.dtd.$list)?(b.setStartAt(g,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),g.remove()):((d=g.getBogus())&&d.remove(),b.moveToPosition(g,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();A={eol:{detect:function(a,b){var d=a.range,
+a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var d=b.startContainer,c=!1,g;g=b.clone();g.setStart(d,0);g=a(g).lastBackward();g||(g=b.clone(),g.setEndAt(d,CKEDITOR.POSITION_BEFORE_END),g=a(g).lastForward(),c=!0);g||(g=d);g.is(CKEDITOR.dtd.$list)?(b.setStartAt(g,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),g.remove()):((d=g.getBogus())&&d.remove(),b.moveToPosition(g,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();z={eol:{detect:function(a,b){var d=a.range,
 c=d.clone(),g=d.clone(),e=new CKEDITOR.dom.elementPath(d.startContainer,b),f=new CKEDITOR.dom.elementPath(d.endContainer,b);c.collapse(1);g.collapse();e.block&&c.checkBoundaryOfElement(e.block,CKEDITOR.END)&&(d.setStartAfter(e.block),a.prependEolBr=1);f.block&&g.checkBoundaryOfElement(f.block,CKEDITOR.START)&&(d.setEndBefore(f.block),a.appendEolBr=1)},fix:function(a,b){var d=b.getDocument(),c;a.appendEolBr&&(c=this.createEolBr(d),a.fragment.append(c));!a.prependEolBr||c&&!c.getPrevious()||a.fragment.append(this.createEolBr(d),
-1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),d=b.startNode,b=b.endNode;!b||!u(b)||d&&d.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var d=a.range,c=d.getCommonAncestor(),g=new CKEDITOR.dom.elementPath(c,b),e=new CKEDITOR.dom.elementPath(d.startContainer,b),d=new CKEDITOR.dom.elementPath(d.endContainer,b),f;c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());if(g.blockLimit.is({tr:1,
+1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),d=b.startNode,b=b.endNode;!b||!r(b)||d&&d.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var d=a.range,c=d.getCommonAncestor(),g=new CKEDITOR.dom.elementPath(c,b),e=new CKEDITOR.dom.elementPath(d.startContainer,b),d=new CKEDITOR.dom.elementPath(d.endContainer,b),f;c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());if(g.blockLimit.is({tr:1,
 table:1})){var h=g.contains("table").getParent();f=function(a){return!a.equals(h)}}else if(g.block&&g.block.is(CKEDITOR.dtd.$listItem)&&(e=e.contains(CKEDITOR.dtd.$list),d=d.contains(CKEDITOR.dtd.$list),!e.equals(d))){var k=g.contains(CKEDITOR.dtd.$list).getParent();f=function(a){return!a.equals(k)}}f||(f=function(a){return!a.equals(g.block)&&!a.equals(g.blockLimit)});this.rebuildFragment(a,b,c,f)},rebuildFragment:function(a,b,d,c){for(var g;d&&!d.equals(b)&&c(d);)g=d.clone(0,1),a.fragment.appendTo(g),
-a.fragment=g,d=d.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,d=a.endContainer,c=a.startOffset,g=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(d)&&b.is("tr")&&++c==g&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};B=function(){function a(b,d){var c=b.getParent();if(c.is(CKEDITOR.dtd.$inline))b[d?"insertBefore":"insertAfter"](c)}function b(d,c,g){a(c);a(g,1);for(var e;e=g.getNext();)e.insertAfter(c),c=e;t(d)&&d.remove()}function d(a,b){var c=new CKEDITOR.dom.range(a);c.setStartAfter(b.startNode);
+a.fragment=g,d=d.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,d=a.endContainer,c=a.startOffset,g=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(d)&&b.is("tr")&&++c==g&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};A=function(){function a(b,d){var c=b.getParent();if(c.is(CKEDITOR.dtd.$inline))b[d?"insertBefore":"insertAfter"](c)}function b(d,c,g){a(c);a(g,1);for(var e;e=g.getNext();)e.insertAfter(c),c=e;u(d)&&d.remove()}function d(a,b){var c=new CKEDITOR.dom.range(a);c.setStartAfter(b.startNode);
 c.setEndBefore(b.endNode);return c}return{list:{detectMerge:function(a,b){var c=d(b,a.bookmark),g=c.startPath(),e=c.endPath(),f=g.contains(CKEDITOR.dtd.$list),h=e.contains(CKEDITOR.dtd.$list);a.mergeList=f&&h&&f.getParent().equals(h.getParent())&&!f.equals(h);a.mergeListItems=g.block&&e.block&&g.block.is(CKEDITOR.dtd.$listItem)&&e.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)c=c.clone(),c.setStartBefore(a.bookmark.startNode),c.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=
 c.createBookmark()},merge:function(a,d){if(a.mergeListBookmark){var c=a.mergeListBookmark.startNode,g=a.mergeListBookmark.endNode,e=new CKEDITOR.dom.elementPath(c,d),f=new CKEDITOR.dom.elementPath(g,d);if(a.mergeList){var h=e.contains(CKEDITOR.dtd.$list),k=f.contains(CKEDITOR.dtd.$list);h.equals(k)||(k.moveChildren(h),k.remove())}a.mergeListItems&&(e=e.contains(CKEDITOR.dtd.$listItem),f=f.contains(CKEDITOR.dtd.$listItem),e.equals(f)||b(f,c,g));c.remove();g.remove()}}},block:{detectMerge:function(a,
 b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var d=new CKEDITOR.dom.range(b);d.setStartBefore(a.bookmark.startNode);d.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=d.createBookmark()}},merge:function(a,d){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var c=a.mergeBlockBookmark.startNode,g=a.mergeBlockBookmark.endNode,e=new CKEDITOR.dom.elementPath(c,d),f=new CKEDITOR.dom.elementPath(g,d),e=e.block,f=f.block;e&&f&&!e.equals(f)&&b(f,c,g);c.remove();g.remove()}}},table:function(){function a(d){var g=
@@ -391,102 +391,102 @@ b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var d=new CKEDITOR.dom.range
 b(a,k));p&&(e=d.clone(),e.selectNodeContents(a),g.push(e))}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(n);return g}function b(a,d){var c=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,g=a.getPosition(d);return g===CKEDITOR.POSITION_IDENTICAL?!1:0===(g&c)}var c={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,d=b.clone();d.enlarge(CKEDITOR.ENLARGE_ELEMENT);var d=new CKEDITOR.dom.walker(d),g=0;d.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(c)&&++g};
 d.checkForward();if(1<g){var d=b.startPath().contains("table"),e=b.endPath().contains("table");d&&e&&b.checkBoundaryOfElement(d,CKEDITOR.START)&&b.checkBoundaryOfElement(e,CKEDITOR.END)&&(b=a.range.clone(),b.setStartBefore(d),b.setEndAfter(e),a.purgeTableBookmark=b.createBookmark())}},detectRanges:function(g,e){var f=d(e,g.bookmark),h=f.clone(),k,n,p=f.getCommonAncestor();p.is(CKEDITOR.dtd.$tableContent)&&!p.is(c)&&(p=p.getAscendant("table",!0));n=p;p=new CKEDITOR.dom.elementPath(f.startContainer,
 n);n=new CKEDITOR.dom.elementPath(f.endContainer,n);p=p.contains("table");n=n.contains("table");if(p||n)p&&n&&b(p,n)?(g.tableSurroundingRange=h,h.setStartAt(p,CKEDITOR.POSITION_AFTER_END),h.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),h=f.clone(),h.setEndAt(p,CKEDITOR.POSITION_AFTER_END),k=f.clone(),k.setStartAt(n,CKEDITOR.POSITION_BEFORE_START),k=a(h).concat(a(k))):p?n||(g.tableSurroundingRange=h,h.setStartAt(p,CKEDITOR.POSITION_AFTER_END),f.setEndAt(p,CKEDITOR.POSITION_AFTER_END)):(g.tableSurroundingRange=
-h,h.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START)),g.tableContentsRanges=k?k:a(f)},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();)b.extractContents(),t(b.startContainer)&&b.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,d=a.range.clone(),b=b.createElement("p");b.insertBefore(a.purgeTableBookmark.startNode);d.moveToBookmark(a.purgeTableBookmark);
+h,h.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START)),g.tableContentsRanges=k?k:a(f)},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();)b.extractContents(),u(b.startContainer)&&b.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,d=a.range.clone(),b=b.createElement("p");b.insertBefore(a.purgeTableBookmark.startNode);d.moveToBookmark(a.purgeTableBookmark);
 d.deleteContents();a.range.moveToPosition(b,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))},fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,b){var d=b.startPath(),c;l(a,d.block,d.blockLimit)&&(c=k(a))&&(c=b.document.createElement(c),c.appendBogus(),b.insertNode(c),b.moveToPosition(c,
 CKEDITOR.POSITION_AFTER_START))}}}()}(),function(){function a(a,b){if(0===a.length)return!1;var d,c;if((d=!b&&1===a.length)&&!(d=a[0].collapsed)){var g=a[0];d=g.startContainer.getAscendant({td:1,th:1},!0);var e=g.endContainer.getAscendant({td:1,th:1},!0);c=CKEDITOR.tools.trim;d&&d.equals(e)&&!d.findOne("td, th, tr, tbody, table")?(g=g.cloneContents(),d=g.getFirst()?c(g.getFirst().getText())!==c(d.getText()):!0):d=!1}if(d)return!1;for(c=0;c<a.length;c++)if(d=a[c]._getTableElement(),!d)return!1;return!0}
 function e(a){function b(a){a=a.find("td, th");var d=[],c;for(c=0;c<a.count();c++)d.push(a.getItem(c));return d}var d=[],c,g;for(g=0;g<a.length;g++)c=a[g]._getTableElement(),c.is&&c.is({td:1,th:1})?d.push(c):d=d.concat(b(c));return d}function c(a){a=e(a);var b="",d=[],c,g;for(g=0;g<a.length;g++)c&&!c.equals(a[g].getAscendant("tr"))?(b+=d.join("\t")+"\n",c=a[g].getAscendant("tr"),d=[]):0===g&&(c=a[g].getAscendant("tr")),d.push(a[g].getText());return b+=d.join("\t")}function f(a){var b=this.root.editor,
-d=b.getSelection(1);this.reset();B=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null,0);d.selectRanges([a[0]]);d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=c(a);d.nativeSel=null;this.isFake=1;this.rev=r++;b._.fakeSelection=this;B=!1;this.root.fire("selectionchange")}function h(){var b=this._.fakeSelection,d;if(b){d=this.getSelection(1);var c;if(!(c=!d)&&(c=!d.isHidden())){c=b;var g=d.getRanges(),
+d=b.getSelection(1);this.reset();A=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null,0);d.selectRanges([a[0]]);d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=c(a);d.nativeSel=null;this.isFake=1;this.rev=t++;b._.fakeSelection=this;A=!1;this.root.fire("selectionchange")}function h(){var b=this._.fakeSelection,d;if(b){d=this.getSelection(1);var c;if(!(c=!d)&&(c=!d.isHidden())){c=b;var g=d.getRanges(),
 e=c.getRanges(),f=g.length&&g[0]._getTableElement()&&g[0]._getTableElement().getAscendant("table",!0),h=e.length&&e[0]._getTableElement()&&e[0]._getTableElement().getAscendant("table",!0),k=1===g.length&&g[0]._getTableElement()&&g[0]._getTableElement().is("table"),n=1===e.length&&e[0]._getTableElement()&&e[0]._getTableElement().is("table"),p=1===g.length&&g[0].collapsed,e=a(g,!!CKEDITOR.env.webkit)&&a(e);f=f&&h?f.equals(h)||h.contains(f):!1;f&&(p||e)?(k&&!n&&c.selectRanges(g),c=!0):c=!1;c=!c}c&&(b.reset(),
-b=0)}if(!b&&(b=d||this.getSelection(1),!b||b.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",b);d=this.elementPath();d.compare(this._.selectionPreviousPath)||(c=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(d.blockLimit),CKEDITOR.env.webkit&&!c&&(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=d,this.fire("selectionChange",{selection:b,path:d}))}function m(){z=!0;q||(l.call(this),q=CKEDITOR.tools.setTimeout(l,200,this))}
-function l(){q=null;z&&(CKEDITOR.tools.setTimeout(h,0,this),z=!1)}function k(a){return y(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function d(a){function b(d,c){return d&&d.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(c?"End":"Start")](d):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var d=a.startContainer,c=a.getPreviousNode(k,null,d),g=a.getNextNode(k,null,d);return b(c)||b(g,1)||!(c||g||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?
+b=0)}if(!b&&(b=d||this.getSelection(1),!b||b.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",b);d=this.elementPath();d.compare(this._.selectionPreviousPath)||(c=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(d.blockLimit),CKEDITOR.env.webkit&&!c&&(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=d,this.fire("selectionChange",{selection:b,path:d}))}function m(){y=!0;q||(l.call(this),q=CKEDITOR.tools.setTimeout(l,200,this))}
+function l(){q=null;y&&(CKEDITOR.tools.setTimeout(h,0,this),y=!1)}function k(a){return x(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function d(a){function b(d,c){return d&&d.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(c?"End":"Start")](d):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var d=a.startContainer,c=a.getPreviousNode(k,null,d),g=a.getNextNode(k,null,d);return b(c)||b(g,1)||!(c||g||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?
 !0:!1}function b(a){g(a,!1);var b=a.getDocument().createText(v);a.setCustomData("cke-fillingChar",b);return b}function g(a,b){var d=a&&a.removeCustomData("cke-fillingChar");if(d){if(!1!==b){var c=a.getDocument().getSelection().getNative(),g=c&&"None"!=c.type&&c.getRangeAt(0),e=v.length;if(d.getLength()>e&&g&&g.intersectsNode(d.$)){var f=[{node:c.anchorNode,offset:c.anchorOffset},{node:c.focusNode,offset:c.focusOffset}];c.anchorNode==d.$&&c.anchorOffset>e&&(f[0].offset-=e);c.focusNode==d.$&&c.focusOffset>
-e&&(f[1].offset-=e)}}d.setText(n(d.getText(),1));f&&(d=a.getDocument().$,c=d.getSelection(),d=d.createRange(),d.setStart(f[0].node,f[0].offset),d.collapse(!0),c.removeAllRanges(),c.addRange(d),c.extend(f[1].node,f[1].offset))}}function n(a,b){return b?a.replace(A,function(a,b){return b?" ":""}):a.replace(v,"")}function t(a,b){var d=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+
-'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(d);var c=a.getSelection(1),g=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);g.setStartAt(d,CKEDITOR.POSITION_AFTER_START);g.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([g]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=d}function u(a){var b={37:1,39:1,8:1,46:1};return function(d){var c=d.data.getKeystroke();if(b[c]){var g=a.getSelection().getRanges(),
+e&&(f[1].offset-=e)}}d.setText(n(d.getText(),1));f&&(d=a.getDocument().$,c=d.getSelection(),d=d.createRange(),d.setStart(f[0].node,f[0].offset),d.collapse(!0),c.removeAllRanges(),c.addRange(d),c.extend(f[1].node,f[1].offset))}}function n(a,b){return b?a.replace(z,function(a,b){return b?" ":""}):a.replace(v,"")}function u(a,b){var d=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+
+'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(d);var c=a.getSelection(1),g=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);g.setStartAt(d,CKEDITOR.POSITION_AFTER_START);g.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([g]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=d}function r(a){var b={37:1,39:1,8:1,46:1};return function(d){var c=d.data.getKeystroke();if(b[c]){var g=a.getSelection().getRanges(),
 e=g[0];1==g.length&&e.collapsed&&(c=e[38>c?"getPreviousEditableNode":"getNextEditableNode"]())&&c.type==CKEDITOR.NODE_ELEMENT&&"false"==c.getAttribute("contenteditable")&&(a.getSelection().fake(c),d.data.preventDefault(),d.cancel())}}}function w(a){for(var b=0;b<a.length;b++){var d=a[b];d.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!d.collapsed){if(d.startContainer.isReadOnly())for(var c=d.startContainer,g;c&&!((g=c.type==CKEDITOR.NODE_ELEMENT)&&c.is("body")||!c.isReadOnly());)g&&"false"==
 c.getAttribute("contentEditable")&&d.setStartAfter(c),c=c.getParent();c=d.startContainer;g=d.endContainer;var e=d.startOffset,f=d.endOffset,h=d.clone();c&&c.type==CKEDITOR.NODE_TEXT&&(e>=c.getLength()?h.setStartAfter(c):h.setStartBefore(c));g&&g.type==CKEDITOR.NODE_TEXT&&(f?h.setEndAfter(g):h.setEndBefore(g));c=new CKEDITOR.dom.walker(h);c.evaluator=function(c){if(c.type==CKEDITOR.NODE_ELEMENT&&c.isReadOnly()){var g=d.clone();d.setEndBefore(c);d.collapsed&&a.splice(b--,1);c.getPosition(h.endContainer)&
-CKEDITOR.POSITION_CONTAINS||(g.setStartAfter(c),g.collapsed||a.splice(b+1,0,g));return!0}return!1};c.next()}}return a}var p="function"!=typeof window.getSelection,r=1,v=CKEDITOR.tools.repeat("​",7),A=new RegExp(v+"( )?","g"),B,q,z,y=CKEDITOR.dom.walker.invisible(1),x=function(){function a(b){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([d]);return!1}}function b(a){return function(b){var d=b.editor,c=d.createRange(),
-g;(g=c.moveToClosestEditablePosition(b.selected,a))||(g=c.moveToClosestEditablePosition(b.selected,!a));g&&d.getSelection().selectRanges([c]);d.fire("saveSnapshot");b.selected.remove();g||(c.moveToElementEditablePosition(d.editable()),d.getSelection().selectRanges([c]));d.fire("saveSnapshot");return!1}}var d=a(),c=a(1);return{37:d,38:d,39:c,40:c,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=d.getSelection();a&&a.removeAllRanges()}var d=a.editor;d.on("contentDom",function(){function a(){t=
-new CKEDITOR.dom.selection(d.getSelection());t.lock()}function b(){f.removeListener("mouseup",b);l.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,d=a.createRange();"None"!=a.type&&d.parentElement()&&d.parentElement().ownerDocument==e.$&&d.select()}function c(a){if(CKEDITOR.env.ie){var b=(a=a.getRanges()[0])?a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("false"==a.getAttribute("contenteditable")||"true"==a.getAttribute("contenteditable"))},!0):null;
-return a&&"false"==b.getAttribute("contenteditable")&&b}}var e=d.document,f=CKEDITOR.document,k=d.editable(),n=e.getBody(),l=e.getDocumentElement(),r=k.isInline(),q,t;CKEDITOR.env.gecko&&k.attachListener(k,"focus",function(a){a.removeListener();0!==q&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==k.$&&(a=d.createRange(),a.moveToElementEditStart(k),a.select())},null,null,-2);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){q&&CKEDITOR.env.webkit&&(q=d._.previousActive&&
-d._.previousActive.equals(e.getActive()))&&null!=d._.previousScrollTop&&d._.previousScrollTop!=k.$.scrollTop&&(k.$.scrollTop=d._.previousScrollTop);d.unlockSelection(q);q=0},null,null,-1);k.attachListener(k,"mousedown",function(){q=0});if(CKEDITOR.env.ie||r)p?k.attachListener(k,"beforedeactivate",a,null,null,-1):k.attachListener(d,"selectionCheck",a,null,null,-1),k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(t);q=1},null,null,-1),k.attachListener(k,"mousedown",
-function(){q=0});if(CKEDITOR.env.ie&&!r){var v;k.attachListener(k,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(v=d.window.getScrollPosition()))});k.attachListener(k,"mouseup",function(a){2==a.data.$.button&&v&&(d.document.$.documentElement.scrollLeft=v.x,d.document.$.documentElement.scrollTop=v.y);v=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var w,A;l.on("mousedown",function(a){function b(a){a=
-a.data.$;if(w){var d=n.$.createTextRange();try{d.moveToPoint(a.clientX,a.clientY)}catch(c){}w.setEndPoint(0>A.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);w.select()}}function d(){l.removeListener("mousemove",b);f.removeListener("mouseup",d);l.removeListener("mouseup",d);w.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<l.$.clientHeight&&a.$.x<l.$.clientWidth){w=n.$.createTextRange();try{w.moveToPoint(a.$.clientX,a.$.clientY)}catch(c){}A=w.duplicate();l.on("mousemove",b);f.on("mouseup",
-d);l.on("mouseup",d)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)l.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",b),l.on("mouseup",b))})}}k.attachListener(k,"selectionchange",h,d);k.attachListener(k,"keyup",m,d);k.attachListener(k,"keydown",function(a){var b=this.getSelection(1);c(b)&&(b.selectElement(c(b)),a.data.preventDefault())},d);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(r&&
-(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var K;k.attachListener(k,"mousedown",function(){K=1});k.attachListener(e.getDocumentElement(),"mouseup",function(){K&&m.call(d);K=0})}else k.attachListener(CKEDITOR.env.ie?k:e.getDocumentElement(),"mouseup",m,d);CKEDITOR.env.webkit&&k.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:k.hasFocus&&g(k)}},null,null,-1);k.attachListener(k,"keydown",u(d),null,null,-1)});
-d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&b()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",b,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&(b.remove(),CKEDITOR.env.gecko&&(a=d.editable().getFirst(a))&&
-a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);d.on("key",function(a){if("wysiwyg"==d.mode){var b=d.getSelection();if(b.isFake){var c=x[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),d=a.getCustomData("cke-fillingChar");d&&(d.getCustomData("ready")?(g(a),a.editor.fire("selectionCheck")):
-d.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){g(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=n(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=n(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?h:m).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):
-null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=
-function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var d=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:r++;this.document=a instanceof
-CKEDITOR.dom.document?a:a.getDocument();this.root=d?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var c,g;if(a)if(a.getRangeAt)c=(g=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(g.commonAncestorContainer);else{try{g=a.createRange()}catch(e){}c=g&&CKEDITOR.dom.element.get(g.item&&g.item(0)||g.parentElement())}if(!c||c.type!=CKEDITOR.NODE_ELEMENT&&c.type!=
-CKEDITOR.NODE_TEXT||!this.root.equals(c)&&!this.root.contains(c))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement=null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var D={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:n,_createFillingCharSequenceNode:b,
-FILLING_CHAR_SEQUENCE:v});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=p?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:p?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var d=this.getNative(),c=d.type;"Text"==c&&(b=CKEDITOR.SELECTION_TEXT);"Control"==c&&(b=CKEDITOR.SELECTION_ELEMENT);d.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(g){}return a.type=
-b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,d=this.getNative();if(!d||!d.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==d.rangeCount){var d=d.getRangeAt(0),c=d.startContainer;c==d.endContainer&&1==c.nodeType&&1==d.endOffset-d.startOffset&&D[c.childNodes[d.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=p?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,
-d){b=b.duplicate();b.collapse(d);var c=b.parentElement();if(!c.hasChildNodes())return{container:c,offset:0};for(var g=c.children,e,f,h=b.duplicate(),k=0,n=g.length-1,p=-1,l,m;k<=n;)if(p=Math.floor((k+n)/2),e=g[p],h.moveToElementText(e),l=h.compareEndPoints("StartToStart",b),0<l)n=p-1;else if(0>l)k=p+1;else return{container:c,offset:a(e)};if(-1==p||p==g.length-1&&0>l){h.moveToElementText(c);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;g=c.childNodes;if(!h)return e=g[g.length-
-1],e.nodeType!=CKEDITOR.NODE_TEXT?{container:c,offset:g.length}:{container:e,offset:e.nodeValue.length};for(c=g.length;0<h&&0<c;)f=g[--c],f.nodeType==CKEDITOR.NODE_TEXT&&(m=f,h-=f.nodeValue.length);return{container:m,offset:-h}}h.collapse(0<l?!0:!1);h.setEndPoint(0<l?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:c,offset:a(e)+(0<l?0:1)};for(;0<h;)try{f=e[0<l?"previousSibling":"nextSibling"],f.nodeType==CKEDITOR.NODE_TEXT&&(h-=f.nodeValue.length,m=
-f),e=f}catch(r){return{container:c,offset:a(e)}}return{container:m,offset:0<l?-h:m.nodeValue.length+h}};return function(){var a=this.getNative(),d=a&&a.createRange(),c=this.getType();if(!a)return[];if(c==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),c=b(d,!0),a.setStart(new CKEDITOR.dom.node(c.container),c.offset),c=b(d),a.setEnd(new CKEDITOR.dom.node(c.container),c.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&
-a.collapse(),[a];if(c==CKEDITOR.SELECTION_ELEMENT){for(var c=[],g=0;g<d.length;g++){for(var e=d.item(g),f=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<f.childNodes.length&&f.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(f),h);a.setEnd(new CKEDITOR.dom.node(f),h+1);c.push(a)}return c}return[]}}():function(){var a=[],b,d=this.getNative();if(!d)return a;for(var c=0;c<d.rangeCount;c++){var g=d.getRangeAt(c);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(g.startContainer),
-g.startOffset);b.setEnd(new CKEDITOR.dom.node(g.endContainer),g.endOffset);a.push(b)}return a};return function(b){var d=this._.cache,c=d.ranges;c||(d.ranges=c=new CKEDITOR.dom.rangeList(a.call(this)));return b?w(new CKEDITOR.dom.rangeList(c.slice())):c}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var d=this.getRanges()[0];
-if(d){if(d.collapsed)b=d.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());else{for(d.optimize();b=d.startContainer,d.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary();)d.setStartAfter(b);b=d.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();if((b=b.getChild(d.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(d=b.getFirst();d&&d.type==CKEDITOR.NODE_ELEMENT;)b=d,d=d.getFirst();else b=d.startContainer}b=b.$}}return a.startElement=b?
-new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var b=this,d=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),d,c,g=2;g&&!((d=a.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&D[d.getName()]&&(c=d));g--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return c&&c.$});return a.selectedElement=d?new CKEDITOR.dom.element(d):null},getSelectedText:function(){var a=
-this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNative(),b=p?"Control"==b.type?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(b){if(this.isLocked){if(b)var d=this.getSelectedElement(),c=this.getRanges(),g=this.isFake;this.isLocked=0;this.reset();b&&(b=d||c[0]&&c[0].getCommonAncestor())&&b.getAscendant("body",
-1)&&(a(c)?f.call(this,c):g?this.fake(d):d?this.selectElement(d):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var d=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!d&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=r++},selectElement:function(a){var b=
-new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(c){var e=this.root.editor,h=e&&e._.hiddenSelectionContainer;this.reset();if(h)for(var h=this.root,k,n=0;n<c.length;++n)k=c[n],k.endContainer.equals(h)&&(k.endOffset=Math.min(k.endOffset,h.getChildCount()));if(c.length)if(this.isLocked){var l=CKEDITOR.document.getActive();this.unlock();this.selectRanges(c);this.lock();l&&!l.equals(this.root)&&l.focus()}else{var m;a:{var r,q;if(1==c.length&&
-!(q=c[0]).collapsed&&(m=q.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(q=q.clone(),q.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(r=q.getEnclosedNode())&&r.type==CKEDITOR.NODE_ELEMENT&&(m=r),"false"==m.getAttribute("contenteditable")))break a;m=void 0}if(m)this.fake(m);else if(e&&e.plugins.tableselection&&CKEDITOR.plugins.tableselection.isSupportedEnvironment&&a(c)&&!B)f.call(this,c);else{if(p){r=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;q={table:1,tbody:1,tr:1};1<c.length&&(e=c[c.length-
-1],c[0].setEnd(e.endContainer,e.endOffset));e=c[0];c=e.collapsed;var t,v,w;if((h=e.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in D&&(!h.is("a")||!h.getText()))try{w=h.$.createControlRange();w.addElement(h.$);w.select();return}catch(u){}if(e.startContainer.type==CKEDITOR.NODE_ELEMENT&&e.startContainer.getName()in q||e.endContainer.type==CKEDITOR.NODE_ELEMENT&&e.endContainer.getName()in q)e.shrink(CKEDITOR.NODE_ELEMENT,!0),c=e.collapsed;w=e.createBookmark();q=w.startNode;c||(l=w.endNode);
-w=e.document.$.body.createTextRange();w.moveToElementText(q.$);w.moveStart("character",1);l?(m=e.document.$.body.createTextRange(),m.moveToElementText(l.$),w.setEndPoint("EndToEnd",m),w.moveEnd("character",-1)):(t=q.getNext(r),v=q.hasAscendant("pre"),t=!(t&&t.getText&&t.getText().match(m))&&(v||!q.hasPrevious()||q.getPrevious().is&&q.getPrevious().is("br")),v=e.document.createElement("span"),v.setHtml("\x26#65279;"),v.insertBefore(q),t&&e.document.createText("﻿").insertBefore(q));e.setStartBefore(q);
-q.remove();c?(t?(w.moveStart("character",-1),w.select(),e.document.$.selection.clear()):w.select(),e.moveToPosition(v,CKEDITOR.POSITION_BEFORE_START),v.remove()):(e.setEndBefore(l),l.remove(),w.select())}else{l=this.getNative();if(!l)return;this.removeAllRanges();for(w=0;w<c.length;w++){if(w<c.length-1&&(t=c[w],v=c[w+1],m=t.clone(),m.setStart(t.endContainer,t.endOffset),m.setEnd(v.startContainer,v.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),e=m.getCommonAncestor(),m=m.getEnclosedNode(),
-e.isReadOnly()||m&&m.isReadOnly()))){v.setStart(t.startContainer,t.startOffset);c.splice(w--,1);continue}e=c[w];v=this.document.$.createRange();e.collapsed&&CKEDITOR.env.webkit&&d(e)&&(m=b(this.root),e.insertNode(m),(t=m.getNext())&&!m.getPrevious()&&t.type==CKEDITOR.NODE_ELEMENT&&"br"==t.getName()?(g(this.root),e.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START)):e.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));v.setStart(e.startContainer.$,e.startOffset);try{v.setEnd(e.endContainer.$,e.endOffset)}catch(A){if(0<=
-A.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))e.collapse(1),v.setEnd(e.endContainer.$,e.endOffset);else throw A;}l.addRange(v)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a,b){var d=this.root.editor;void 0===b&&a.hasAttribute("aria-label")&&(b=a.getAttribute("aria-label"));this.reset();t(d,b);var c=this._.cache,g=new CKEDITOR.dom.range(this.root);g.setStartBefore(a);g.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(g);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;
-c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=r++;d._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(b){return a(this.getRanges(),b)},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=
-1);return a},selectBookmarks:function(b){for(var d=[],c,g=0;g<b.length;g++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(b[g]);d.push(e)}b.isFake&&(c=a(d)?d[0]._getTableElement():d[0].getEnclosedNode(),c&&c.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),b.isFake=0));b.isFake&&!a(d)?this.fake(c):this.selectRanges(d);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},
-scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[p?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function a(a,b){for(var d,c;(a=a.getParent())&&!a.equals(b);)if(a.getAttribute("data-nostyle"))d=a;else if(!c){var g=a.getAttribute("contentEditable");
-"false"==g?d=a:"true"==g&&(c=1)}return d}function e(a,b,d,c){return(a.getPosition(b)|c)==c&&(!d.childRule||d.childRule(a))}function c(b){var d=b.document;if(b.collapsed)d=v(this,d),b.insertNode(d),b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,f=this._.definition,k,n=f.ignoreReadonly,p=n||f.includeReadonly;null==p&&(p=b.root.getCustomData("cke_includeReadonly"));var l=CKEDITOR.dtd[g];l||(k=!0,l=CKEDITOR.dtd.span);b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var m=b.createBookmark(),
-r=m.startNode,q=m.endNode,t=r,A;if(!n){var u=b.getCommonAncestor(),n=a(r,u),u=a(q,u);n&&(t=n.getNextSourceNode(!0));u&&(q=u)}for(t.getPosition(q)==CKEDITOR.POSITION_FOLLOWING&&(t=0);t;){n=!1;if(t.equals(q))t=null,n=!0;else{var B=t.type==CKEDITOR.NODE_ELEMENT?t.getName():null,u=B&&"false"==t.getAttribute("contentEditable"),z=B&&t.getAttribute("data-nostyle");if(B&&t.data("cke-bookmark")){t=t.getNextSourceNode(!0);continue}if(u&&p&&CKEDITOR.dtd.$block[B])for(var y=t,x=h(y),D=void 0,C=x.length,fa=0,
-y=C&&new CKEDITOR.dom.range(y.getDocument());fa<C;++fa){var D=x[fa],G=CKEDITOR.filter.instances[D.data("cke-filter")];if(G?G.check(this):1)y.selectNodeContents(D),c.call(this,y)}x=B?!l[B]||z?0:u&&!p?0:e(t,q,f,N):1;if(x)if(D=t.getParent(),x=f,C=g,fa=k,!D||!(D.getDtd()||CKEDITOR.dtd.span)[C]&&!fa||x.parentRule&&!x.parentRule(D))n=!0;else{if(A||B&&CKEDITOR.dtd.$removeEmpty[B]&&(t.getPosition(q)|N)!=N||(A=b.clone(),A.setStartBefore(t)),B=t.type,B==CKEDITOR.NODE_TEXT||u||B==CKEDITOR.NODE_ELEMENT&&!t.getChildCount()){for(var B=
-t,H;(n=!B.getNext(I))&&(H=B.getParent(),l[H.getName()])&&e(H,r,f,O);)B=H;A.setEndAfter(B)}}else n=!0;t=t.getNextSourceNode(z||u)}if(n&&A&&!A.collapsed){for(var n=v(this,d),u=n.hasAttributes(),z=A.getCommonAncestor(),B={},x={},D={},C={},ga,Z,F;n&&z;){if(z.getName()==g){for(ga in f.attributes)!C[ga]&&(F=z.getAttribute(Z))&&(n.getAttribute(ga)==F?x[ga]=1:C[ga]=1);for(Z in f.styles)!D[Z]&&(F=z.getStyle(Z))&&(n.getStyle(Z)==F?B[Z]=1:D[Z]=1)}z=z.getParent()}for(ga in x)n.removeAttribute(ga);for(Z in B)n.removeStyle(Z);
-u&&!n.hasAttributes()&&(n=null);n?(A.extractContents().appendTo(n),A.insertNode(n),w.call(this,n),n.mergeSiblings(),CKEDITOR.env.ie||n.$.normalize()):(n=new CKEDITOR.dom.element("span"),A.extractContents().appendTo(n),A.insertNode(n),w.call(this,n),n.remove(!0));A=null}}b.moveToBookmark(m);b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function f(a){function b(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),d=new CKEDITOR.dom.elementPath(l.getParent()),g=null,e=null,f=
-0;f<a.elements.length;f++){var h=a.elements[f];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,!0)&&(g=h)}for(f=0;f<d.elements.length;f++){h=d.elements[f];if(h==d.block||h==d.blockLimit)break;m.checkElementRemovable(h,!0)&&(e=h)}e&&l.breakParent(e);g&&c.breakParent(g)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var d=a.createBookmark(),c=d.startNode,g=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(c.getParent(),a.root),f,h=0,k;h<e.elements.length&&
-(k=e.elements[h])&&k!=e.block&&k!=e.blockLimit;h++)if(this.checkElementRemovable(k)){var n;!g&&a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||(n=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(f=k,f.match=n?"start":"end"):(k.mergeSiblings(),k.is(this.element)?u.call(this,k):p(k,q(this)[k.getName()]))}if(f){g=c;for(h=0;;h++){k=e.elements[h];if(k.equals(f))break;else if(k.match)continue;else k=k.clone();k.append(g);g=k}g["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var l=d.endNode,
-m=this;b();for(e=c;!e.equals(l);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?u.call(this,e):p(e,q(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)&&(b(),f=c.getNext())),e=f}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function h(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function m(a){var b=a.getEnclosedNode()||a.getCommonAncestor(!1,
-!0);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&A(a,this)}function l(a){var b=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,d=b.attributes;if(d)for(var c in d)a.removeAttribute(c,d[c]);if(b.styles)for(var g in b.styles)b.styles.hasOwnProperty(g)&&a.removeStyle(g)}}function k(a){var d=a.createBookmark(!0),c=a.createIterator();c.enforceRealBlocks=!0;this._.enterMode&&(c.enlargeBr=
-this._.enterMode!=CKEDITOR.ENTER_BR);for(var g,e=a.document,f;g=c.getNextParagraph();)!g.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)&&(f=v(this,e,g),b(g,f));a.moveToBookmark(d)}function d(a){var d=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=!0;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var g,e;g=c.getNextParagraph();)this.checkElementRemovable(g)&&(g.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?
-"p":"div"))&&g.copyAttributes(e),b(g,e)):u.call(this,g));a.moveToBookmark(d)}function b(a,b){var d=!b;d&&(b=a.getDocument().createElement("div"),a.copyAttributes(b));var c=b&&b.is("pre"),e=a.is("pre"),f=!c&&e;if(c&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=n(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g," ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");
-h.append(e);e.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=t(d?[a.getHtml()]:g(a),b):a.moveChildren(b);b.replace(a);if(c){var d=b,k;(k=d.getPrevious(H))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(c=n(k.getHtml(),/\n$/,"")+"\n\n"+n(d.getHtml(),/^\n/,""),CKEDITOR.env.ie?d.$.outerHTML="\x3cpre\x3e"+c+"\x3c/pre\x3e":d.setHtml(c),k.remove())}else d&&r(b)}function g(a){var b=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,
-function(a,b,d){return b+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,d){b.push(d)});return b}function n(a,b,d){var c="",g="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,d){b&&(c=b);d&&(g=d);return""});return c+a.replace(b,d)+g}function t(a,b){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var c=0;c<a.length;c++){var g=a[c],g=g.replace(/(\r\n|\r)/g,"\n"),g=n(g,/^[ \t]*\n/,
-""),g=n(g,/\n$/,""),g=n(g,/^[ \t]+|[ \t]+$/g,function(a,b){return 1==a.length?"\x26nbsp;":b?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),g=g.replace(/\n/g,"\x3cbr\x3e"),g=g.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var e=b.clone();e.setHtml(g);d.append(e)}else b.setHtml(g)}return d||b}function u(a,b){var d=this._.definition,c=d.attributes,d=d.styles,g=q(this)[a.getName()],e=CKEDITOR.tools.isEmpty(c)&&
-CKEDITOR.tools.isEmpty(d),f;for(f in c)if("class"!=f&&!this._.definition.fullMatch||a.getAttribute(f)==z(f,c[f]))b&&"data-"==f.slice(0,5)||(e=a.hasAttribute(f),a.removeAttribute(f));for(var h in d)this._.definition.fullMatch&&a.getStyle(h)!=z(h,d[h],!0)||(e=e||!!a.getStyle(h),a.removeStyle(h));p(a,g,D[a.getName()]);e&&(this._.definition.alwaysRemoveElement?r(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?r(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?
-"p":"div"))}function w(a){for(var b=q(this),d=a.getElementsByTag(this.element),c,g=d.count();0<=--g;)c=d.getItem(g),c.isReadOnly()||u.call(this,c,!0);for(var e in b)if(e!=this.element)for(d=a.getElementsByTag(e),g=d.count()-1;0<=g;g--)c=d.getItem(g),c.isReadOnly()||p(c,b[e])}function p(a,b,d){if(b=b&&b.attributes)for(var c=0;c<b.length;c++){var g=b[c][0],e;if(e=a.getAttribute(g)){var f=b[c][1];(null===f||f.test&&f.test(e)||"string"==typeof f&&e==f)&&a.removeAttribute(g)}}d||r(a)}function r(a,b){if(!a.hasAttributes()||
-b)if(CKEDITOR.dtd.$block[a.getName()]){var d=a.getPrevious(H),c=a.getNext(H);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br",1);!c||c.type!=CKEDITOR.NODE_TEXT&&c.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else d=a.getFirst(),c=a.getLast(),a.remove(!0),d&&(d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings(),c&&!d.equals(c)&&c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings())}function v(a,b,d){var c;c=a.element;"*"==c&&(c="span");c=new CKEDITOR.dom.element(c,b);d&&d.copyAttributes(c);
-c=A(c,a);b.getCustomData("doc_processing_style")&&c.hasAttribute("id")?c.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return c}function A(a,b){var d=b._.definition,c=d.attributes,d=CKEDITOR.style.getStyleText(d);if(c)for(var g in c)a.setAttribute(g,c[g]);d&&a.setAttribute("style",d);return a}function B(a,b){for(var d in a)a[d]=a[d].replace(F,function(a,d){return b[d]})}function q(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},d=a._.definition.overrides;if(d){CKEDITOR.tools.isArray(d)||
-(d=[d]);for(var c=0;c<d.length;c++){var g=d[c],e,f;"string"==typeof g?e=g.toLowerCase():(e=g.element?g.element.toLowerCase():a.element,f=g.attributes);g=b[e]||(b[e]={});if(f){var g=g.attributes=g.attributes||[],h;for(h in f)g.push([h.toLowerCase(),f[h]])}}}return b}function z(a,b,d){var c=new CKEDITOR.dom.element("span");c[d?"setStyle":"setAttribute"](a,b);return c[d?"getStyle":"getAttribute"](a)}function y(a,b){function d(a,b){return"font-family"==b.toLowerCase()?a.replace(/["']/g,""):a}"string"==
-typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof b&&(b=CKEDITOR.tools.parseCssText(b,!0));for(var c in a)if(!(c in b)||d(b[c],c)!=d(a[c],c)&&"inherit"!=a[c]&&"inherit"!=b[c])return!1;return!0}function x(a,b,d){var c=a.document,g=a.getRanges();b=b?this.removeFromRange:this.applyToRange;var e,f;if(a.isFake&&a.isInTable())for(e=[],f=0;f<g.length;f++)e.push(g[f].clone());for(var h=g.createIterator();f=h.getNextRange();)b.call(this,f,d);a.selectRanges(e||g);c.removeCustomData("doc_processing_style")}
-var D={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},C={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},G=/\s*(?:;\s*|$)/,F=/#\((.+?)\)/g,I=CKEDITOR.dom.walker.bookmark(0,1),H=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if("string"==
-typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);var d=a.attributes;d&&d.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(d.style)),delete d.style);b&&(a=CKEDITOR.tools.clone(a),B(a.attributes,b),B(a.styles,b));d=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(D[d]?CKEDITOR.STYLE_BLOCK:C[d]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);
-this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return x.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);x.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return x.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);
-x.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?m:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.removeFromRange(a)},applyToObject:function(a){A(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||
-a.blockLimit,!0,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var d=a.elements,c=0,g;c<d.length;c++)if(g=d[c],this.type!=CKEDITOR.STYLE_INLINE||g!=a.block&&g!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var e=g.getName();if(!("string"==typeof this.element?e==this.element:e in this.element))continue}if(this.checkElementRemovable(g,!0,b))return!0}}return!1},checkApplicable:function(a,b,d){b&&b instanceof CKEDITOR.filter&&(d=b);if(d&&!d.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);
-case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0},checkElementMatch:function(a,b){var d=this._.definition;if(!a||!d.ignoreReadonly&&a.isReadOnly())return!1;var c=a.getName();if("string"==typeof this.element?c==this.element:c in this.element){if(!b&&!a.hasAttributes())return!0;if(c=d._AC)d=c;else{var c={},g=0,e=d.attributes;if(e)for(var f in e)g++,c[f]=e[f];if(f=CKEDITOR.style.getStyleText(d))c.style||g++,c.style=f;c._length=g;d=d._AC=c}if(d._length){for(var h in d)if("_length"!=
-h)if(c=a.getAttribute(h)||"","style"==h?y(d[h],c):d[h]==c){if(!b)return!0}else if(b)return!1;if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,d){if(this.checkElementMatch(a,b,d))return!0;if(b=q(this)[a.getName()]){var c;if(!(b=b.attributes))return!0;for(d=0;d<b.length;d++)if(c=b[d][0],c=a.getAttribute(c)){var g=b[d][1];if(null===g)return!0;if("string"==typeof g){if(c==g)return!0}else if(g.test(c))return!0}}return!1},buildPreview:function(a){var b=this._.definition,d=[],c=b.element;
-"bdo"==c&&(c="span");var d=["\x3c",c],g=b.attributes;if(g)for(var e in g)d.push(" ",e,'\x3d"',g[e],'"');(g=CKEDITOR.style.getStyleText(b))&&d.push(' style\x3d"',g,'"');d.push("\x3e",a||b.name,"\x3c/",c,"\x3e");return d.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,d=a.attributes&&a.attributes.style||"",c="";d.length&&(d=d.replace(G,";"));for(var g in b){var e=b[g],f=(g+":"+e).replace(G,";");"inherit"==
-e?c+=f:d+=f}d.length&&(d=CKEDITOR.tools.normalizeCssText(d,!0));return a._ST=d+c};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,!0);return this.customHandlers[a.type]=b};var N=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,O=CKEDITOR.POSITION_FOLLOWING|
-CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,!0)},CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)},CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"),CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet),
-CKEDITOR.loadStylesSet=function(a,e,c){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,c)},CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var c=this._.styleStateChangeCallbacks;c||(c=this._.styleStateChangeCallbacks=[],this.on("selectionChange",function(a){for(var e=0;e<c.length;e++){var m=c[e],l=m.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;m.fn.call(this,l)}}));c.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},
-removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);else{var e=this,c=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(!1===c)a(null);else if(c instanceof Array)e._.stylesDefinitions=c,a(c);else{c||(c="default");var c=c.split(":"),f=c[0];CKEDITOR.stylesSet.addExternal(f,c[1]?c.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(c){e._.stylesDefinitions=c[f];a(e._.stylesDefinitions)})}}}}),
-CKEDITOR.dom.comment=function(a,e){"string"==typeof a&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)},CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"\x3c!--"+this.$.nodeValue+"--\x3e"}}),"use strict",function(){var a={},e={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(a[c]=1);for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||
-c in CKEDITOR.dtd.$empty||(e[c]=1);CKEDITOR.dom.elementPath=function(c,h){var m=null,l=null,k=[],d=c,b;h=h||c.getDocument().getBody();d||(d=h);do if(d.type==CKEDITOR.NODE_ELEMENT){k.push(d);if(!this.lastElement&&(this.lastElement=d,d.is(CKEDITOR.dtd.$object)||"false"==d.getAttribute("contenteditable")))continue;if(d.equals(h))break;if(!l&&(b=d.getName(),"true"==d.getAttribute("contenteditable")?l=d:!m&&e[b]&&(m=d),a[b])){if(b=!m&&"div"==b){a:{b=d.getChildren();for(var g=0,n=b.count();g<n;g++){var t=
-b.getItem(g);if(t.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[t.getName()]){b=!0;break a}}b=!1}b=!b}b?m=d:l=d}}while(d=d.getParent());l||(l=h);this.block=m;this.blockLimit=l;this.root=h;this.elements=k}}(),CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements;a=a&&a.elements;if(!a||e.length!=a.length)return!1;for(var c=0;c<e.length;c++)if(!e[c].equals(a[c]))return!1;return!0},contains:function(a,e,c){var f=0,h;"string"==typeof a&&(h=function(c){return c.getName()==a});a instanceof
-CKEDITOR.dom.element?h=function(c){return c.equals(a)}:CKEDITOR.tools.isArray(a)?h=function(c){return-1<CKEDITOR.tools.indexOf(a,c.getName())}:"function"==typeof a?h=a:"object"==typeof a&&(h=function(c){return c.getName()in a});var m=this.elements,l=m.length;e&&(c?f+=1:--l);c&&(m=Array.prototype.slice.call(m,0),m.reverse());for(;f<l;f++)if(h(m[f]))return m[f];return null},isContextFor:function(a){var e;return a in CKEDITOR.dtd.$block?(e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&
-this.block||this.blockLimit,!!e.getDtd()[a]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(a,e){"string"==typeof a&&(a=(e?e.$:document).createTextNode(a));this.$=a},CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=
-this.$.parentNode,c=e.childNodes.length,f=this.getLength(),h=this.getDocument(),m=new CKEDITOR.dom.text(this.$.splitText(a),h);e.childNodes.length==c&&(a>=f?(m=h.createText(""),m.insertAfter(this)):(a=h.createText(""),a.insertAfter(m),a.remove()));return m},substring:function(a,e){return"number"!=typeof e?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}),function(){function a(a,e,h){var m=a.serializable,l=e[h?"endContainer":"startContainer"],k=h?"endOffset":"startOffset",d=m?e.document.getById(a.startNode):
-a.startNode;a=m?e.document.getById(a.endNode):a.endNode;l.equals(d.getPrevious())?(e.startOffset=e.startOffset-l.getLength()-a.getPrevious().getLength(),l=a.getNext()):l.equals(a.getPrevious())&&(e.startOffset-=l.getLength(),l=a.getNext());l.equals(d.getParent())&&e[k]++;l.equals(a.getParent())&&e[k]++;e[h?"endContainer":"startContainer"]=l;return e}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,
-e)};var e={createIterator:function(){var a=this,e=CKEDITOR.dom.walker.bookmark(),h=[],m;return{getNextRange:function(l){m=void 0===m?0:m+1;var k=a[m];if(k&&1<a.length){if(!m)for(var d=a.length-1;0<=d;d--)h.unshift(a[d].createBookmark(!0));if(l)for(var b=0;a[m+b+1];){var g=k.document;l=0;d=g.getById(h[b].endNode);for(g=g.getById(h[b+1].startNode);;){d=d.getNextSourceNode(!1);if(g.equals(d))l=1;else if(e(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary())continue;break}if(!l)break;b++}for(k.moveToBookmark(h.shift());b--;)d=
-a[++m],d.moveToBookmark(h.shift()),k.setEnd(d.endContainer,d.endOffset)}return k}}},createBookmarks:function(c){for(var e=[],h,m=0;m<this.length;m++){e.push(h=this[m].createBookmark(c,!0));for(var l=m+1;l<this.length;l++)this[l]=a(h,this[l]),this[l]=a(h,this[l],!0)}return e},createBookmarks2:function(a){for(var e=[],h=0;h<this.length;h++)e.push(this[h].createBookmark2(a));return e},moveToBookmarks:function(a){for(var e=0;e<this.length;e++)this[e].moveToBookmark(a[e])}}}(),function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||
-"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var d=CKEDITOR.skin["ua_"+b],c=CKEDITOR.env;if(d)for(var d=d.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<d.length;e++)if(f=d[e],c.ie&&(f.replace(/^ie/,"")==c.version||c.quirks&&"iequirks"==f)&&(f="ie"),c[f]){b+="_"+d[e];break}return CKEDITOR.getUrl(a()+b+".css")}function c(a,d){m[a]||(CKEDITOR.document.appendStyleSheet(e(a)),m[a]=1);d&&d()}function f(a){var d=a.getById(l);d||(d=a.getHead().append("style"),d.setAttribute("id",
-l),d.setAttribute("type","text/css"));return d}function h(a,d,c){var e,f,h;if(CKEDITOR.env.webkit)for(d=d.split("}").slice(0,-1),f=0;f<d.length;f++)d[f]=d[f].split("{");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(f=0;f<d.length;f++){h=d[f][1];for(e=0;e<c.length;e++)h=h.replace(c[e][0],c[e][1]);a[k].$.sheet.addRule(d[f][0],h)}else{h=d;for(e=0;e<c.length;e++)h=h.replace(c[e][0],c[e][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[k].$.styleSheet.cssText+=h:a[k].$.innerHTML+=h}}var m={};CKEDITOR.skin=
-{path:a,loadPart:function(b,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){c(b,d)}):c(b,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,d,c,e){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:d,offset:c||0,bgsize:e||"16px"})},getIconStyle:function(a,d,c,e,f){var h;a&&(a=a.toLowerCase(),d&&(h=this.icons[a+"-rtl"]),h||(h=this.icons[a]));a=c||h&&h.path||"";e=e||h&&h.offset;f=f||h&&h.bgsize||
-"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+e+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var c=f(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var b=CKEDITOR.skin.chameleon,e="",f="";"function"==typeof b&&(e=b(this,"editor"),f=b(this,"panel"));a=[[d,a]];h([c],e,a);h(k,f,a)}).call(this,a)}});var l="cke_ui_color",
-k=[],d=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var c=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=f(a);k.push(a);var b=c.getUiColor();b&&h([a],CKEDITOR.skin.chameleon(c,"panel"),[[d,b]])}};c.on("panelShow",a);c.on("menuShow",a);c.config.uiColor&&c.setUiColor(c.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',
+CKEDITOR.POSITION_CONTAINS||(g.setStartAfter(c),g.collapsed||a.splice(b+1,0,g));return!0}return!1};c.next()}}return a}var p="function"!=typeof window.getSelection,t=1,v=CKEDITOR.tools.repeat("​",7),z=new RegExp(v+"( )?","g"),A,q,y,x=CKEDITOR.dom.walker.invisible(1),C=function(){function a(b){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([d]);return!1}}function b(a){return function(b){var d=b.editor,c=d.createRange(),
+g;(g=c.moveToClosestEditablePosition(b.selected,a))||(g=c.moveToClosestEditablePosition(b.selected,!a));g&&d.getSelection().selectRanges([c]);d.fire("saveSnapshot");b.selected.remove();g||(c.moveToElementEditablePosition(d.editable()),d.getSelection().selectRanges([c]));d.fire("saveSnapshot");return!1}}var d=a(),c=a(1);return{37:d,38:d,39:c,40:c,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=d.getSelection();a&&a.removeAllRanges()}var d=a.editor;d.on("contentDom",function(){function a(){u=
+new CKEDITOR.dom.selection(d.getSelection());u.lock()}function b(){f.removeListener("mouseup",b);l.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,d=a.createRange();"None"!=a.type&&d.parentElement().ownerDocument==e.$&&d.select()}function c(a){if(CKEDITOR.env.ie){var b=(a=a.getRanges()[0])?a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("false"==a.getAttribute("contenteditable")||"true"==a.getAttribute("contenteditable"))},!0):null;return a&&"false"==
+b.getAttribute("contenteditable")&&b}}var e=d.document,f=CKEDITOR.document,k=d.editable(),n=e.getBody(),l=e.getDocumentElement(),t=k.isInline(),q,u;CKEDITOR.env.gecko&&k.attachListener(k,"focus",function(a){a.removeListener();0!==q&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==k.$&&(a=d.createRange(),a.moveToElementEditStart(k),a.select())},null,null,-2);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){q&&CKEDITOR.env.webkit&&(q=d._.previousActive&&d._.previousActive.equals(e.getActive()))&&
+null!=d._.previousScrollTop&&d._.previousScrollTop!=k.$.scrollTop&&(k.$.scrollTop=d._.previousScrollTop);d.unlockSelection(q);q=0},null,null,-1);k.attachListener(k,"mousedown",function(){q=0});if(CKEDITOR.env.ie||t)p?k.attachListener(k,"beforedeactivate",a,null,null,-1):k.attachListener(d,"selectionCheck",a,null,null,-1),k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(u);q=1},null,null,-1),k.attachListener(k,"mousedown",function(){q=0});if(CKEDITOR.env.ie&&!t){var v;
+k.attachListener(k,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(v=d.window.getScrollPosition()))});k.attachListener(k,"mouseup",function(a){2==a.data.$.button&&v&&(d.document.$.documentElement.scrollLeft=v.x,d.document.$.documentElement.scrollTop=v.y);v=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var w,z;l.on("mousedown",function(a){function b(a){a=a.data.$;if(w){var d=n.$.createTextRange();
+try{d.moveToPoint(a.clientX,a.clientY)}catch(c){}w.setEndPoint(0>z.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);w.select()}}function d(){l.removeListener("mousemove",b);f.removeListener("mouseup",d);l.removeListener("mouseup",d);w.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<l.$.clientHeight&&a.$.x<l.$.clientWidth){w=n.$.createTextRange();try{w.moveToPoint(a.$.clientX,a.$.clientY)}catch(c){}z=w.duplicate();l.on("mousemove",b);f.on("mouseup",d);l.on("mouseup",d)}})}if(7<
+CKEDITOR.env.version&&11>CKEDITOR.env.version)l.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",b),l.on("mouseup",b))})}}k.attachListener(k,"selectionchange",h,d);k.attachListener(k,"keyup",m,d);k.attachListener(k,"keydown",function(a){var b=this.getSelection(1);c(b)&&(b.selectElement(c(b)),a.data.preventDefault())},d);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(t&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var K;
+k.attachListener(k,"mousedown",function(){K=1});k.attachListener(e.getDocumentElement(),"mouseup",function(){K&&m.call(d);K=0})}else k.attachListener(CKEDITOR.env.ie?k:e.getDocumentElement(),"mouseup",m,d);CKEDITOR.env.webkit&&k.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:k.hasFocus&&g(k)}},null,null,-1);k.attachListener(k,"keydown",r(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&
+b()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",b,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&(b.remove(),CKEDITOR.env.gecko&&(a=d.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&
+a.remove())},null,null,100);d.on("key",function(a){if("wysiwyg"==d.mode){var b=d.getSelection();if(b.isFake){var c=C[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),d=a.getCustomData("cke-fillingChar");d&&(d.getCustomData("ready")?(g(a),a.editor.fire("selectionCheck")):d.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",
+function(){g(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=n(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=n(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?h:m).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=
+function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=
+function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var d=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:t++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=d?a:this.document.getBody();this.isLocked=
+0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var c,g;if(a)if(a.getRangeAt)c=(g=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(g.commonAncestorContainer);else{try{g=a.createRange()}catch(e){}c=g&&CKEDITOR.dom.element.get(g.item&&g.item(0)||g.parentElement())}if(!c||c.type!=CKEDITOR.NODE_ELEMENT&&c.type!=CKEDITOR.NODE_TEXT||!this.root.equals(c)&&!this.root.contains(c))this._.cache.type=CKEDITOR.SELECTION_NONE,
+this._.cache.startElement=null,this._.cache.selectedElement=null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var B={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:n,_createFillingCharSequenceNode:b,FILLING_CHAR_SEQUENCE:v});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==
+this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=p?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:p?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var d=this.getNative(),c=d.type;"Text"==c&&(b=CKEDITOR.SELECTION_TEXT);"Control"==c&&(b=CKEDITOR.SELECTION_ELEMENT);d.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(g){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=
+CKEDITOR.SELECTION_TEXT,d=this.getNative();if(!d||!d.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==d.rangeCount){var d=d.getRangeAt(0),c=d.startContainer;c==d.endContainer&&1==c.nodeType&&1==d.endOffset-d.startOffset&&B[c.childNodes[d.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=p?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,d){b=b.duplicate();b.collapse(d);var c=b.parentElement();if(!c.hasChildNodes())return{container:c,
+offset:0};for(var g=c.children,e,f,h=b.duplicate(),k=0,n=g.length-1,p=-1,l,m;k<=n;)if(p=Math.floor((k+n)/2),e=g[p],h.moveToElementText(e),l=h.compareEndPoints("StartToStart",b),0<l)n=p-1;else if(0>l)k=p+1;else return{container:c,offset:a(e)};if(-1==p||p==g.length-1&&0>l){h.moveToElementText(c);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;g=c.childNodes;if(!h)return e=g[g.length-1],e.nodeType!=CKEDITOR.NODE_TEXT?{container:c,offset:g.length}:{container:e,offset:e.nodeValue.length};
+for(c=g.length;0<h&&0<c;)f=g[--c],f.nodeType==CKEDITOR.NODE_TEXT&&(m=f,h-=f.nodeValue.length);return{container:m,offset:-h}}h.collapse(0<l?!0:!1);h.setEndPoint(0<l?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:c,offset:a(e)+(0<l?0:1)};for(;0<h;)try{f=e[0<l?"previousSibling":"nextSibling"],f.nodeType==CKEDITOR.NODE_TEXT&&(h-=f.nodeValue.length,m=f),e=f}catch(t){return{container:c,offset:a(e)}}return{container:m,offset:0<l?-h:m.nodeValue.length+h}};
+return function(){var a=this.getNative(),d=a&&a.createRange(),c=this.getType();if(!a)return[];if(c==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),c=b(d,!0),a.setStart(new CKEDITOR.dom.node(c.container),c.offset),c=b(d),a.setEnd(new CKEDITOR.dom.node(c.container),c.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse(),[a];if(c==CKEDITOR.SELECTION_ELEMENT){for(var c=[],g=0;g<d.length;g++){for(var e=
+d.item(g),f=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<f.childNodes.length&&f.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(f),h);a.setEnd(new CKEDITOR.dom.node(f),h+1);c.push(a)}return c}return[]}}():function(){var a=[],b,d=this.getNative();if(!d)return a;for(var c=0;c<d.rangeCount;c++){var g=d.getRangeAt(c);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(g.startContainer),g.startOffset);b.setEnd(new CKEDITOR.dom.node(g.endContainer),g.endOffset);a.push(b)}return a};
+return function(b){var d=this._.cache,c=d.ranges;c||(d.ranges=c=new CKEDITOR.dom.rangeList(a.call(this)));return b?w(new CKEDITOR.dom.rangeList(c.slice())):c}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var d=this.getRanges()[0];if(d){if(d.collapsed)b=d.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());else{for(d.optimize();b=
+d.startContainer,d.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary();)d.setStartAfter(b);b=d.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();if((b=b.getChild(d.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(d=b.getFirst();d&&d.type==CKEDITOR.NODE_ELEMENT;)b=d,d=d.getFirst();else b=d.startContainer}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;
+var b=this,d=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),d,c,g=2;g&&!((d=a.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&B[d.getName()]&&(c=d));g--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return c&&c.$});return a.selectedElement=d?new CKEDITOR.dom.element(d):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNative(),b=p?"Control"==b.type?"":b.createRange().text:
+b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(b){if(this.isLocked){if(b)var d=this.getSelectedElement(),c=this.getRanges(),g=this.isFake;this.isLocked=0;this.reset();b&&(b=d||c[0]&&c[0].getCommonAncestor())&&b.getAscendant("body",1)&&(a(c)?f.call(this,c):g?this.fake(d):d?this.selectElement(d):this.selectRanges(c))}},reset:function(){this._.cache=
+{};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var d=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!d&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=t++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(c){var e=
+this.root.editor,h=e&&e._.hiddenSelectionContainer;this.reset();if(h)for(var h=this.root,k,n=0;n<c.length;++n)k=c[n],k.endContainer.equals(h)&&(k.endOffset=Math.min(k.endOffset,h.getChildCount()));if(c.length)if(this.isLocked){var l=CKEDITOR.document.getActive();this.unlock();this.selectRanges(c);this.lock();l&&!l.equals(this.root)&&l.focus()}else{var m;a:{var t,q;if(1==c.length&&!(q=c[0]).collapsed&&(m=q.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(q=q.clone(),q.shrink(CKEDITOR.SHRINK_ELEMENT,
+!0),(t=q.getEnclosedNode())&&t.type==CKEDITOR.NODE_ELEMENT&&(m=t),"false"==m.getAttribute("contenteditable")))break a;m=void 0}if(m)this.fake(m);else if(e&&e.plugins.tableselection&&CKEDITOR.plugins.tableselection.isSupportedEnvironment&&a(c)&&!A)f.call(this,c);else{if(p){t=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;q={table:1,tbody:1,tr:1};1<c.length&&(e=c[c.length-1],c[0].setEnd(e.endContainer,e.endOffset));e=c[0];c=e.collapsed;var u,v,w;if((h=e.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&
+h.getName()in B&&(!h.is("a")||!h.getText()))try{w=h.$.createControlRange();w.addElement(h.$);w.select();return}catch(z){}if(e.startContainer.type==CKEDITOR.NODE_ELEMENT&&e.startContainer.getName()in q||e.endContainer.type==CKEDITOR.NODE_ELEMENT&&e.endContainer.getName()in q)e.shrink(CKEDITOR.NODE_ELEMENT,!0),c=e.collapsed;w=e.createBookmark();q=w.startNode;c||(l=w.endNode);w=e.document.$.body.createTextRange();w.moveToElementText(q.$);w.moveStart("character",1);l?(m=e.document.$.body.createTextRange(),
+m.moveToElementText(l.$),w.setEndPoint("EndToEnd",m),w.moveEnd("character",-1)):(u=q.getNext(t),v=q.hasAscendant("pre"),u=!(u&&u.getText&&u.getText().match(m))&&(v||!q.hasPrevious()||q.getPrevious().is&&q.getPrevious().is("br")),v=e.document.createElement("span"),v.setHtml("\x26#65279;"),v.insertBefore(q),u&&e.document.createText("﻿").insertBefore(q));e.setStartBefore(q);q.remove();c?(u?(w.moveStart("character",-1),w.select(),e.document.$.selection.clear()):w.select(),e.moveToPosition(v,CKEDITOR.POSITION_BEFORE_START),
+v.remove()):(e.setEndBefore(l),l.remove(),w.select())}else{l=this.getNative();if(!l)return;this.removeAllRanges();for(w=0;w<c.length;w++){if(w<c.length-1&&(u=c[w],v=c[w+1],m=u.clone(),m.setStart(u.endContainer,u.endOffset),m.setEnd(v.startContainer,v.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),e=m.getCommonAncestor(),m=m.getEnclosedNode(),e.isReadOnly()||m&&m.isReadOnly()))){v.setStart(u.startContainer,u.startOffset);c.splice(w--,1);continue}e=c[w];v=this.document.$.createRange();
+e.collapsed&&CKEDITOR.env.webkit&&d(e)&&(m=b(this.root),e.insertNode(m),(u=m.getNext())&&!m.getPrevious()&&u.type==CKEDITOR.NODE_ELEMENT&&"br"==u.getName()?(g(this.root),e.moveToPosition(u,CKEDITOR.POSITION_BEFORE_START)):e.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));v.setStart(e.startContainer.$,e.startOffset);try{v.setEnd(e.endContainer.$,e.endOffset)}catch(r){if(0<=r.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))e.collapse(1),v.setEnd(e.endContainer.$,e.endOffset);else throw r;}l.addRange(v)}}this.reset();
+this.root.fire("selectionchange")}}},fake:function(a,b){var d=this.root.editor;void 0===b&&a.hasAttribute("aria-label")&&(b=a.getAttribute("aria-label"));this.reset();u(d,b);var c=this._.cache,g=new CKEDITOR.dom.range(this.root);g.setStartBefore(a);g.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(g);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=t++;d._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=
+this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(){return a(this.getRanges())},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(b){for(var d=[],c,g=0;g<b.length;g++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(b[g]);d.push(e)}b.isFake&&
+(c=a(d)?d[0]._getTableElement():d[0].getEnclosedNode(),c&&c.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),b.isFake=0));b.isFake&&!a(d)?this.fake(c):this.selectRanges(d);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=
+this.getNative();try{a&&a[p?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function a(a,b){for(var d,c;(a=a.getParent())&&!a.equals(b);)if(a.getAttribute("data-nostyle"))d=a;else if(!c){var g=a.getAttribute("contentEditable");"false"==g?d=a:"true"==g&&(c=1)}return d}function e(a,b,d,c){return(a.getPosition(b)|c)==c&&(!d.childRule||d.childRule(a))}function c(b){var d=b.document;if(b.collapsed)d=
+v(this,d),b.insertNode(d),b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,f=this._.definition,k,n=f.ignoreReadonly,p=n||f.includeReadonly;null==p&&(p=b.root.getCustomData("cke_includeReadonly"));var l=CKEDITOR.dtd[g];l||(k=!0,l=CKEDITOR.dtd.span);b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var m=b.createBookmark(),q=m.startNode,t=m.endNode,u=q,r;if(!n){var z=b.getCommonAncestor(),n=a(q,z),z=a(t,z);n&&(u=n.getNextSourceNode(!0));z&&(t=z)}for(u.getPosition(t)==CKEDITOR.POSITION_FOLLOWING&&
+(u=0);u;){n=!1;if(u.equals(t))u=null,n=!0;else{var A=u.type==CKEDITOR.NODE_ELEMENT?u.getName():null,z=A&&"false"==u.getAttribute("contentEditable"),y=A&&u.getAttribute("data-nostyle");if(A&&u.data("cke-bookmark")){u=u.getNextSourceNode(!0);continue}if(z&&p&&CKEDITOR.dtd.$block[A])for(var x=u,B=h(x),C=void 0,D=B.length,fa=0,x=D&&new CKEDITOR.dom.range(x.getDocument());fa<D;++fa){var C=B[fa],G=CKEDITOR.filter.instances[C.data("cke-filter")];if(G?G.check(this):1)x.selectNodeContents(C),c.call(this,x)}B=
+A?!l[A]||y?0:z&&!p?0:e(u,t,f,N):1;if(B)if(C=u.getParent(),B=f,D=g,fa=k,!C||!(C.getDtd()||CKEDITOR.dtd.span)[D]&&!fa||B.parentRule&&!B.parentRule(C))n=!0;else{if(r||A&&CKEDITOR.dtd.$removeEmpty[A]&&(u.getPosition(t)|N)!=N||(r=b.clone(),r.setStartBefore(u)),A=u.type,A==CKEDITOR.NODE_TEXT||z||A==CKEDITOR.NODE_ELEMENT&&!u.getChildCount()){for(var A=u,H;(n=!A.getNext(I))&&(H=A.getParent(),l[H.getName()])&&e(H,q,f,O);)A=H;r.setEndAfter(A)}}else n=!0;u=u.getNextSourceNode(y||z)}if(n&&r&&!r.collapsed){for(var n=
+v(this,d),z=n.hasAttributes(),y=r.getCommonAncestor(),A={},B={},C={},D={},ga,Z,F;n&&y;){if(y.getName()==g){for(ga in f.attributes)!D[ga]&&(F=y.getAttribute(Z))&&(n.getAttribute(ga)==F?B[ga]=1:D[ga]=1);for(Z in f.styles)!C[Z]&&(F=y.getStyle(Z))&&(n.getStyle(Z)==F?A[Z]=1:C[Z]=1)}y=y.getParent()}for(ga in B)n.removeAttribute(ga);for(Z in A)n.removeStyle(Z);z&&!n.hasAttributes()&&(n=null);n?(r.extractContents().appendTo(n),r.insertNode(n),w.call(this,n),n.mergeSiblings(),CKEDITOR.env.ie||n.$.normalize()):
+(n=new CKEDITOR.dom.element("span"),r.extractContents().appendTo(n),r.insertNode(n),w.call(this,n),n.remove(!0));r=null}}b.moveToBookmark(m);b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function f(a){function b(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),d=new CKEDITOR.dom.elementPath(l.getParent()),g=null,e=null,f=0;f<a.elements.length;f++){var h=a.elements[f];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,!0)&&(g=h)}for(f=0;f<d.elements.length;f++){h=
+d.elements[f];if(h==d.block||h==d.blockLimit)break;m.checkElementRemovable(h,!0)&&(e=h)}e&&l.breakParent(e);g&&c.breakParent(g)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var d=a.createBookmark(),c=d.startNode,g=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(c.getParent(),a.root),f,h=0,k;h<e.elements.length&&(k=e.elements[h])&&k!=e.block&&k!=e.blockLimit;h++)if(this.checkElementRemovable(k)){var n;!g&&a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||
+(n=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(f=k,f.match=n?"start":"end"):(k.mergeSiblings(),k.is(this.element)?r.call(this,k):p(k,q(this)[k.getName()]))}if(f){g=c;for(h=0;;h++){k=e.elements[h];if(k.equals(f))break;else if(k.match)continue;else k=k.clone();k.append(g);g=k}g["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var l=d.endNode,m=this;b();for(e=c;!e.equals(l);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?r.call(this,
+e):p(e,q(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)&&(b(),f=c.getNext())),e=f}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function h(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function m(a){var b=a.getEnclosedNode()||a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&z(a,this)}function l(a){var b=a.getCommonAncestor(!0,
+!0);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,d=b.attributes;if(d)for(var c in d)a.removeAttribute(c,d[c]);if(b.styles)for(var g in b.styles)b.styles.hasOwnProperty(g)&&a.removeStyle(g)}}function k(a){var d=a.createBookmark(!0),c=a.createIterator();c.enforceRealBlocks=!0;this._.enterMode&&(c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var g,e=a.document,f;g=c.getNextParagraph();)!g.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):
+1)&&(f=v(this,e,g),b(g,f));a.moveToBookmark(d)}function d(a){var d=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=!0;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var g,e;g=c.getNextParagraph();)this.checkElementRemovable(g)&&(g.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&g.copyAttributes(e),b(g,e)):r.call(this,g));a.moveToBookmark(d)}function b(a,b){var d=!b;d&&(b=a.getDocument().createElement("div"),
+a.copyAttributes(b));var c=b&&b.is("pre"),e=a.is("pre"),f=!c&&e;if(c&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=n(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g," ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=u(d?
+[a.getHtml()]:g(a),b):a.moveChildren(b);b.replace(a);if(c){var d=b,k;(k=d.getPrevious(H))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(c=n(k.getHtml(),/\n$/,"")+"\n\n"+n(d.getHtml(),/^\n/,""),CKEDITOR.env.ie?d.$.outerHTML="\x3cpre\x3e"+c+"\x3c/pre\x3e":d.setHtml(c),k.remove())}else d&&t(b)}function g(a){var b=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,d){return b+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,
+d){b.push(d)});return b}function n(a,b,d){var c="",g="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,d){b&&(c=b);d&&(g=d);return""});return c+a.replace(b,d)+g}function u(a,b){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var c=0;c<a.length;c++){var g=a[c],g=g.replace(/(\r\n|\r)/g,"\n"),g=n(g,/^[ \t]*\n/,""),g=n(g,/\n$/,""),g=n(g,/^[ \t]+|[ \t]+$/g,function(a,b){return 1==a.length?"\x26nbsp;":b?" "+CKEDITOR.tools.repeat("\x26nbsp;",
+a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),g=g.replace(/\n/g,"\x3cbr\x3e"),g=g.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var e=b.clone();e.setHtml(g);d.append(e)}else b.setHtml(g)}return d||b}function r(a,b){var d=this._.definition,c=d.attributes,d=d.styles,g=q(this)[a.getName()],e=CKEDITOR.tools.isEmpty(c)&&CKEDITOR.tools.isEmpty(d),f;for(f in c)if("class"!=f&&!this._.definition.fullMatch||a.getAttribute(f)==y(f,c[f]))b&&
+"data-"==f.slice(0,5)||(e=a.hasAttribute(f),a.removeAttribute(f));for(var h in d)this._.definition.fullMatch&&a.getStyle(h)!=y(h,d[h],!0)||(e=e||!!a.getStyle(h),a.removeStyle(h));p(a,g,B[a.getName()]);e&&(this._.definition.alwaysRemoveElement?t(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?t(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function w(a){for(var b=q(this),d=a.getElementsByTag(this.element),c,g=d.count();0<=--g;)c=d.getItem(g),
+c.isReadOnly()||r.call(this,c,!0);for(var e in b)if(e!=this.element)for(d=a.getElementsByTag(e),g=d.count()-1;0<=g;g--)c=d.getItem(g),c.isReadOnly()||p(c,b[e])}function p(a,b,d){if(b=b&&b.attributes)for(var c=0;c<b.length;c++){var g=b[c][0],e;if(e=a.getAttribute(g)){var f=b[c][1];(null===f||f.test&&f.test(e)||"string"==typeof f&&e==f)&&a.removeAttribute(g)}}d||t(a)}function t(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var d=a.getPrevious(H),c=a.getNext(H);!d||d.type!=CKEDITOR.NODE_TEXT&&
+d.isBlockBoundary({br:1})||a.append("br",1);!c||c.type!=CKEDITOR.NODE_TEXT&&c.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else d=a.getFirst(),c=a.getLast(),a.remove(!0),d&&(d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings(),c&&!d.equals(c)&&c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings())}function v(a,b,d){var c;c=a.element;"*"==c&&(c="span");c=new CKEDITOR.dom.element(c,b);d&&d.copyAttributes(c);c=z(c,a);b.getCustomData("doc_processing_style")&&c.hasAttribute("id")?c.removeAttribute("id"):
+b.setCustomData("doc_processing_style",1);return c}function z(a,b){var d=b._.definition,c=d.attributes,d=CKEDITOR.style.getStyleText(d);if(c)for(var g in c)a.setAttribute(g,c[g]);d&&a.setAttribute("style",d);return a}function A(a,b){for(var d in a)a[d]=a[d].replace(F,function(a,d){return b[d]})}function q(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},d=a._.definition.overrides;if(d){CKEDITOR.tools.isArray(d)||(d=[d]);for(var c=0;c<d.length;c++){var g=d[c],e,f;"string"==typeof g?
+e=g.toLowerCase():(e=g.element?g.element.toLowerCase():a.element,f=g.attributes);g=b[e]||(b[e]={});if(f){var g=g.attributes=g.attributes||[],h;for(h in f)g.push([h.toLowerCase(),f[h]])}}}return b}function y(a,b,d){var c=new CKEDITOR.dom.element("span");c[d?"setStyle":"setAttribute"](a,b);return c[d?"getStyle":"getAttribute"](a)}function x(a,b){function d(a,b){return"font-family"==b.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof b&&(b=
+CKEDITOR.tools.parseCssText(b,!0));for(var c in a)if(!(c in b)||d(b[c],c)!=d(a[c],c)&&"inherit"!=a[c]&&"inherit"!=b[c])return!1;return!0}function C(a,b,d){var c=a.document,g=a.getRanges();b=b?this.removeFromRange:this.applyToRange;var e,f;if(a.isFake&&a.isInTable())for(e=[],f=0;f<g.length;f++)e.push(g[f].clone());for(var h=g.createIterator();f=h.getNextRange();)b.call(this,f,d);a.selectRanges(e||g);c.removeCustomData("doc_processing_style")}var B={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,
+pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},D={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},G=/\s*(?:;\s*|$)/,F=/#\((.+?)\)/g,I=CKEDITOR.dom.walker.bookmark(0,1),H=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);
+var d=a.attributes;d&&d.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(d.style)),delete d.style);b&&(a=CKEDITOR.tools.clone(a),A(a.attributes,b),A(a.styles,b));d=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(B[d]?CKEDITOR.STYLE_BLOCK:D[d]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof
+CKEDITOR.dom.document)return C.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return C.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=
+this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?m:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.removeFromRange(a)},applyToObject:function(a){z(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var d=
+a.elements,c=0,g;c<d.length;c++)if(g=d[c],this.type!=CKEDITOR.STYLE_INLINE||g!=a.block&&g!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var e=g.getName();if(!("string"==typeof this.element?e==this.element:e in this.element))continue}if(this.checkElementRemovable(g,!0,b))return!0}}return!1},checkApplicable:function(a,b,d){b&&b instanceof CKEDITOR.filter&&(d=b);if(d&&!d.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0},
+checkElementMatch:function(a,b){var d=this._.definition;if(!a||!d.ignoreReadonly&&a.isReadOnly())return!1;var c=a.getName();if("string"==typeof this.element?c==this.element:c in this.element){if(!b&&!a.hasAttributes())return!0;if(c=d._AC)d=c;else{var c={},g=0,e=d.attributes;if(e)for(var f in e)g++,c[f]=e[f];if(f=CKEDITOR.style.getStyleText(d))c.style||g++,c.style=f;c._length=g;d=d._AC=c}if(d._length){for(var h in d)if("_length"!=h)if(c=a.getAttribute(h)||"","style"==h?x(d[h],c):d[h]==c){if(!b)return!0}else if(b)return!1;
+if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,d){if(this.checkElementMatch(a,b,d))return!0;if(b=q(this)[a.getName()]){var c;if(!(b=b.attributes))return!0;for(d=0;d<b.length;d++)if(c=b[d][0],c=a.getAttribute(c)){var g=b[d][1];if(null===g)return!0;if("string"==typeof g){if(c==g)return!0}else if(g.test(c))return!0}}return!1},buildPreview:function(a){var b=this._.definition,d=[],c=b.element;"bdo"==c&&(c="span");var d=["\x3c",c],g=b.attributes;if(g)for(var e in g)d.push(" ",
+e,'\x3d"',g[e],'"');(g=CKEDITOR.style.getStyleText(b))&&d.push(' style\x3d"',g,'"');d.push("\x3e",a||b.name,"\x3c/",c,"\x3e");return d.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,d=a.attributes&&a.attributes.style||"",c="";d.length&&(d=d.replace(G,";"));for(var g in b){var e=b[g],f=(g+":"+e).replace(G,";");"inherit"==e?c+=f:d+=f}d.length&&(d=CKEDITOR.tools.normalizeCssText(d,!0));return a._ST=d+c};CKEDITOR.style.customHandlers=
+{};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,!0);return this.customHandlers[a.type]=b};var N=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,O=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(a,
+e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,!0)},CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)},CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet"),CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet),CKEDITOR.loadStylesSet=function(a,e,c){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,
+c)},CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var c=this._.styleStateChangeCallbacks;c||(c=this._.styleStateChangeCallbacks=[],this.on("selectionChange",function(a){for(var e=0;e<c.length;e++){var m=c[e],l=m.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;m.fn.call(this,l)}}));c.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);
+else{var e=this,c=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(!1===c)a(null);else if(c instanceof Array)e._.stylesDefinitions=c,a(c);else{c||(c="default");var c=c.split(":"),f=c[0];CKEDITOR.stylesSet.addExternal(f,c[1]?c.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(c){e._.stylesDefinitions=c[f];a(e._.stylesDefinitions)})}}}}),CKEDITOR.dom.comment=function(a,e){"string"==typeof a&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,
+a)},CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"\x3c!--"+this.$.nodeValue+"--\x3e"}}),"use strict",function(){var a={},e={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(a[c]=1);for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(e[c]=1);CKEDITOR.dom.elementPath=function(c,h){var m=null,l=null,k=[],d=c,b;h=h||c.getDocument().getBody();
+d||(d=h);do if(d.type==CKEDITOR.NODE_ELEMENT){k.push(d);if(!this.lastElement&&(this.lastElement=d,d.is(CKEDITOR.dtd.$object)||"false"==d.getAttribute("contenteditable")))continue;if(d.equals(h))break;if(!l&&(b=d.getName(),"true"==d.getAttribute("contenteditable")?l=d:!m&&e[b]&&(m=d),a[b])){if(b=!m&&"div"==b){a:{b=d.getChildren();for(var g=0,n=b.count();g<n;g++){var u=b.getItem(g);if(u.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[u.getName()]){b=!0;break a}}b=!1}b=!b}b?m=d:l=d}}while(d=d.getParent());
+l||(l=h);this.block=m;this.blockLimit=l;this.root=h;this.elements=k}}(),CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements;a=a&&a.elements;if(!a||e.length!=a.length)return!1;for(var c=0;c<e.length;c++)if(!e[c].equals(a[c]))return!1;return!0},contains:function(a,e,c){var f;"string"==typeof a&&(f=function(c){return c.getName()==a});a instanceof CKEDITOR.dom.element?f=function(c){return c.equals(a)}:CKEDITOR.tools.isArray(a)?f=function(c){return-1<CKEDITOR.tools.indexOf(a,c.getName())}:
+"function"==typeof a?f=a:"object"==typeof a&&(f=function(c){return c.getName()in a});var h=this.elements,m=h.length;e&&m--;c&&(h=Array.prototype.slice.call(h,0),h.reverse());for(e=0;e<m;e++)if(f(h[e]))return h[e];return null},isContextFor:function(a){var e;return a in CKEDITOR.dtd.$block?(e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!e.getDtd()[a]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=
+function(a,e){"string"==typeof a&&(a=(e?e.$:document).createTextNode(a));this.$=a},CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node,CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,c=e.childNodes.length,f=this.getLength(),h=this.getDocument(),m=new CKEDITOR.dom.text(this.$.splitText(a),h);e.childNodes.length==
+c&&(a>=f?(m=h.createText(""),m.insertAfter(this)):(a=h.createText(""),a.insertAfter(m),a.remove()));return m},substring:function(a,e){return"number"!=typeof e?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}),function(){function a(a,e,h){var m=a.serializable,l=e[h?"endContainer":"startContainer"],k=h?"endOffset":"startOffset",d=m?e.document.getById(a.startNode):a.startNode;a=m?e.document.getById(a.endNode):a.endNode;l.equals(d.getPrevious())?(e.startOffset=e.startOffset-l.getLength()-
+a.getPrevious().getLength(),l=a.getNext()):l.equals(a.getPrevious())&&(e.startOffset-=l.getLength(),l=a.getNext());l.equals(d.getParent())&&e[k]++;l.equals(a.getParent())&&e[k]++;e[h?"endContainer":"startContainer"]=l;return e}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,e=CKEDITOR.dom.walker.bookmark(),h=[],m;return{getNextRange:function(l){m=
+void 0===m?0:m+1;var k=a[m];if(k&&1<a.length){if(!m)for(var d=a.length-1;0<=d;d--)h.unshift(a[d].createBookmark(!0));if(l)for(var b=0;a[m+b+1];){var g=k.document;l=0;d=g.getById(h[b].endNode);for(g=g.getById(h[b+1].startNode);;){d=d.getNextSourceNode(!1);if(g.equals(d))l=1;else if(e(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary())continue;break}if(!l)break;b++}for(k.moveToBookmark(h.shift());b--;)d=a[++m],d.moveToBookmark(h.shift()),k.setEnd(d.endContainer,d.endOffset)}return k}}},createBookmarks:function(c){for(var e=
+[],h,m=0;m<this.length;m++){e.push(h=this[m].createBookmark(c,!0));for(var l=m+1;l<this.length;l++)this[l]=a(h,this[l]),this[l]=a(h,this[l],!0)}return e},createBookmarks2:function(a){for(var e=[],h=0;h<this.length;h++)e.push(this[h].createBookmark2(a));return e},moveToBookmarks:function(a){for(var e=0;e<this.length;e++)this[e].moveToBookmark(a[e])}}}(),function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var d=
+CKEDITOR.skin["ua_"+b],c=CKEDITOR.env;if(d)for(var d=d.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<d.length;e++)if(f=d[e],c.ie&&(f.replace(/^ie/,"")==c.version||c.quirks&&"iequirks"==f)&&(f="ie"),c[f]){b+="_"+d[e];break}return CKEDITOR.getUrl(a()+b+".css")}function c(a,d){m[a]||(CKEDITOR.document.appendStyleSheet(e(a)),m[a]=1);d&&d()}function f(a){var d=a.getById(l);d||(d=a.getHead().append("style"),d.setAttribute("id",l),d.setAttribute("type","text/css"));return d}function h(a,d,c){var e,
+f,h;if(CKEDITOR.env.webkit)for(d=d.split("}").slice(0,-1),f=0;f<d.length;f++)d[f]=d[f].split("{");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(f=0;f<d.length;f++){h=d[f][1];for(e=0;e<c.length;e++)h=h.replace(c[e][0],c[e][1]);a[k].$.sheet.addRule(d[f][0],h)}else{h=d;for(e=0;e<c.length;e++)h=h.replace(c[e][0],c[e][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[k].$.styleSheet.cssText+=h:a[k].$.innerHTML+=h}}var m={};CKEDITOR.skin={path:a,loadPart:function(b,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?
+CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){c(b,d)}):c(b,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,d,c,e){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:d,offset:c||0,bgsize:e||"16px"})},getIconStyle:function(a,d,c,e,f){var h;a&&(a=a.toLowerCase(),d&&(h=this.icons[a+"-rtl"]),h||(h=this.icons[a]));a=c||h&&h.path||"";e=e||h&&h.offset;f=f||h&&h.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+
+"');background-position:0 "+e+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var c=f(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var b=CKEDITOR.skin.chameleon,e="",f="";"function"==typeof b&&(e=b(this,"editor"),f=b(this,"panel"));a=[[d,a]];h([c],e,a);h(k,f,a)}).call(this,a)}});var l="cke_ui_color",k=[],d=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||
+!CKEDITOR.env.quirks){var c=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=f(a);k.push(a);var b=c.getUiColor();b&&h([a],CKEDITOR.skin.chameleon(c,"panel"),[[d,b]])}};c.on("panelShow",a);c.on("menuShow",a);c.config.uiColor&&c.setUiColor(c.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',
 CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),c=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!e||e!=c)}catch(f){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,e=0;e<a.length;e++)CKEDITOR.editor.prototype.constructor.apply(a[e][0],
 a[e][1]),CKEDITOR.add(a[e][0])}(),CKEDITOR.skin.name="moono-lisa",CKEDITOR.skin.ua_editor="ie,iequirks,ie8,gecko",CKEDITOR.skin.ua_dialog="ie,iequirks,ie8",CKEDITOR.skin.chameleon=function(){var a=function(){return function(a,e){for(var h=a.match(/[^#]./g),m=0;3>m;m++){var l=m,k;k=parseInt(h[m],16);k=("0"+(0>e?0|k*(1+e):0|k+(255-k)*e).toString(16)).slice(-2);h[l]=k}return"#"+h.join("")}}(),e={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "),
 panel:new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
@@ -502,8 +502,8 @@ function(a){13==a.data.getKeystroke()&&(l=!0)});h.getInputElement().on("keyup",f
 function(){e.getInputElement().on("keyup",k)},e);CKEDITOR.ui.dialog.labeledElement.call(this,d,b,c,function(){h["aria-labelledby"]=this._.labelId;this._.required&&(h["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',f,'" '],b;for(b in h)a.push(b+'\x3d"'+CKEDITOR.tools.htmlEncode(h[b])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(e._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(d,
 b,c){if(!(3>arguments.length)){var e=a.call(this,b,{"default":!!b["default"]});b.validate&&(this.validate=b.validate);CKEDITOR.ui.dialog.uiElement.call(this,d,b,c,"span",null,null,function(){var a=CKEDITOR.tools.extend({},b,{id:b.id?b.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),c=[],g=CKEDITOR.tools.getNextId()+"_label",f={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":g};l(a);b["default"]&&(f.checked="checked");"undefined"!=typeof a.inputStyle&&(a.style=a.inputStyle);
 e.checkbox=new CKEDITOR.ui.dialog.uiElement(d,a,c,"input",null,f);c.push(' \x3clabel id\x3d"',g,'" for\x3d"',f.id,'"'+(b.labelStyle?' style\x3d"'+b.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(b.label),"\x3c/label\x3e");return c.join("")})}},radio:function(d,b,c){if(!(3>arguments.length)){a.call(this,b);this._["default"]||(this._["default"]=this._.initValue=b.items[0][1]);b.validate&&(this.validate=b.validate);var e=[],f=this;b.role="radiogroup";b.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,
-d,b,c,function(){for(var a=[],c=[],g=(b.id?b.id:CKEDITOR.tools.getNextId())+"_radio",h=0;h<b.items.length;h++){var k=b.items[h],m=void 0!==k[2]?k[2]:k[0],B=void 0!==k[1]?k[1]:k[0],q=CKEDITOR.tools.getNextId()+"_radio_input",z=q+"_label",q=CKEDITOR.tools.extend({},b,{id:q,title:null,type:null},!0),m=CKEDITOR.tools.extend({},q,{title:m},!0),y={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:B,"aria-labelledby":z},x=[];f._["default"]==B&&(y.checked="checked");l(q);l(m);"undefined"!=typeof q.inputStyle&&
-(q.style=q.inputStyle);q.keyboardFocusable=!0;e.push(new CKEDITOR.ui.dialog.uiElement(d,q,x,"input",null,y));x.push(" ");new CKEDITOR.ui.dialog.uiElement(d,m,x,"label",null,{id:z,"for":y.id},k[0]);a.push(x.join(""))}new CKEDITOR.ui.dialog.hbox(d,e,a,c);return c.join("")});this._.children=e}},button:function(d,b,c){if(arguments.length){"function"==typeof b&&(b=b(d.getParentEditor()));a.call(this,b,{disabled:b.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;d.on("load",function(){var a=this.getElement();
+d,b,c,function(){for(var a=[],c=[],g=(b.id?b.id:CKEDITOR.tools.getNextId())+"_radio",h=0;h<b.items.length;h++){var k=b.items[h],m=void 0!==k[2]?k[2]:k[0],A=void 0!==k[1]?k[1]:k[0],q=CKEDITOR.tools.getNextId()+"_radio_input",y=q+"_label",q=CKEDITOR.tools.extend({},b,{id:q,title:null,type:null},!0),m=CKEDITOR.tools.extend({},q,{title:m},!0),x={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:A,"aria-labelledby":y},C=[];f._["default"]==A&&(x.checked="checked");l(q);l(m);"undefined"!=typeof q.inputStyle&&
+(q.style=q.inputStyle);q.keyboardFocusable=!0;e.push(new CKEDITOR.ui.dialog.uiElement(d,q,C,"input",null,x));C.push(" ");new CKEDITOR.ui.dialog.uiElement(d,m,C,"label",null,{id:y,"for":x.id},k[0]);a.push(C.join(""))}new CKEDITOR.ui.dialog.hbox(d,e,a,c);return c.join("")});this._.children=e}},button:function(d,b,c){if(arguments.length){"function"==typeof b&&(b=b(d.getParentEditor()));a.call(this,b,{disabled:b.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;d.on("load",function(){var a=this.getElement();
 (function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var f=CKEDITOR.tools.extend({},b);delete f.style;var h=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,d,f,c,"a",null,{style:b.style,href:"javascript:void(0)",title:b.label,hidefocus:"true","class":b["class"],role:"button","aria-labelledby":h},'\x3cspan id\x3d"'+h+'" class\x3d"cke_dialog_ui_button"\x3e'+
 CKEDITOR.tools.htmlEncode(b.label)+"\x3c/span\x3e")}},select:function(d,b,c){if(!(3>arguments.length)){var e=a.call(this,b);b.validate&&(this.validate=b.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,d,b,c,function(){var a=CKEDITOR.tools.extend({},b,{id:b.id?b.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),c=[],g=[],f={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};c.push('\x3cdiv class\x3d"cke_dialog_ui_input_',
 b.type,'" role\x3d"presentation"');b.width&&c.push('style\x3d"width:'+b.width+'" ');c.push("\x3e");void 0!==b.size&&(f.size=b.size);void 0!==b.multiple&&(f.multiple=b.multiple);l(a);for(var h=0,k;h<b.items.length&&(k=b.items[h]);h++)g.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==k[1]?k[1]:k[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(k[0]));"undefined"!=typeof a.inputStyle&&(a.style=a.inputStyle);e.select=new CKEDITOR.ui.dialog.uiElement(d,a,c,"select",null,
@@ -522,8 +522,8 @@ b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return h.onChange.apply(this,argu
 e.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(a,b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return h.onChange.apply(this,arguments);a.on("load",function(){for(var a=
 this._.children,b=this,d=0;d<a.length;d++)a[d].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b);return null}}},f,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,f,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<a.$.forms.length?new CKEDITOR.dom.element(a.$.forms[0].elements[0]):
 this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,d,c){a.on("formLoaded",function(){a.getInputElement().on(d,c,a)})},f;for(f in a)if(c=f.match(b))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):e(this,this._.dialog,c[1].toLowerCase(),a[f]);return this},reset:function(){function a(){c.$.open();
-var d="";e.size&&(d=e.size-(CKEDITOR.env.ie?7:0));var A=b.frameId+"_input";c.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(e.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',A,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(e.label),
-'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',A,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<d?d:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join(""));
+var d="";e.size&&(d=e.size-(CKEDITOR.env.ie?7:0));var z=b.frameId+"_input";c.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(e.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',z,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(e.label),
+'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',z,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<d?d:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join(""));
 c.$.close();for(d=0;d<f.length;d++)f[d].enable()}var b=this._,c=CKEDITOR.document.getById(b.frameId).getFrameDocument(),e=b.definition,f=b.buttons,h=this.formLoadedNumber,k=this.formUnloadNumber,l=b.dialog._.editor.lang.dir,m=b.dialog._.editor.langCode;h||(h=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(h);
 CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=
 new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",e);CKEDITOR.dialog.addUIElement("password",e);CKEDITOR.dialog.addUIElement("textarea",c);CKEDITOR.dialog.addUIElement("checkbox",c);CKEDITOR.dialog.addUIElement("radio",c);CKEDITOR.dialog.addUIElement("button",c);CKEDITOR.dialog.addUIElement("select",c);CKEDITOR.dialog.addUIElement("file",c);CKEDITOR.dialog.addUIElement("fileButton",c);CKEDITOR.dialog.addUIElement("html",
@@ -534,37 +534,37 @@ function m(a){var b=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("di
 CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(d.getParent()));c.unselectable();g.unselectable();return{element:b,parts:{dialog:b.getChild(0),title:c,close:g,tabs:d.getChild(2),contents:d.getChild([3,0,0,0]),footer:d.getChild([3,0,1,0])}}}function l(a,
 b,d){this.element=b;this.focusIndex=d;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function k(a){function b(){a.layout()}var d=CKEDITOR.document.getWindow();d.on("resize",b);a.on("hide",function(){d.removeListener("resize",
 b)})}function d(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function b(a){function b(d){var k=a.getSize(),l=CKEDITOR.document.getWindow().getViewPaneSize(),n=d.data.$.screenX,m=d.data.$.screenY,p=n-c.x,q=m-c.y;c={x:n,y:m};g.x+=p;g.y+=q;a.move(g.x+h[3]<f?-h[3]:g.x-h[1]>l.width-k.width-f?l.width-k.width+("rtl"==e.lang.dir?0:h[1]):g.x,g.y+h[0]<f?-h[0]:g.y-h[2]>l.height-k.height-f?l.height-k.height+h[2]:g.y,1);d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mousemove",
-b);CKEDITOR.document.removeListener("mouseup",d);if(CKEDITOR.env.ie6Compat){var a=x.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",d)}}var c=null,g=null,e=a.getParentEditor(),f=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(e){c={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",d);g=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=
-x.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",d)}e.data.preventDefault()},a)}function g(a){function b(d){var m="rtl"==e.lang.dir,p=n.width,q=n.height,r=p+(d.data.$.screenX-l.x)*(m?-1:1)*(a._.moved?1:2),v=q+(d.data.$.screenY-l.y)*(a._.moved?1:2),t=a._.element.getFirst(),t=m&&t.getComputedStyle("right"),w=a.getPosition();w.y+v>k.height&&(v=k.height-w.y);(m?t:w.x)+r>k.width&&(r=k.width-(m?t:w.x));if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)p=Math.max(c.minWidth||
-0,r-f);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||g==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(c.minHeight||0,v-h);a.resize(p,q);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",b);m&&(m.remove(),m=null);if(CKEDITOR.env.ie6Compat){var a=x.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",b)}}var c=a.definition,g=c.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var e=a.getParentEditor(),
+b);CKEDITOR.document.removeListener("mouseup",d);if(CKEDITOR.env.ie6Compat){var a=C.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",d)}}var c=null,g=null,e=a.getParentEditor(),f=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(e){c={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",d);g=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=
+C.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",d)}e.data.preventDefault()},a)}function g(a){function b(d){var m="rtl"==e.lang.dir,p=n.width,q=n.height,t=p+(d.data.$.screenX-l.x)*(m?-1:1)*(a._.moved?1:2),v=q+(d.data.$.screenY-l.y)*(a._.moved?1:2),u=a._.element.getFirst(),u=m&&u.getComputedStyle("right"),w=a.getPosition();w.y+v>k.height&&(v=k.height-w.y);(m?u:w.x)+t>k.width&&(t=k.width-(m?u:w.x));if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)p=Math.max(c.minWidth||
+0,t-f);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||g==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(c.minHeight||0,v-h);a.resize(p,q);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",b);m&&(m.remove(),m=null);if(CKEDITOR.env.ie6Compat){var a=C.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",b)}}var c=a.definition,g=c.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var e=a.getParentEditor(),
 f,h,k,l,n,m,p=CKEDITOR.tools.addFunction(function(c){n=a.getSize();var g=a.parts.contents;g.$.getElementsByTagName("iframe").length&&(m=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%;"\x3e\x3c/div\x3e'),g.append(m));h=n.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));f=n.width-a.parts.contents.getSize("width",1);l={x:c.screenX,y:c.screenY};k=CKEDITOR.document.getWindow().getViewPaneSize();
-CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(g=x.getChild(0).getFrameDocument(),g.on("mousemove",b),g.on("mouseup",d));c.preventDefault&&c.preventDefault()});a.on("load",function(){var b="";g==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+b+" cke_resizer_"+e.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(e.lang.common.resize)+
-'" onmousedown\x3d"CKEDITOR.tools.callFunction('+p+', event )"\x3e'+("ltr"==e.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});e.on("destroy",function(){CKEDITOR.tools.removeFunction(p)})}}function n(a){a.data.preventDefault(1)}function t(a){var b=CKEDITOR.document.getWindow(),d=a.config,c=CKEDITOR.skinName||a.config.skin,g=d.dialog_backgroundCoverColor||("moono-lisa"==c?"black":"white"),c=d.dialog_backgroundCoverOpacity,e=d.baseFloatZIndex,d=CKEDITOR.tools.genKey(g,c,e),f=y[d];f?f.show():
+CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(g=C.getChild(0).getFrameDocument(),g.on("mousemove",b),g.on("mouseup",d));c.preventDefault&&c.preventDefault()});a.on("load",function(){var b="";g==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+b+" cke_resizer_"+e.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(e.lang.common.resize)+
+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+p+', event )"\x3e'+("ltr"==e.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});e.on("destroy",function(){CKEDITOR.tools.removeFunction(p)})}}function n(a){a.data.preventDefault(1)}function u(a){var b=CKEDITOR.document.getWindow(),d=a.config,c=CKEDITOR.skinName||a.config.skin,g=d.dialog_backgroundCoverColor||("moono-lisa"==c?"black":"white"),c=d.dialog_backgroundCoverOpacity,e=d.baseFloatZIndex,d=CKEDITOR.tools.genKey(g,c,e),f=x[d];f?f.show():
 (e=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",e,"; top: 0px; left: 0px; ",CKEDITOR.env.ie6Compat?"":"background-color: "+g,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(g="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+g+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",e.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),e.push("void((function(){"+encodeURIComponent("document.open();("+
-CKEDITOR.tools.fixDomain+")();document.write( '"+g+"' );document.close();")+"})())"),e.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),e.push("\x3c/div\x3e"),f=CKEDITOR.dom.element.createFromHtml(e.join("")),f.setOpacity(void 0!==c?c:.5),f.on("keydown",n),f.on("keypress",n),f.on("keyup",n),f.appendTo(CKEDITOR.document.getBody()),y[d]=f);a.focusManager.add(f);x=f;a=function(){var a=b.getViewPaneSize();
-f.setStyles({width:a.width+"px",height:a.height+"px"})};var h=function(){var a=b.getScrollPosition(),d=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(d){do a=d.getPosition(),d.move(a.x,a.y);while(d=d._.parentDialog)}};z=a;b.on("resize",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||f.focus();if(CKEDITOR.env.ie6Compat){var k=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){k.prevScrollHandler=window.onscroll||function(){};
-window.onscroll=k},0);h()}}function u(a){x&&(a.focusManager.remove(x),a=CKEDITOR.document.getWindow(),x.hide(),a.removeListener("resize",z),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),z=null)}var w=CKEDITOR.tools.cssLength,p='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+
+CKEDITOR.tools.fixDomain+")();document.write( '"+g+"' );document.close();")+"})())"),e.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),e.push("\x3c/div\x3e"),f=CKEDITOR.dom.element.createFromHtml(e.join("")),f.setOpacity(void 0!==c?c:.5),f.on("keydown",n),f.on("keypress",n),f.on("keyup",n),f.appendTo(CKEDITOR.document.getBody()),x[d]=f);a.focusManager.add(f);C=f;a=function(){var a=b.getViewPaneSize();
+f.setStyles({width:a.width+"px",height:a.height+"px"})};var h=function(){var a=b.getScrollPosition(),d=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(d){do a=d.getPosition(),d.move(a.x,a.y);while(d=d._.parentDialog)}};y=a;b.on("resize",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||f.focus();if(CKEDITOR.env.ie6Compat){var k=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){k.prevScrollHandler=window.onscroll||function(){};
+window.onscroll=k},0);h()}}function r(a){C&&(a.focusManager.remove(C),a=CKEDITOR.document.getWindow(),C.hide(),a.removeListener("resize",y),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),y=null)}var w=CKEDITOR.tools.cssLength,p='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+
 CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"position:absolute" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e';
-CKEDITOR.dialog=function(d,c){function k(){var a=y._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,d=0;d<b;d++)a[d].focusIndex=d}function l(a){var b=y._.focusList;a=a||0;if(!(1>b.length)){var d=y._.currentFocusIndex;y._.tabBarMode&&0>a&&(d=0);try{b[d].getInputElement().$.blur()}catch(c){}var g=d,e=1<y._.pageCount;do{g+=a;if(e&&!y._.tabBarMode&&(g==b.length||-1==g)){y._.tabBarMode=!0;y._.tabs[y._.currentTabId][0].focus();
-y._.currentFocusIndex=-1;return}g=(g+b.length)%b.length;if(g==d)break}while(a&&!b[g].isFocusable());b[g].focus();"text"==b[g].type&&b[g].select()}}function n(b){if(y==CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),g="rtl"==d.lang.dir,f=[37,38,39,40];K=z=0;if(9==c||c==CKEDITOR.SHIFT+9)l(c==CKEDITOR.SHIFT+9?-1:1),K=1;else if(c==CKEDITOR.ALT+121&&!y._.tabBarMode&&1<y.getPageCount())y._.tabBarMode=!0,y._.tabs[y._.currentTabId][0].focus(),y._.currentFocusIndex=-1,K=1;else if(-1!=CKEDITOR.tools.indexOf(f,
-c)&&y._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([g?39:37,38],c)?a.call(y):e.call(y),y.selectPage(c),y._.tabs[c][0].focus(),K=1;else if(13!=c&&32!=c||!y._.tabBarMode)if(13==c)c=b.data.getTarget(),c.is("a","button","select","textarea")||c.is("input")&&"button"==c.$.type||((c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),K=1),z=1;else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),z=1;else return;else this.selectPage(this._.currentTabId),
-this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1),K=1;p(b)}}function p(a){K?a.data.preventDefault(1):z&&a.data.stopPropagation()}var v=CKEDITOR.dialog._.dialogDefinitions[c],t=CKEDITOR.tools.clone(r),w=d.config.dialog_buttonsOrder||"OS",A=d.lang.dir,B={},K,z;("OS"==w&&CKEDITOR.env.mac||"rtl"==w&&"ltr"==A||"ltr"==w&&"rtl"==A)&&t.buttons.reverse();v=CKEDITOR.tools.extend(v(d),t);v=CKEDITOR.tools.clone(v);v=new q(this,v);t=m(d);this._={editor:d,element:t.element,name:c,contentSize:{width:0,height:0},
-size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=t.parts;CKEDITOR.tools.setTimeout(function(){d.fire("ariaWidget",this.parts.contents)},0,this);t={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};t["rtl"==A?"right":"left"]=0;this.parts.dialog.setStyles(t);CKEDITOR.event.call(this);this.definition=v=CKEDITOR.fire("dialogDefinition",
-{name:c,definition:v},d).definition;if(!("removeDialogTabs"in d._)&&d.config.removeDialogTabs){t=d.config.removeDialogTabs.split(";");for(A=0;A<t.length;A++)if(w=t[A].split(":"),2==w.length){var u=w[0];B[u]||(B[u]=[]);B[u].push(w[1])}d._.removeDialogTabs=B}if(d._.removeDialogTabs&&(B=d._.removeDialogTabs[c]))for(A=0;A<B.length;A++)v.removeContents(B[A]);if(v.onLoad)this.on("load",v.onLoad);if(v.onShow)this.on("show",v.onShow);if(v.onHide)this.on("hide",v.onHide);if(v.onOk)this.on("ok",function(a){d.fire("saveSnapshot");
-setTimeout(function(){d.fire("saveSnapshot")},0);!1===v.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(v.onCancel)this.on("cancel",function(a){!1===v.onCancel.call(this,a)&&(a.data.hide=!1)});var y=this,x=function(a){var b=y._.contents,d=!1,c;for(c in b)for(var g in b[c])if(d=a.call(this,b[c][g]))return};this.on("ok",function(a){x(function(b){if(b.validate){var d=b.validate(this),c="string"==typeof d||!1===d;c&&(a.data.hide=!1,a.stop());f.call(b,!c,"string"==typeof d?
-d:void 0);return c}})},this,null,0);this.on("cancel",function(a){x(function(b){if(b.isChanged())return d.config.dialog_noConfirmCancel||confirm(d.lang.common.confirmCancel)||(a.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=l;var D=this._.element;d.focusManager.add(D,1);this.on("show",function(){D.on("keydown",n,this);if(CKEDITOR.env.gecko)D.on("keypress",p,this)});this.on("hide",
-function(){D.removeListener("keydown",n);CKEDITOR.env.gecko&&D.removeListener("keypress",p);x(function(a){h.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",n,this,null,0)});this.on("show",function(){k();var a=1<y._.pageCount;d.config.dialog_startupFocusTab&&a?(y._.tabBarMode=!0,y._.tabs[y._.currentTabId][0].focus(),y._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length-1,v.onFocus?
-(a=v.onFocus.call(this))&&a.focus():l(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);b(this);g(this);(new CKEDITOR.dom.text(v.title,CKEDITOR.document)).appendTo(this.parts.title);for(A=0;A<v.contents.length;A++)(B=v.contents[A])&&this.addPage(B);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),
-this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1)),a.data.preventDefault())},this);A=[];B=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:v.buttons},A).getChild();this.parts.footer.setHtml(A.join(""));for(A=0;A<B.length;A++)this._.buttons[B[A].id]=B[A]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){this._.contentSize&&this._.contentSize.width==
+CKEDITOR.dialog=function(d,c){function k(){var a=x._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,d=0;d<b;d++)a[d].focusIndex=d}function l(a){var b=x._.focusList;a=a||0;if(!(1>b.length)){var d=x._.currentFocusIndex;x._.tabBarMode&&0>a&&(d=0);try{b[d].getInputElement().$.blur()}catch(c){}var g=d,e=1<x._.pageCount;do{g+=a;if(e&&!x._.tabBarMode&&(g==b.length||-1==g)){x._.tabBarMode=!0;x._.tabs[x._.currentTabId][0].focus();
+x._.currentFocusIndex=-1;return}g=(g+b.length)%b.length;if(g==d)break}while(a&&!b[g].isFocusable());b[g].focus();"text"==b[g].type&&b[g].select()}}function n(b){if(x==CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),g="rtl"==d.lang.dir,f=[37,38,39,40];K=y=0;if(9==c||c==CKEDITOR.SHIFT+9)l(c==CKEDITOR.SHIFT+9?-1:1),K=1;else if(c==CKEDITOR.ALT+121&&!x._.tabBarMode&&1<x.getPageCount())x._.tabBarMode=!0,x._.tabs[x._.currentTabId][0].focus(),x._.currentFocusIndex=-1,K=1;else if(-1!=CKEDITOR.tools.indexOf(f,
+c)&&x._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([g?39:37,38],c)?a.call(x):e.call(x),x.selectPage(c),x._.tabs[c][0].focus(),K=1;else if(13!=c&&32!=c||!x._.tabBarMode)if(13==c)c=b.data.getTarget(),c.is("a","button","select","textarea")||c.is("input")&&"button"==c.$.type||((c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),K=1),y=1;else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),y=1;else return;else this.selectPage(this._.currentTabId),
+this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1),K=1;p(b)}}function p(a){K?a.data.preventDefault(1):y&&a.data.stopPropagation()}var v=CKEDITOR.dialog._.dialogDefinitions[c],u=CKEDITOR.tools.clone(t),w=d.config.dialog_buttonsOrder||"OS",z=d.lang.dir,A={},K,y;("OS"==w&&CKEDITOR.env.mac||"rtl"==w&&"ltr"==z||"ltr"==w&&"rtl"==z)&&u.buttons.reverse();v=CKEDITOR.tools.extend(v(d),u);v=CKEDITOR.tools.clone(v);v=new q(this,v);u=m(d);this._={editor:d,element:u.element,name:c,contentSize:{width:0,height:0},
+size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=u.parts;CKEDITOR.tools.setTimeout(function(){d.fire("ariaWidget",this.parts.contents)},0,this);u={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};u["rtl"==z?"right":"left"]=0;this.parts.dialog.setStyles(u);CKEDITOR.event.call(this);this.definition=v=CKEDITOR.fire("dialogDefinition",
+{name:c,definition:v},d).definition;if(!("removeDialogTabs"in d._)&&d.config.removeDialogTabs){u=d.config.removeDialogTabs.split(";");for(z=0;z<u.length;z++)if(w=u[z].split(":"),2==w.length){var r=w[0];A[r]||(A[r]=[]);A[r].push(w[1])}d._.removeDialogTabs=A}if(d._.removeDialogTabs&&(A=d._.removeDialogTabs[c]))for(z=0;z<A.length;z++)v.removeContents(A[z]);if(v.onLoad)this.on("load",v.onLoad);if(v.onShow)this.on("show",v.onShow);if(v.onHide)this.on("hide",v.onHide);if(v.onOk)this.on("ok",function(a){d.fire("saveSnapshot");
+setTimeout(function(){d.fire("saveSnapshot")},0);!1===v.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(v.onCancel)this.on("cancel",function(a){!1===v.onCancel.call(this,a)&&(a.data.hide=!1)});var x=this,B=function(a){var b=x._.contents,d=!1,c;for(c in b)for(var g in b[c])if(d=a.call(this,b[c][g]))return};this.on("ok",function(a){B(function(b){if(b.validate){var d=b.validate(this),c="string"==typeof d||!1===d;c&&(a.data.hide=!1,a.stop());f.call(b,!c,"string"==typeof d?
+d:void 0);return c}})},this,null,0);this.on("cancel",function(a){B(function(b){if(b.isChanged())return d.config.dialog_noConfirmCancel||confirm(d.lang.common.confirmCancel)||(a.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=l;var C=this._.element;d.focusManager.add(C,1);this.on("show",function(){C.on("keydown",n,this);if(CKEDITOR.env.gecko)C.on("keypress",p,this)});this.on("hide",
+function(){C.removeListener("keydown",n);CKEDITOR.env.gecko&&C.removeListener("keypress",p);B(function(a){h.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",n,this,null,0)});this.on("show",function(){k();var a=1<x._.pageCount;d.config.dialog_startupFocusTab&&a?(x._.tabBarMode=!0,x._.tabs[x._.currentTabId][0].focus(),x._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length-1,v.onFocus?
+(a=v.onFocus.call(this))&&a.focus():l(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);b(this);g(this);(new CKEDITOR.dom.text(v.title,CKEDITOR.document)).appendTo(this.parts.title);for(z=0;z<v.contents.length;z++)(A=v.contents[z])&&this.addPage(A);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),
+this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,l(1)),a.data.preventDefault())},this);z=[];A=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:v.buttons},z).getChild();this.parts.footer.setHtml(z.join(""));for(z=0;z<A.length;z++)this._.buttons[A[z].id]=A[z]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){this._.contentSize&&this._.contentSize.width==
 a&&this._.contentSize.height==b||(CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b})}}(),getSize:function(){var a=this._.element.getFirst();
 return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,d){var c=this._.element.getFirst(),g="rtl"==this._.editor.lang.dir,e="fixed"==c.getComputedStyle("position");CKEDITOR.env.ie&&c.setStyle("zoom","100%");e&&this._.position&&this._.position.x==a&&this._.position.y==b||(this._.position={x:a,y:b},e||(e=CKEDITOR.document.getWindow().getScrollPosition(),a+=e.x,b+=e.y),g&&(e=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-e.width-a),b={top:(0<b?b:0)+"px"},
 b[g?"right":"left"]=(0<a?a:0)+"px",c.setStyles(b),d&&(this._.moved=1))},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;a.getParent()&&a.getParent().equals(CKEDITOR.document.getBody())?a.setStyle("display","block"):a.appendTo(CKEDITOR.document.getBody());this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);
-null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,t(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);
-a.on("keydown",C);a.on("keyup",G);this._.hasFocus=!1;for(var d in b.contents)if(b.contents[d]){var a=b.contents[d],c=this._.tabs[a.id],g=a.requiredContent,e=0;if(c){for(var f in this._.contents[a.id]){var h=this._.contents[a.id][f];"hbox"!=h.type&&"vbox"!=h.type&&h.getInputElement()&&(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),e++))}!e||g&&!this._.editor.activeFilter.check(g)?c[0].addClass("cke_dialog_tab_disabled"):c[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();
+null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,u(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);
+a.on("keydown",D);a.on("keyup",G);this._.hasFocus=!1;for(var d in b.contents)if(b.contents[d]){var a=b.contents[d],c=this._.tabs[a.id],g=a.requiredContent,e=0;if(c){for(var f in this._.contents[a.id]){var h=this._.contents[a.id][f];"hbox"!=h.type&&"vbox"!=h.type&&h.getInputElement()&&(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),e++))}!e||g&&!this._.editor.activeFilter.check(g)?c[0].addClass("cke_dialog_tab_disabled"):c[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();
 k(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),d=CKEDITOR.document.getWindow().getViewPaneSize(),c=(d.width-b.width)/2,g=(d.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<g?g:0)>d.height||
 b.width+(0<c?c:0)>d.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:c,this._.moved?this._.position.y:g)},foreach:function(a){for(var b in this._.contents)for(var d in this._.contents[b])a.call(this,this._.contents[b][d]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},
 commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(I(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();
-if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else u(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",C);a.removeListener("keyup",G);var d=this._.editor;d.focus();setTimeout(function(){d.focusManager.unlock();CKEDITOR.env.iOS&&d.window.focus()},0)}delete this._.parentDialog;
+if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else r(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",D);a.removeListener("keyup",G);var d=this._.editor;d.focus();setTimeout(function(){d.focusManager.unlock();CKEDITOR.env.iOS&&d.window.focus()},0)}delete this._.parentDialog;
 this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],d=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",c=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),g=this._.contents[a.id]={},e=c.getChild(),
 f=0;c=e.shift();)c.notAllowed||"hbox"==c.type||"vbox"==c.type||f++,g[c.id]=c,"function"==typeof c.getChild&&e.push.apply(e,c.getChild());f||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");c=CKEDITOR.env;g="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();d=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",d,a.hidden?' style\x3d"display:none"':"",' id\x3d"',g,'"',c.gecko&&!c.hc?"":' href\x3d"javascript:void(0)"',
 ' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].join(""));b.setAttribute("aria-labelledby",g);this._.tabs[a.id]=[d,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=d;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);d.unselectable();this.parts.tabs.append(d);a.accessKey&&(F(this,this,"CTRL+"+a.accessKey,N,H),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&
@@ -575,13 +575,13 @@ getSelectedElement:function(){return this.getParentEditor().getSelection().getSe
 styles:{"float":"rtl"==b?"right":"left"}};d.styles["margin-"+("rtl"==b?"left":"right")]="8px";this.parts.spinner=CKEDITOR.document.createElement("div",d);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){this._.dialogDefinitions[a]&&
 "function"!=typeof b||(this._.dialogDefinitions[a]=b)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,d){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp("(?:^|;)"+b+":"+d+"(?:$|;)","i")))},okButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",
 {hide:!0}).hide&&a.hide()}},b,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(d){return a(d,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,b){b=b||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},b,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(d){return a(d,
-b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var r={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},v=function(a,b,d){for(var c=0,g;g=a[c];c++)if(g.id==b||d&&g[d]&&(g=v(g[d],
-b,d)))return g;return null},A=function(a,b,d,c,g){if(d){for(var e=0,f;f=a[e];e++){if(f.id==d)return a.splice(e,0,b),b;if(c&&f[c]&&(f=A(f[c],b,d,c,!0)))return f}if(g)return null}a.push(b);return b},B=function(a,b,d){for(var c=0,g;g=a[c];c++){if(g.id==b)return a.splice(c,1);if(d&&g[d]&&(g=B(g[d],b,d)))return g}return null},q=function(a,b){this.dialog=a;for(var c=b.contents,g=0,e;e=c[g];g++)c[g]=e&&new d(a,e);CKEDITOR.tools.extend(this,b)};q.prototype={getContents:function(a){return v(this.contents,
-a)},getButton:function(a){return v(this.buttons,a)},addContents:function(a,b){return A(this.contents,a,b)},addButton:function(a,b){return A(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};d.prototype={get:function(a){return v(this.elements,a,"children")},add:function(a,b){return A(this.elements,a,b,"children")},remove:function(a){B(this.elements,a,"children")}};var z,y={},x,D={},C=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=
-a.data.$.altKey,c=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(b=D[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},G=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,c=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(b=D[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),
-a.data.preventDefault()))},F=function(a,b,d,c,g){(D[d]||(D[d]=[])).push({uiElement:a,dialog:b,key:d,keyup:g||a.accessKeyUp,keydown:c||a.accessKeyDown})},I=function(a){for(var b in D){for(var d=D[b],c=d.length-1;0<=c;c--)d[c].dialog!=a&&d[c].uiElement!=a||d.splice(c,1);0===d.length&&delete D[b]}},H=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},N=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,d,c,g,e,f){if(!(4>arguments.length)){var h=(c.call?c(b):c)||"div",
-k=["\x3c",h," "],l=(g&&g.call?g(b):g)||{},n=(e&&e.call?e(b):e)||{},m=(f&&f.call?f.call(this,a,b):f)||"",p=this.domId=n.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(l.display="none",this.notAllowed=!0);n.id=p;var q={};b.type&&(q["cke_dialog_ui_"+b.type]=1);b.className&&(q[b.className]=1);b.disabled&&(q.cke_disabled=1);for(var r=n["class"]&&n["class"].split?n["class"].split(" "):[],p=0;p<r.length;p++)r[p]&&(q[r[p]]=1);r=[];for(p in q)r.push(p);
-n["class"]=r.join(" ");b.title&&(n.title=b.title);q=(b.style||"").split(";");b.align&&(r=b.align,l["margin-left"]="left"==r?0:"auto",l["margin-right"]="right"==r?0:"auto");for(p in l)q.push(p+":"+l[p]);b.hidden&&q.push("display:none");for(p=q.length-1;0<=p;p--)""===q[p]&&q.splice(p,1);0<q.length&&(n.style=(n.style?n.style+"; ":"")+q.join("; "));for(p in n)k.push(p+'\x3d"'+CKEDITOR.tools.htmlEncode(n[p])+'" ');k.push("\x3e",m,"\x3c/",h,"\x3e");d.push(k.join(""));(this._||(this._={})).dialog=a;"boolean"==
+b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var t={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},v=function(a,b,d){for(var c=0,g;g=a[c];c++)if(g.id==b||d&&g[d]&&(g=v(g[d],
+b,d)))return g;return null},z=function(a,b,d,c,g){if(d){for(var e=0,f;f=a[e];e++){if(f.id==d)return a.splice(e,0,b),b;if(c&&f[c]&&(f=z(f[c],b,d,c,!0)))return f}if(g)return null}a.push(b);return b},A=function(a,b,d){for(var c=0,g;g=a[c];c++){if(g.id==b)return a.splice(c,1);if(d&&g[d]&&(g=A(g[d],b,d)))return g}return null},q=function(a,b){this.dialog=a;for(var c=b.contents,g=0,e;e=c[g];g++)c[g]=e&&new d(a,e);CKEDITOR.tools.extend(this,b)};q.prototype={getContents:function(a){return v(this.contents,
+a)},getButton:function(a){return v(this.buttons,a)},addContents:function(a,b){return z(this.contents,a,b)},addButton:function(a,b){return z(this.buttons,a,b)},removeContents:function(a){A(this.contents,a)},removeButton:function(a){A(this.buttons,a)}};d.prototype={get:function(a){return v(this.elements,a,"children")},add:function(a,b){return z(this.elements,a,b,"children")},remove:function(a){A(this.elements,a,"children")}};var y,x={},C,B={},D=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=
+a.data.$.altKey,c=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(b=B[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},G=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,c=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(b=B[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),
+a.data.preventDefault()))},F=function(a,b,d,c,g){(B[d]||(B[d]=[])).push({uiElement:a,dialog:b,key:d,keyup:g||a.accessKeyUp,keydown:c||a.accessKeyDown})},I=function(a){for(var b in B){for(var d=B[b],c=d.length-1;0<=c;c--)d[c].dialog!=a&&d[c].uiElement!=a||d.splice(c,1);0===d.length&&delete B[b]}},H=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},N=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,d,c,g,e,f){if(!(4>arguments.length)){var h=(c.call?c(b):c)||"div",
+k=["\x3c",h," "],l=(g&&g.call?g(b):g)||{},n=(e&&e.call?e(b):e)||{},m=(f&&f.call?f.call(this,a,b):f)||"",p=this.domId=n.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(l.display="none",this.notAllowed=!0);n.id=p;var q={};b.type&&(q["cke_dialog_ui_"+b.type]=1);b.className&&(q[b.className]=1);b.disabled&&(q.cke_disabled=1);for(var t=n["class"]&&n["class"].split?n["class"].split(" "):[],p=0;p<t.length;p++)t[p]&&(q[t[p]]=1);t=[];for(p in q)t.push(p);
+n["class"]=t.join(" ");b.title&&(n.title=b.title);q=(b.style||"").split(";");b.align&&(t=b.align,l["margin-left"]="left"==t?0:"auto",l["margin-right"]="right"==t?0:"auto");for(p in l)q.push(p+":"+l[p]);b.hidden&&q.push("display:none");for(p=q.length-1;0<=p;p--)""===q[p]&&q.splice(p,1);0<q.length&&(n.style=(n.style?n.style+"; ":"")+q.join("; "));for(p in n)k.push(p+'\x3d"'+CKEDITOR.tools.htmlEncode(n[p])+'" ');k.push("\x3e",m,"\x3c/",h,"\x3e");d.push(k.join(""));(this._||(this._={})).dialog=a;"boolean"==
 typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(d){a.call(this,b.setValue.call(this,d))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);this.registerEvents(b);
 this.accessKeyUp&&this.accessKeyDown&&b.accessKey&&F(this,a,"CTRL+"+b.accessKey);var v=this;a.on("load",function(){var b=v.getInputElement();if(b){var d=v.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;v.fire("focus");d&&this.addClass(d)});b.on("blur",function(){v.fire("blur");d&&this.removeClass(d)})}});CKEDITOR.tools.extend(this,b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=
 a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=v.focusIndex}))}},hbox:function(a,b,d,c,g){if(!(4>arguments.length)){this._||(this._={});var e=this._.children=b,f=g&&g.widths||null,h=g&&g.height||null,k,l={role:"presentation"};g&&g.align&&(l.align=g.align);CKEDITOR.ui.dialog.uiElement.call(this,a,g||{type:"hbox"},c,"table",{},l,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(k=0;k<d.length;k++){var b="cke_dialog_ui_hbox_child",c=[];0===k&&
@@ -596,14 +596,14 @@ this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialo
 CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,d=/^\d*(?:\.\d+)?$/,c=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,g=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,e=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():
 a[0],d,c=CKEDITOR.VALIDATE_AND,g=[],e;for(e=0;e<a.length;e++)if("function"==typeof a[e])g.push(a[e]);else break;e<a.length&&"string"==typeof a[e]&&(d=a[e],e++);e<a.length&&"number"==typeof a[e]&&(c=a[e]);var f=c==CKEDITOR.VALIDATE_AND?!0:!1;for(e=0;e<g.length;e++)f=c==CKEDITOR.VALIDATE_AND?f&&g[e](b):f||g[e](b);return f?!0:d}},regex:function(a,b){return function(d){d=this&&this.getValue?this.getValue():d;return a.test(d)?!0:b}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,
 a)},number:function(a){return this.regex(d,a)},cssLength:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return c.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",
-function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var d in y)y[d].remove();y={}}a=a.editor._.storedDialogs;for(var c in a)a[c].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var d=null,c=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&t(this);if("function"==typeof c)d=this._.storedDialogs||(this._.storedDialogs={}),d=d[a]||(d[a]=new CKEDITOR.dialog(this,a)),b&&b.call(d,
-d),d.show();else{if("failed"==c)throw u(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof c&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return d}})}(),CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){a.on("doubleclick",function(e){e.data.dialog&&
+function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var d in x)x[d].remove();x={}}a=a.editor._.storedDialogs;for(var c in a)a[c].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var d=null,c=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&u(this);if("function"==typeof c)d=this._.storedDialogs||(this._.storedDialogs={}),d=d[a]||(d[a]=new CKEDITOR.dialog(this,a)),b&&b.call(d,
+d),d.show();else{if("failed"==c)throw r(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof c&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return d}})}(),CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){a.on("doubleclick",function(e){e.data.dialog&&
 a.openDialog(e.data.dialog)},null,null,999)}}),function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(a){var e=
 this;a.addCommand("a11yHelp",{exec:function(){var c=a.langCode,c=e.availableLangs[c]?c:e.availableLangs[c.replace(/-.*/,"")]?c.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e.path+"dialogs/lang/"+c+".js"),function(){a.lang.a11yhelp=e.langEntries[c];a.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});a.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");a.on("ariaEditorHelpLabel",function(c){c.data.label=
 a.lang.common.editorHelp})}})}(),CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var e=a.addCommand("about",new CKEDITOR.dialogCommand("about"));e.modes={wysiwyg:1,source:1};e.canUndo=!1;e.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),"use strict",function(){function a(a){function c(){m=a.document;l=m[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();k=CKEDITOR.env.quirks?
-m.getBody():m.getDocumentElement();var b=CKEDITOR.env.quirks?k:k.findOne("body");b&&(b.setStyle("height","auto"),b.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));d=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",m)}function f(){t&&k.setStyle("overflow-y","hidden");var c=a.window.getViewPaneSize().height,f;l.append(d);f=d.getDocumentPosition(m).y+d.$.offsetHeight;
-d.remove();f+=b;f=Math.max(f,g);f=Math.min(f,n);f!=c&&h!=f&&(f=a.fire("autoGrow",{currentHeight:c,newHeight:f}).newHeight,a.resize(a.container.getStyle("width"),f,!0),h=f);t||(f<n&&k.$.scrollHeight>k.$.clientHeight?k.setStyle("overflow-y","hidden"):k.removeStyle("overflow-y"))}var h,m,l,k,d,b=a.config.autoGrow_bottomSpace||0,g=void 0!==a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200,n=a.config.autoGrow_maxHeight||Infinity,t=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:f,
-modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var u={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},w;for(w in u)a.on(w,function(b){"wysiwyg"==b.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?h=null:(f(),t||f())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?k.removeStyle("overflow-y"):f())});a.on("contentDom",c);c();a.config.autoGrow_onStartup&&
+m.getBody():m.getDocumentElement();var b=CKEDITOR.env.quirks?k:k.findOne("body");b&&(b.setStyle("height","auto"),b.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));d=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",m)}function f(){u&&k.setStyle("overflow-y","hidden");var c=a.window.getViewPaneSize().height,f;l.append(d);f=d.getDocumentPosition(m).y+d.$.offsetHeight;
+d.remove();f+=b;f=Math.max(f,g);f=Math.min(f,n);f!=c&&h!=f&&(f=a.fire("autoGrow",{currentHeight:c,newHeight:f}).newHeight,a.resize(a.container.getStyle("width"),f,!0),h=f);u||(f<n&&k.$.scrollHeight>k.$.clientHeight?k.setStyle("overflow-y","hidden"):k.removeStyle("overflow-y"))}var h,m,l,k,d,b=a.config.autoGrow_bottomSpace||0,g=void 0!==a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200,n=a.config.autoGrow_maxHeight||Infinity,u=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:f,
+modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var r={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},w;for(w in r)a.on(w,function(b){"wysiwyg"==b.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?h=null:(f(),u||f())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?k.removeStyle("overflow-y"):f())});a.on("contentDom",c);c();a.config.autoGrow_onStartup&&
 a.editable().isVisible()&&a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(e){if(e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)e.on("instanceReady",function(){e.editable().isInline()?e.ui.space("contents").setStyle("height","auto"):a(e)})}})}(),CKEDITOR.plugins.add("basicstyles",{init:function(a){var e=0,c=function(c,h,d,b){if(b){b=new CKEDITOR.style(b);var g=f[d];g.unshift(b);a.attachStyleStateChange(b,function(b){!a.readOnly&&a.getCommand(d).setState(b)});a.addCommand(d,new CKEDITOR.styleCommand(b,
 {contentForms:g}));a.ui.addButton&&a.ui.addButton(c,{label:h,command:d,toolbar:"basicstyles,"+(e+=10)})}},f={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},h=
 a.config,m=a.lang.basicstyles;c("Bold",m.bold,"bold",h.coreStyles_bold);c("Italic",m.italic,"italic",h.coreStyles_italic);c("Underline",m.underline,"underline",h.coreStyles_underline);c("Strike",m.strike,"strike",h.coreStyles_strike);c("Subscript",m.subscript,"subscript",h.coreStyles_subscript);c("Superscript",m.superscript,"superscript",h.coreStyles_superscript);a.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}}),CKEDITOR.config.coreStyles_bold=
@@ -614,88 +614,88 @@ h.shift(),"blockquote"==c.getName()){for(k=new CKEDITOR.dom.documentFragment(a.d
 (k.push(l),CKEDITOR.dom.element.setMarker(d,l,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);c=[];l=[];for(d={};0<k.length;)b=k.shift(),h=b.getParent(),b.getPrevious()?b.getNext()?(b.breakParent(b.getParent()),l.push(b.getNext())):b.remove().insertAfter(h):b.remove().insertBefore(h),h.getCustomData("blockquote_processed")||(l.push(h),CKEDITOR.dom.element.setMarker(d,h,"blockquote_processed",!0)),c.push(b);CKEDITOR.dom.element.clearAllMarkers(d);for(k=l.length-1;0<=k;k--){h=l[k];
 a:{d=h;for(var b=0,g=d.getChildCount(),n=void 0;b<g&&(n=d.getChild(b));b++)if(n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary()){d=!1;break a}d=!0}d&&h.remove()}if(a.config.enterMode==CKEDITOR.ENTER_BR)for(h=!0;c.length;)if(b=c.shift(),"div"==b.getName()){k=new CKEDITOR.dom.documentFragment(a.document);!h||!b.getPrevious()||b.getPrevious().type==CKEDITOR.NODE_ELEMENT&&b.getPrevious().isBlockBoundary()||k.append(a.document.createElement("br"));for(h=b.getNext()&&!(b.getNext().type==CKEDITOR.NODE_ELEMENT&&
 b.getNext().isBlockBoundary());b.getFirst();)b.getFirst().remove().appendTo(k);h&&k.append(a.document.createElement("br"));k.replace(b);h=!1}}f.selectBookmarks(m);a.focus()}},refresh:function(a,c){this.setState(a.elementPath(c.block||c.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(e){e.blockless||(e.addCommand("blockquote",a),e.ui.addButton&&
-e.ui.addButton("Blockquote",{label:e.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})}(),"use strict",CKEDITOR.plugins.add("notification",{init:function(a){function e(a){var e=new CKEDITOR.dom.element("div");e.setStyles({position:"fixed","margin-left":"-9999px"});e.setAttributes({"aria-live":"assertive","aria-atomic":"true"});e.setText(a);CKEDITOR.document.getBody().append(e);setTimeout(function(){e.remove()},100)}a._.notificationArea=new ka(a);a.showNotification=function(c,
-e,h){var m,l;"progress"==e?m=h:l=h;c=new CKEDITOR.plugins.notification(a,{message:c,type:e,progress:m,duration:l});c.show();return c};a.on("key",function(c){if(27==c.data.keyCode){var f=a._.notificationArea.notifications;f.length&&(e(a.lang.notification.closed),f[f.length-1].hide(),c.cancel())}})}}),ja.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),this._hideAfterTimeout())},update:function(a){var e=!0;!1===this.editor.fire("notificationUpdate",
-{notification:this,options:a})&&(e=!1);var c=this.element,f=c.findOne(".cke_notification_message"),h=c.findOne(".cke_notification_progress"),m=a.type;c.removeAttribute("role");a.progress&&"progress"!=this.type&&(m="progress");m&&(c.removeClass(this._getClass()),c.removeAttribute("aria-label"),this.type=m,c.addClass(this._getClass()),c.setAttribute("aria-label",this.type),"progress"!=this.type||h?"progress"!=this.type&&h&&h.remove():(h=this._createProgressElement(),h.insertBefore(f)));void 0!==a.message&&
-(this.message=a.message,f.setHtml(this.message));void 0!==a.progress&&(this.progress=a.progress,h&&h.setStyle("width",this._getPercentageProgress()));e&&a.important&&(c.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=a.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=CKEDITOR.tools.indexOf(this.area.notifications,this)},_createElement:function(){var a=
-this,e,c,f=this.editor.lang.common.close;e=new CKEDITOR.dom.element("div");e.addClass("cke_notification");e.addClass(this._getClass());e.setAttributes({id:this.id,role:"alert","aria-label":this.type});"progress"==this.type&&e.append(this._createProgressElement());c=new CKEDITOR.dom.element("p");c.addClass("cke_notification_message");c.setHtml(this.message);e.append(c);c=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notification_close" href\x3d"javascript:void(0)" title\x3d"'+f+'" role\x3d"button" tabindex\x3d"-1"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e');
-e.append(c);c.on("click",function(){a.editor.focus();a.hide()});return e},_getClass:function(){return"progress"==this.type?"cke_notification_info":"cke_notification_"+this.type},_createProgressElement:function(){var a=new CKEDITOR.dom.element("span");a.addClass("cke_notification_progress");a.setStyle("width",this._getPercentageProgress());return a},_getPercentageProgress:function(){return Math.round(100*(this.progress||0))+"%"},_hideAfterTimeout:function(){var a=this,e;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId);
-if("number"==typeof this.duration)e=this.duration;else if("info"==this.type||"success"==this.type)e="number"==typeof this.editor.config.notification_duration?this.editor.config.notification_duration:5E3;e&&(a._hideTimeoutId=setTimeout(function(){a.hide()},e))}},ka.prototype={add:function(a){this.notifications.push(a);this.element.append(a.element);1==this.element.getChildCount()&&(CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(a){var e=CKEDITOR.tools.indexOf(this.notifications,
-a);0>e||(this.notifications.splice(e,1),a.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var a=this.editor,e=a.config,c=new CKEDITOR.dom.element("div");c.addClass("cke_notifications_area");c.setAttribute("id","cke_notifications_area_"+a.name);c.setStyle("z-index",e.baseFloatZIndex-2);return c},_attachListeners:function(){var a=CKEDITOR.document.getWindow(),e=this.editor;a.on("scroll",this._uiBuffer.input);a.on("resize",this._uiBuffer.input);
-e.on("change",this._changeBuffer.input);e.on("floatingSpaceLayout",this._layout,this,null,20);e.on("blur",this._layout,this,null,20)},_removeListeners:function(){var a=CKEDITOR.document.getWindow(),e=this.editor;a.removeListener("scroll",this._uiBuffer.input);a.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function a(){e.setStyle("left",
-p(r+f.width-b-g))}var e=this.element,c=this.editor,f=c.ui.contentsElement.getClientRect(),h=c.ui.contentsElement.getDocumentPosition(),m,l,k=e.getClientRect(),d,b=this._notificationWidth,g=this._notificationMargin;d=CKEDITOR.document.getWindow();var n=d.getScrollPosition(),t=d.getViewPaneSize(),u=CKEDITOR.document.getBody(),w=u.getDocumentPosition(),p=CKEDITOR.tools.cssLength;b&&g||(d=this.element.getChild(0),b=this._notificationWidth=d.getClientRect().width,g=this._notificationMargin=parseInt(d.getComputedStyle("margin-left"),
-10)+parseInt(d.getComputedStyle("margin-right"),10));c.toolbar&&(m=c.ui.space("top"),l=m.getClientRect());m&&m.isVisible()&&l.bottom>f.top&&l.bottom<f.bottom-k.height?e.setStyles({position:"fixed",top:p(l.bottom)}):0<f.top?e.setStyles({position:"absolute",top:p(h.y)}):h.y+f.height-k.height>n.y?e.setStyles({position:"fixed",top:0}):e.setStyles({position:"absolute",top:p(h.y+f.height-k.height)});var r="fixed"==e.getStyle("position")?f.left:"static"!=u.getComputedStyle("position")?h.x-w.x:h.x;f.width<
-b+g?h.x+b+g>n.x+t.width?a():e.setStyle("left",p(r)):h.x+b+g>n.x+t.width?e.setStyle("left",p(r)):h.x+f.width/2+b/2+g>n.x+t.width?e.setStyle("left",p(r-h.x+n.x+t.width-b-g)):0>f.left+f.width-b-g?a():0>f.left+f.width/2-b/2?e.setStyle("left",p(r-h.x+n.x)):e.setStyle("left",p(r+f.width/2-b/2-g/2))}},CKEDITOR.plugins.notification=ja,function(){var a='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+
-' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(a+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var a=a+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+
-(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"'),a=a+'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',
-e=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),c=CKEDITOR.addTemplate("button",a);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(c){c.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};
-CKEDITOR.ui.button.prototype={render:function(a,h){function m(){var b=a.mode;b&&(b=this.modes[b]?void 0!==v[b]?v[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:b,this.setState(b),this.refresh&&this.refresh())}var l=CKEDITOR.env,k=this._.id=CKEDITOR.tools.getNextId(),d="",b=this.command,g,n,t;this._.editor=a;var u={id:k,button:this,editor:a,focus:function(){CKEDITOR.document.getById(k).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},
-w=CKEDITOR.tools.addFunction(function(a){if(u.onkey)return a=new CKEDITOR.dom.event(a),!1!==u.onkey(u,a.getKeystroke())}),p=CKEDITOR.tools.addFunction(function(a){var b;u.onfocus&&(b=!1!==u.onfocus(u,new CKEDITOR.dom.event(a)));return b}),r=0;u.clickFn=g=CKEDITOR.tools.addFunction(function(){r&&(a.unlockSelection(1),r=0);u.execute();l.iOS&&a.focus()});if(this.modes){var v={};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(v[a.mode]=this._.state)},this);a.on("activeFilterChange",
-m,this);a.on("mode",m,this);!this.readOnly&&a.on("readOnly",m,this)}else b&&(b=a.getCommand(b))&&(b.on("state",function(){this.setState(b.state)},this),d+=b.state==CKEDITOR.TRISTATE_ON?"on":b.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");if(this.directional)a.on("contentDirChanged",function(b){var d=CKEDITOR.document.getById(this._.id),c=d.getFirst();b=b.data;b!=a.lang.dir?d.addClass("cke_"+b):d.removeClass("cke_ltr").removeClass("cke_rtl");c.setAttribute("style",CKEDITOR.skin.getIconStyle(A,
-"rtl"==b,this.icon,this.iconOffset))},this);b?(n=a.getCommandKeystroke(b))&&(t=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,n)):d+="off";var A=n=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(A=this.icon,this.icon=null);d={id:k,name:n,iconName:A,label:this.label,cls:this.className||"",state:d,ariaDisabled:"disabled"==d?"true":"false",title:this.title+(t?" ("+t.display+")":""),ariaShortcut:t?a.lang.common.keyboardShortcut+" "+t.aria:"",titleJs:l.gecko&&!l.hc?"":(this.title||
-"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:w,focusFn:p,clickFn:g,style:CKEDITOR.skin.getIconStyle(A,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?e.output():""};c.output(d,h);if(this.onRender)this.onRender();return u},setState:function(a){if(this._.state==a)return!1;this._.state=a;var c=CKEDITOR.document.getById(this._.id);return c?(c.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?c.setAttribute("aria-disabled",!0):c.removeAttribute("aria-disabled"),
-this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?c.setAttribute("aria-pressed",!0):c.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var c=this;this.allowedContent||this.requiredContent||!this.command||(c=a.getCommand(this.command)||c);return this._.feature=
-c}};CKEDITOR.ui.prototype.addButton=function(a,c){this.add(a,CKEDITOR.UI_BUTTON,c)}}(),function(){function a(a){function c(){for(var b=f(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||e(a),g=0;g<d.length;g++){var m=d[g];if("/"!=m){"string"==typeof m&&(m=d[g]={name:m});var p,r=m.groups;if(r)for(var v=0;v<r.length;v++)p=r[v],(p=b[p])&&k(m,p);(p=b[m.name])&&k(m,p)}}return d}function f(){var b={},d,c,g;for(d in a.ui.items)c=a.ui.items[d],g=c.toolbar||"others",g=g.split(","),c=g[0],g=parseInt(g[1]||
--1,10),b[c]||(b[c]=[]),b[c].push({name:d,order:g});for(c in b)b[c]=b[c].sort(function(a,b){return a.order==b.order?0:0>b.order?-1:0>a.order?1:a.order<b.order?-1:1});return b}function k(d,c){if(c.length){d.items?d.items.push(a.ui.create("-")):d.items=[];for(var g;g=c.shift();)g="string"==typeof g?g:g.name,b&&-1!=CKEDITOR.tools.indexOf(b,g)||(g=a.ui.create(g))&&a.addFeature(g)&&d.items.push(g)}}function d(a){var b=[],d,c,g;for(d=0;d<a.length;++d)c=a[d],g={},"/"==c?b.push(c):CKEDITOR.tools.isArray(c)?
-(k(g,CKEDITOR.tools.clone(c)),b.push(g)):c.items&&(k(g,CKEDITOR.tools.clone(c.items)),g.name=c.name,b.push(g));return b}var b=a.config.removeButtons,b=b&&b.split(","),g=a.config.toolbar;"string"==typeof g&&(g=a.config["toolbar_"+g]);return a.toolbar=g?d(g):c()}function e(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",
-{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var c=function(){this.toolbars=[];this.focusCommandExecuted=!1};c.prototype.focus=function(){for(var a=0,c;c=this.toolbars[a++];)for(var e=0,f;f=c.items[e++];)if(f.focus){f.focus();return}};var f={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=
-!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(e){var m,l=function(a,d){var b,c="rtl"==e.lang.dir,f=e.config.toolbarGroupCycling,t=c?37:39,c=c?39:37,f=void 0===f||f;switch(d){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==d?(b?b.next:a.toolbar.next)||e.toolbox.toolbars[0]:(b?b.previous:a.toolbar.previous)||e.toolbox.toolbars[e.toolbox.toolbars.length-1],b.items.length)for(a=
-b.items[m?b.items.length-1:0];a&&!a.focus;)(a=m?a.previous:a.next)||(b=0);a&&a.focus();return!1;case t:b=a;do b=b.next,!b&&f&&(b=a.toolbar.items[0]);while(b&&!b.focus);b?b.focus():l(a,9);return!1;case 40:return a.button&&a.button.hasArrow?a.execute():l(a,40==d?t:c),!1;case c:case 38:b=a;do b=b.previous,!b&&f&&(b=a.toolbar.items[a.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(m=1,l(a,CKEDITOR.SHIFT+9),m=0);return!1;case 27:return e.focus(),!1;case 13:case 32:return a.execute(),!1}return!0};
-e.on("uiSpace",function(f){if(f.data.space==e.config.toolbarLocation){f.removeListener();e.toolbox=new c;var d=CKEDITOR.tools.getNextId(),b=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',e.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+e.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==e.config.toolbarStartupExpanded,g,n;e.config.toolbarCanCollapse&&e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&
-b.push('\x3cspan class\x3d"cke_toolbox_main"'+(d?"\x3e":' style\x3d"display:none"\x3e'));for(var m=e.toolbox.toolbars,u=a(e),w=u.length,p=0;p<w;p++){var r,v=0,A,B=u[p],q="/"!==B&&("/"===u[p+1]||p==w-1),z;if(B)if(g&&(b.push("\x3c/span\x3e"),n=g=0),"/"===B)b.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{z=B.items||B;for(var y=0;y<z.length;y++){var x=z[y],D;if(x){var C=function(a){a=a.render(e,b);G=v.items.push(a)-1;0<G&&(a.previous=v.items[G-1],a.previous.next=a);a.toolbar=v;a.onkey=
-l;a.onfocus=function(){e.toolbox.focusCommandExecuted||e.focus()}};if(x.type==CKEDITOR.UI_SEPARATOR)n=g&&x;else{D=!1!==x.canGroup;if(!v){r=CKEDITOR.tools.getNextId();v={id:r,items:[]};A=B.name&&(e.lang.toolbar.toolbarGroups[B.name]||B.name);b.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(q?' cke_toolbar_last"':'"'),A?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');A&&b.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',A,"\x3c/span\x3e");b.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');
-var G=m.push(v)-1;0<G&&(v.previous=m[G-1],v.previous.next=v)}D?g||(b.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),g=1):g&&(b.push("\x3c/span\x3e"),g=0);n&&(C(n),n=0);C(x)}}}g&&(b.push("\x3c/span\x3e"),n=g=0);v&&b.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}e.config.toolbarCanCollapse&&b.push("\x3c/span\x3e");if(e.config.toolbarCanCollapse&&e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var F=CKEDITOR.tools.addFunction(function(){e.execCommand("toolbarCollapse")});
-e.on("destroy",function(){CKEDITOR.tools.removeFunction(F)});e.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),d=b.getPrevious(),c=a.ui.space("contents"),g=d.getParent(),e=parseInt(c.$.style.height,10),f=g.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");h?(d.show(),b.removeClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(d.hide(),b.addClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarExpand));
-b.getFirst().setText(h?"▲":"◀");c.setStyle("height",e-(g.$.offsetHeight-f)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:c.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});e.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");b.push('\x3ca title\x3d"'+(d?e.lang.toolbar.toolbarCollapse:e.lang.toolbar.toolbarExpand)+'" id\x3d"'+e.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');
-d||b.push(" cke_toolbox_collapser_min");b.push('" onclick\x3d"CKEDITOR.tools.callFunction('+F+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',"\x3c/a\x3e")}b.push("\x3c/span\x3e");f.data.html+=b.join("")}});e.on("destroy",function(){if(this.toolbox){var a,d=0,b,c,e;for(a=this.toolbox.toolbars;d<a.length;d++)for(c=a[d].items,b=0;b<c.length;b++)e=c[b],e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn),e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}});e.on("uiReady",function(){var a=
-e.ui.space("toolbox");a&&e.focusManager.add(a,1)});e.addCommand("toolbarFocus",f);e.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");e.ui.add("-",CKEDITOR.UI_SEPARATOR,{});e.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,c,f){var k=e(this.editor),d=0===c,b={name:a};if(f){if(f=CKEDITOR.tools.search(k,function(a){return a.name==
-f})){!f.groups&&(f.groups=[]);if(c&&(c=CKEDITOR.tools.indexOf(f.groups,c),0<=c)){f.groups.splice(c+1,0,a);return}d?f.groups.splice(0,0,a):f.groups.push(a);return}c=null}c&&(c=CKEDITOR.tools.indexOf(k,function(a){return a.name==c}));d?k.splice(0,0,a):"number"==typeof c?k.splice(c+1,0,b):k.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){function a(a,b,d){b.type||(b.type="auto");if(d&&!1===a.fire("beforePaste",b)||!b.dataValue&&b.dataTransfer.isEmpty())return!1;
-b.dataValue||(b.dataValue="");if(CKEDITOR.env.gecko&&"drop"==b.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()});return a.fire("paste",b)}function e(b){function d(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(a){b.readOnly&&"cut"==a.name||D.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on("copy",c);a.on("cut",c);a.on("cut",function(){b.readOnly||b.extractSelectedHtml()},null,null,999)}a.on(D.mainPasteEvent,function(a){"beforepaste"==
-D.mainPasteEvent&&C||z(a)});"beforepaste"==D.mainPasteEvent&&(a.on("paste",function(a){G||(f(),a.data.preventDefault(),z(a),k("paste"))}),a.on("contextmenu",h,null,null,0),a.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));a.on("beforecut",function(){!C&&l(b)});var e;a.attachListener(CKEDITOR.env.ie?a:b.document.getDocumentElement(),"mouseup",function(){e=setTimeout(function(){y()},0)});b.on("destroy",function(){clearTimeout(e)});a.on("keyup",y)}function c(a){return{type:a,
-canUndo:"cut"==a,startDisabled:!0,fakeKeystroke:"cut"==a?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&l();var a;var d=this.type;if(CKEDITOR.env.ie)a=k(d);else try{a=b.document.$.execCommand(d,!1,null)}catch(c){a=!1}a||b.showNotification(b.lang.clipboard[this.type+"Error"]);return a}}}function e(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(b,d){function c(d,f){f="undefined"!==typeof f?f:!0;d?(d.method="paste",d.dataTransfer||(d.dataTransfer=D.initPasteDataTransfer()),
-a(b,d,f)):e&&b.showNotification(k,"info",b.config.clipboard_notificationDuration);b.fire("afterCommandExec",{name:"paste",command:g,returnValue:!!d})}d="undefined"!==typeof d&&null!==d?d:{};var g=this,e="undefined"!==typeof d.notification?d.notification:!0,f=d.type,h=CKEDITOR.tools.keystrokeToString(b.lang.common.keyboard,b.getCommandKeystroke(this)),k="string"===typeof e?e:b.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===
-typeof d?d:d.dataValue;f?b._.nextPasteType=f:delete b._.nextPasteType;"string"===typeof h?c({dataValue:h}):b.getClipboardData(c)}}}function f(){G=1;setTimeout(function(){G=0},100)}function h(){C=1;setTimeout(function(){C=0},10)}function k(a){var d=b.document,c=d.getBody(),e=!1,f=function(){e=!0};c.on(a,f);7<CKEDITOR.env.version?d.$.execCommand(a):d.$.selection.createRange().execCommand(a);c.removeListener(a,f);return e}function l(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var a=b.getSelection(),
-d,c,e;a.getType()==CKEDITOR.SELECTION_ELEMENT&&(d=a.getSelectedElement())&&(c=a.getRanges()[0],e=b.document.createText(""),e.insertBefore(d),c.setStartBefore(e),c.setEndAfter(d),a.selectRanges([c]),setTimeout(function(){d.getParent()&&(e.remove(),a.selectElement(d))},0))}}function m(a,d){var c=b.document,e=b.editable(),f=function(a){a.cancel()},h;if(!c.getById("cke_pastebin")){var k=b.getSelection(),l=k.createBookmarks();CKEDITOR.env.ie&&k.root.fire("selectionchange");var n=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&
-!e.is("body")||CKEDITOR.env.ie?"div":"body",c);n.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var p=0,c=c.getWindow();CKEDITOR.env.webkit?(e.append(n),n.addClass("cke_editable"),e.is("body")||(p="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),p=p.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(n);n.setStyles({position:"absolute",top:c.getScrollPosition().y-p+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height-
-20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&n.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(p=n.getParent().isReadOnly())?(n.setOpacity(0),n.setAttribute("contenteditable",!0)):n.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-10000px");b.on("selectionChange",f,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)h=e.once("blur",f,null,null,-100);p&&n.focus();p=new CKEDITOR.dom.range(n);p.selectNodeContents(n);var q=p.select();CKEDITOR.env.ie&&
-(h=e.once("blur",function(){b.lockSelection(q)}));var r=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=r);h&&h.removeListener();CKEDITOR.env.ie&&e.focus();k.selectBookmarks(l);n.remove();var a;CKEDITOR.env.webkit&&(a=n.getFirst())&&a.is&&a.hasClass("Apple-style-span")&&(n=a);b.removeListener("selectionChange",f);d(n.getHtml())},0)}}function B(){if("paste"==D.mainPasteEvent)return b.fire("beforePaste",{type:"auto",
-method:"paste"}),!1;b.focus();f();var a=b.focusManager;a.lock();if(b.editable().fire(D.mainPasteEvent)&&!k("paste"))return a.unlock(),!1;a.unlock();return!0}function q(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();f();"paste"==D.mainPasteEvent&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},50)}}function z(d){var c={type:"auto",method:"paste",
-dataTransfer:D.initPasteDataTransfer(d)};c.dataTransfer.cacheData();var e=!1!==b.fire("beforePaste",c);e&&D.canClipboardApiBeTrusted(c.dataTransfer,b)?(d.data.preventDefault(),setTimeout(function(){a(b,c)},0)):m(d,function(d){c.dataValue=d.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&a(b,c)})}function y(){if("wysiwyg"==b.mode){var a=x("paste");b.getCommand("cut").setState(x("cut"));b.getCommand("copy").setState(x("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function x(a){if(F&&
-a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var D=CKEDITOR.plugins.clipboard,C=0,G=0,F=0;(function(){b.on("key",q);b.on("contentDom",d);b.on("selectionChange",function(a){F=a.data.selection.getRanges()[0].checkReadOnly();y()});b.contextMenu&&b.contextMenu.addListener(function(a,b){F=b.getRanges()[0].checkReadOnly();
-return{cut:x("cut"),copy:x("copy"),paste:x("paste")}})})();(function(){function a(d,c,e,f,h){var k=b.lang.clipboard[c];b.addCommand(c,e);b.ui.addButton&&b.ui.addButton(d,{label:k,command:c,toolbar:"clipboard,"+f});b.addMenuItems&&b.addMenuItem(c,{label:k,command:c,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",e(),30,8)})();b.getClipboardData=function(a,d){function c(a){a.removeListener();a.cancel();d(a.data)}d||(d=a,a=null);b.on("paste",
-c,null,null,0);!1===B()&&(b.removeListener("paste",c),d(null))}}function c(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function f(a,b){function d(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",
-~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}b=b.replace(/\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi,"\x3cbr\x3e");b=b.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(b.match(/^[^<]$/))return b;CKEDITOR.env.webkit&&-1<b.indexOf("\x3cdiv\x3e")&&(b=b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),b.match(/<div>(<br>|)<\/div>/)&&(b="\x3cp\x3e"+b.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return d(a.split("\x3c/div\x3e\x3cdiv\x3e").length+
-1)})+"\x3c/p\x3e"),b=b.replace(/<\/div><div>/g,"\x3cbr\x3e"),b=b.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(b=b.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<b.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(b="\x3cp\x3e"+b.replace(/(<br>){2,}/g,function(a){return d(a.length/4)})+"\x3c/p\x3e"));return l(a,b)}function h(){function a(){var b={},d;for(d in CKEDITOR.dtd)"$"!=d.charAt(0)&&"div"!=d&&"span"!=d&&(b[d]=1);return b}var b={};return{get:function(d){return"plain-text"==
-d?b.plainText||(b.plainText=new CKEDITOR.filter("br")):"semantic-content"==d?((d=b.semanticContent)||(d=new CKEDITOR.filter,d.allow({$1:{elements:a(),attributes:!0,styles:!1,classes:!1}}),d=b.semanticContent=d),d):d?new CKEDITOR.filter(d):null}}}function m(a,b,d){b=CKEDITOR.htmlParser.fragment.fromHtml(b);var c=new CKEDITOR.htmlParser.basicWriter;d.applyTo(b,!0,!1,a.activeEnterMode);b.writeHtml(c);return c.getHtml()}function l(a,b){a.enterMode==CKEDITOR.ENTER_BR?b=b.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",
-a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(b=b.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return b}function k(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function d(b){var d=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(d,e,f){e.select();a(b,{dataTransfer:f,method:"drop"},1);f.sourceEditor.fire("saveSnapshot");f.sourceEditor.editable().extractHtmlFromRange(d);f.sourceEditor.getSelection().selectRanges([d]);f.sourceEditor.fire("saveSnapshot")}
-function e(c,f){c.select();a(b,{dataTransfer:f,method:"drop"},1);d.resetDragDataTransfer()}function f(a,d,c){var e={$:a.data.$,target:a.data.getTarget()};d&&(e.dragRange=d);c&&(e.dropRange=c);!1===b.fire(a.name,e)&&a.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var k=b.editable(),l=CKEDITOR.plugins.clipboard.getDropTarget(b),m=b.ui.space("top"),B=b.ui.space("bottom");d.preventDefaultDropOnElement(m);d.preventDefaultDropOnElement(B);
-k.attachListener(l,"dragstart",f);k.attachListener(b,"dragstart",d.resetDragDataTransfer,d,null,1);k.attachListener(b,"dragstart",function(a){d.initDragDataTransfer(a,b)},null,null,2);k.attachListener(b,"dragstart",function(){var a=d.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(d.dragStartContainerChildCount=a?h(a.startContainer):null,d.dragEndContainerChildCount=a?h(a.endContainer):null)},null,null,100);k.attachListener(l,"dragend",f);k.attachListener(b,"dragend",
-d.initDragDataTransfer,d,null,1);k.attachListener(b,"dragend",d.resetDragDataTransfer,d,null,100);k.attachListener(l,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var b=a.data.getTarget();b&&b.is&&b.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}});k.attachListener(l,"drop",function(a){if(!a.data.$.defaultPrevented){a.data.preventDefault();var c=a.data.getTarget();
-if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is("html")){var c=d.getRangeAtDropPosition(a,b),e=d.dragRange;c&&f(a,e,c)}}},null,null,9999);k.attachListener(b,"drop",d.initDragDataTransfer,d,null,1);k.attachListener(b,"drop",function(a){if(a=a.data){var f=a.dropRange,h=a.dragRange,k=a.dataTransfer;k.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){d.internalDrop(h,f,k,b)},0):k.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,f,k):e(f,k)}},null,null,9999)})}
-CKEDITOR.plugins.add("clipboard",{requires:"notification,toolbar",init:function(a){var b,k=h();a.config.forcePasteAsPlainText?b="plain-text":a.config.pasteFilter?b=a.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in a.config||(b="semantic-content");a.pasteFilter=k.get(b);e(a);d(a);if(CKEDITOR.env.gecko){var l=["image/png","image/jpeg","image/gif"],w;a.on("paste",function(b){var d=b.data,c=d.dataTransfer;if(!d.dataValue&&"paste"==d.method&&c&&1==c.getFilesCount()&&w!=c.id&&(c=c.getFile(0),-1!=
-CKEDITOR.tools.indexOf(l,c.type))){var e=new FileReader;e.addEventListener("load",function(){b.data.dataValue='\x3cimg src\x3d"'+e.result+'" /\x3e';a.fire("paste",b.data)},!1);e.addEventListener("abort",function(){a.fire("paste",b.data)},!1);e.addEventListener("error",function(){a.fire("paste",b.data)},!1);e.readAsDataURL(c);w=d.dataTransfer.id;b.stop()}},null,null,1)}a.on("paste",function(b){b.data.dataTransfer||(b.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!b.data.dataValue){var d=
-b.data.dataTransfer,c=d.getData("text/html");if(c)b.data.dataValue=c,b.data.type="html";else if(c=d.getData("text/plain"))b.data.dataValue=a.editable().transformPlainTextToHtml(c),b.data.type="text"}},null,null,1);a.on("paste",function(a){var b=a.data.dataValue,d=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,
-"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<b.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var c,e,g=new CKEDITOR.dom.element("div");for(g.setHtml(b);1==g.getChildCount()&&(c=g.getFirst())&&c.type==CKEDITOR.NODE_ELEMENT&&(c.hasClass("cke_editable")||c.hasClass("cke_contents"));)g=e=c;
-e&&(b=e.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,c){return c.toLowerCase()in d?(a.data.preSniffing="html","\x3c"+c):b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,c){return c in d?(a.data.endsWithEOL=1,"\x3c/"+c+"\x3e"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);a.on("paste",function(b){b=b.data;var d=a._.nextPasteType||b.type,e=b.dataValue,h,l=a.config.clipboard_defaultContentType||
-"html",n=b.dataTransfer.getTransferType(a);h="html"==d||"html"==b.preSniffing?"html":c(e);delete a._.nextPasteType;"htmlifiedtext"==h&&(e=f(a.config,e));"text"==d&&"html"==h?e=m(a,e,k.get("plain-text")):n==CKEDITOR.DATA_TRANSFER_EXTERNAL&&a.pasteFilter&&!b.dontFilter&&(e=m(a,e,a.pasteFilter));b.startsWithEOL&&(e='\x3cbr data-cke-eol\x3d"1"\x3e'+e);b.endsWithEOL&&(e+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==d&&(d="html"==h||"html"==l?"html":"text");b.type=d;b.dataValue=e;delete b.preSniffing;delete b.startsWithEOL;
-delete b.endsWithEOL},null,null,6);a.on("paste",function(b){b=b.data;b.dataValue&&(a.insertHtml(b.dataValue,b.type,b.range),setTimeout(function(){a.fire("afterPaste")},0))},null,null,1E3)}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",canClipboardApiBeTrusted:function(a,b){return a.getTransferType(b)!=
-CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!a.isEmpty()||CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS?!0:!1},getDropTarget:function(a){var b=a.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||b.isInline()?b:a.document},fixSplitNodesAfterDrop:function(a,b,d,c){function e(a,d,c){var g=a;g.type==CKEDITOR.NODE_TEXT&&(g=a.getParent());if(g.equals(d)&&c!=d.getChildCount())return a=b.startContainer.getChild(b.startOffset-
-1),d=b.startContainer.getChild(b.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&d&&d.type==CKEDITOR.NODE_TEXT&&(c=a.getLength(),a.setText(a.getText()+d.getText()),d.remove(),b.setStart(a,c),b.collapse(!0)),!0}var f=b.startContainer;"number"==typeof c&&"number"==typeof d&&f.type==CKEDITOR.NODE_ELEMENT&&(e(a.startContainer,f,d)||e(a.endContainer,f,c))},isDropRangeAffectedByDragRange:function(a,b){var d=b.startContainer,c=b.endOffset;return a.endContainer.equals(d)&&a.endOffset<=c||a.startContainer.getParent().equals(d)&&
-a.startContainer.getIndex()<c||a.endContainer.getParent().equals(d)&&a.endContainer.getIndex()<c?!0:!1},internalDrop:function(b,d,c,e){var f=CKEDITOR.plugins.clipboard,h=e.editable(),k,l;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,d,f.dragStartContainerChildCount,f.dragEndContainerChildCount);(l=this.isDropRangeAffectedByDragRange(b,d))||(k=b.createBookmark(!1));f=d.clone().createBookmark(!1);l&&(k=b.createBookmark(!1));
-b=k.startNode;d=k.endNode;l=f.startNode;d&&b.getPosition(l)&CKEDITOR.POSITION_PRECEDING&&d.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&l.insertBefore(b);b=e.createRange();b.moveToBookmark(k);h.extractHtmlFromRange(b,1);d=e.createRange();d.moveToBookmark(f);a(e,{dataTransfer:c,method:"drop",range:d},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(a,b){var d=a.data.$,c=d.clientX,e=d.clientY,f=b.getSelection(!0).getRanges()[0],h=b.createRange();if(a.data.testRange)return a.data.testRange;
-if(document.caretRangeFromPoint&&b.document.$.caretRangeFromPoint(c,e))d=b.document.$.caretRangeFromPoint(c,e),h.setStart(CKEDITOR.dom.node(d.startContainer),d.startOffset),h.collapse(!0);else if(d.rangeParent)h.setStart(CKEDITOR.dom.node(d.rangeParent),d.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&f&&b.editable().hasFocus)return f;if(document.body.createTextRange){b.focus();d=b.document.getBody().$.createTextRange();try{for(var k=!1,l=0;20>l&&!k;l++){if(!k)try{d.moveToPoint(c,
-e-l),k=!0}catch(m){}if(!k)try{d.moveToPoint(c,e+l),k=!0}catch(q){}}if(k){var z="cke-temp-"+(new Date).getTime();d.pasteHTML('\x3cspan id\x3d"'+z+'"\x3e​\x3c/span\x3e');var y=b.document.getById(z);h.moveToPosition(y,CKEDITOR.POSITION_BEFORE_START);y.remove()}else{var x=b.document.$.elementFromPoint(c,e),D=new CKEDITOR.dom.element(x),C;if(D.equals(b.editable())||"html"==D.getName())return f&&f.startContainer&&!f.startContainer.equals(b.editable())?f:null;C=D.getClientRect();c<C.left?h.setStartAt(D,
-CKEDITOR.POSITION_AFTER_START):h.setStartAt(D,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(G){return null}}else return null}return h},initDragDataTransfer:function(a,b){var d=a.data.$?a.data.$.dataTransfer:null,c=new this.dataTransfer(d,b);d?this.dragData&&c.id==this.dragData.id?c=this.dragData:this.dragData=c:this.dragData?c=this.dragData:this.dragData=c;a.data.dataTransfer=c},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,b){if(this.isCustomCopyCutSupported){if(a&&
-a.data&&a.data.$){var d=new this.dataTransfer(a.data.$.clipboardData,b);this.copyCutData&&d.id==this.copyCutData.id?(d=this.copyCutData,d.$=a.data.$.clipboardData):this.copyCutData=d;return d}return new this.dataTransfer(null,b)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&&a.data.$.clipboardData||null,b)},preventDefaultDropOnElement:function(a){a&&a.on("dragover",k)}};var b=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=
-function(a,d){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(b);this.id||(this.id="Text"==b?"":"cke-"+CKEDITOR.tools.getUniqueId());if("Text"!=b)try{this.$.setData(b,this.id)}catch(c){}d&&(this.sourceEditor=d,this.setData("text/html",d.getSelectedHtml(1)),"Text"==
-b||this.getData("text/plain")||this.setData("text/plain",d.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(a,b){a=this._.normalizeType(a);var d=this._.data[a],c;if(void 0===d||null===d||""===d)try{d=this.$.getData(a)}catch(e){}if(void 0===d||null===d||""===d)d="";"text/html"!=a||b?"Text"==a&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==
-d.substring(0,7)&&(d=""):(d=d.replace(this._.metaRegExp,""),(c=this._.bodyRegExp.exec(d))&&c.length&&(d=c[1],d=d.replace(this._.fragmentRegExp,"")));"string"===typeof d&&(c=d.indexOf("\x3c/html\x3e"),d=-1!==c?d.substring(0,c+7):d);return d},setData:function(a,d){a=this._.normalizeType(a);this._.data[a]=d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a){"Text"==b&&"Text"==a&&(this.id=d);try{this.$.setData(a,d)}catch(c){}}},getTransferType:function(a){return this.sourceEditor?
-this.sourceEditor==a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function a(d){d=b._.normalizeType(d);var c=b.getData(d,!0);c&&(b._.data[d]=c)}if(this.$){var b=this,d,c;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(d=0;d<this.$.types.length;d++)a(this.$.types[d])}else a("Text"),a("URL");c=this._getImageFromClipboard();if(this.$&&this.$.files||c){this._.files=[];if(this.$.files&&this.$.files.length)for(d=
-0;d<this.$.files.length;d++)this._.files.push(this.$.files[d]);0===this._.files.length&&c&&this._.files.push(c)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(a){return this._.files.length?this._.files[a]:this.$&&this.$.files&&this.$.files.length?this.$.files[a]:0===a?this._getImageFromClipboard():void 0},isEmpty:function(){var a={},d;if(this.getFilesCount())return!1;
-for(d in this._.data)a[d]=1;if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c=0;c<this.$.types.length;c++)a[this.$.types[c]]=1}else a.Text=1,a.URL=1;"Text"!=b&&(a[b]=0);for(d in a)if(a[d]&&""!==this.getData(d))return!1;return!0},_getImageFromClipboard:function(){var a;if(this.$&&this.$.items&&this.$.items[0])try{if((a=this.$.items[0].getAsFile())&&a.type)return a}catch(b){}}}}(),CKEDITOR.config.clipboard_notificationDuration=1E4,function(){CKEDITOR.plugins.add("panel",
-{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,c){c&&CKEDITOR.tools.extend(this,c);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var a=CKEDITOR.addTemplate("panel",'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),
-e=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),c=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');CKEDITOR.ui.panel.prototype={render:function(f,
-h){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),d=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&d.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});d=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(c.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+
+e.ui.addButton("Blockquote",{label:e.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})}(),function(){var a='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"';
+CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(a+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var a=a+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"'),
+a=a+'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',e=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),c=CKEDITOR.addTemplate("button",a);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,
+CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(c){c.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,h){function m(){var b=a.mode;b&&(b=this.modes[b]?void 0!==v[b]?v[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:
+b,this.setState(b),this.refresh&&this.refresh())}var l=CKEDITOR.env,k=this._.id=CKEDITOR.tools.getNextId(),d="",b=this.command,g,n,u;this._.editor=a;var r={id:k,button:this,editor:a,focus:function(){CKEDITOR.document.getById(k).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},w=CKEDITOR.tools.addFunction(function(a){if(r.onkey)return a=new CKEDITOR.dom.event(a),!1!==r.onkey(r,a.getKeystroke())}),p=CKEDITOR.tools.addFunction(function(a){var b;r.onfocus&&
+(b=!1!==r.onfocus(r,new CKEDITOR.dom.event(a)));return b}),t=0;r.clickFn=g=CKEDITOR.tools.addFunction(function(){t&&(a.unlockSelection(1),t=0);r.execute();l.iOS&&a.focus()});if(this.modes){var v={};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(v[a.mode]=this._.state)},this);a.on("activeFilterChange",m,this);a.on("mode",m,this);!this.readOnly&&a.on("readOnly",m,this)}else b&&(b=a.getCommand(b))&&(b.on("state",function(){this.setState(b.state)},this),d+=b.state==
+CKEDITOR.TRISTATE_ON?"on":b.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");if(this.directional)a.on("contentDirChanged",function(b){var d=CKEDITOR.document.getById(this._.id),c=d.getFirst();b=b.data;b!=a.lang.dir?d.addClass("cke_"+b):d.removeClass("cke_ltr").removeClass("cke_rtl");c.setAttribute("style",CKEDITOR.skin.getIconStyle(z,"rtl"==b,this.icon,this.iconOffset))},this);b?(n=a.getCommandKeystroke(b))&&(u=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,n)):d+="off";var z=n=this.name||
+this.command;this.icon&&!/\./.test(this.icon)&&(z=this.icon,this.icon=null);d={id:k,name:n,iconName:z,label:this.label,cls:this.className||"",state:d,ariaDisabled:"disabled"==d?"true":"false",title:this.title+(u?" ("+u.display+")":""),ariaShortcut:u?a.lang.common.keyboardShortcut+" "+u.aria:"",titleJs:l.gecko&&!l.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:w,focusFn:p,clickFn:g,style:CKEDITOR.skin.getIconStyle(z,"rtl"==a.lang.dir,this.icon,this.iconOffset),
+arrowHtml:this.hasArrow?e.output():""};c.output(d,h);if(this.onRender)this.onRender();return r},setState:function(a){if(this._.state==a)return!1;this._.state=a;var c=CKEDITOR.document.getById(this._.id);return c?(c.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?c.setAttribute("aria-disabled",!0):c.removeAttribute("aria-disabled"),this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):
+a==CKEDITOR.TRISTATE_ON?c.setAttribute("aria-pressed",!0):c.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var c=this;this.allowedContent||this.requiredContent||!this.command||(c=a.getCommand(this.command)||c);return this._.feature=c}};CKEDITOR.ui.prototype.addButton=function(a,c){this.add(a,CKEDITOR.UI_BUTTON,c)}}(),function(){function a(a){function c(){for(var b=f(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||
+e(a),g=0;g<d.length;g++){var m=d[g];if("/"!=m){"string"==typeof m&&(m=d[g]={name:m});var p,t=m.groups;if(t)for(var v=0;v<t.length;v++)p=t[v],(p=b[p])&&k(m,p);(p=b[m.name])&&k(m,p)}}return d}function f(){var b={},d,c,g;for(d in a.ui.items)c=a.ui.items[d],g=c.toolbar||"others",g=g.split(","),c=g[0],g=parseInt(g[1]||-1,10),b[c]||(b[c]=[]),b[c].push({name:d,order:g});for(c in b)b[c]=b[c].sort(function(a,b){return a.order==b.order?0:0>b.order?-1:0>a.order?1:a.order<b.order?-1:1});return b}function k(d,
+c){if(c.length){d.items?d.items.push(a.ui.create("-")):d.items=[];for(var g;g=c.shift();)g="string"==typeof g?g:g.name,b&&-1!=CKEDITOR.tools.indexOf(b,g)||(g=a.ui.create(g))&&a.addFeature(g)&&d.items.push(g)}}function d(a){var b=[],d,c,g;for(d=0;d<a.length;++d)c=a[d],g={},"/"==c?b.push(c):CKEDITOR.tools.isArray(c)?(k(g,CKEDITOR.tools.clone(c)),b.push(g)):c.items&&(k(g,CKEDITOR.tools.clone(c.items)),g.name=c.name,b.push(g));return b}var b=a.config.removeButtons,b=b&&b.split(","),g=a.config.toolbar;
+"string"==typeof g&&(g=a.config["toolbar_"+g]);return a.toolbar=g?d(g):c()}function e(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},
+{name:"tools"},{name:"others"},{name:"about"}])}var c=function(){this.toolbars=[];this.focusCommandExecuted=!1};c.prototype.focus=function(){for(var a=0,c;c=this.toolbars[a++];)for(var e=0,f;f=c.items[e++];)if(f.focus){f.focus();return}};var f={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(e){var m,
+l=function(a,d){var b,c="rtl"==e.lang.dir,f=e.config.toolbarGroupCycling,u=c?37:39,c=c?39:37,f=void 0===f||f;switch(d){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==d?(b?b.next:a.toolbar.next)||e.toolbox.toolbars[0]:(b?b.previous:a.toolbar.previous)||e.toolbox.toolbars[e.toolbox.toolbars.length-1],b.items.length)for(a=b.items[m?b.items.length-1:0];a&&!a.focus;)(a=m?a.previous:a.next)||(b=0);a&&a.focus();return!1;case u:b=a;do b=b.next,!b&&f&&(b=a.toolbar.items[0]);while(b&&!b.focus);
+b?b.focus():l(a,9);return!1;case 40:return a.button&&a.button.hasArrow?a.execute():l(a,40==d?u:c),!1;case c:case 38:b=a;do b=b.previous,!b&&f&&(b=a.toolbar.items[a.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(m=1,l(a,CKEDITOR.SHIFT+9),m=0);return!1;case 27:return e.focus(),!1;case 13:case 32:return a.execute(),!1}return!0};e.on("uiSpace",function(f){if(f.data.space==e.config.toolbarLocation){f.removeListener();e.toolbox=new c;var d=CKEDITOR.tools.getNextId(),b=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',
+e.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+e.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==e.config.toolbarStartupExpanded,g,n;e.config.toolbarCanCollapse&&e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&b.push('\x3cspan class\x3d"cke_toolbox_main"'+(d?"\x3e":' style\x3d"display:none"\x3e'));for(var m=e.toolbox.toolbars,r=a(e),w=r.length,p=0;p<w;p++){var t,v=0,z,A=r[p],q="/"!==A&&("/"===r[p+1]||p==
+w-1),y;if(A)if(g&&(b.push("\x3c/span\x3e"),n=g=0),"/"===A)b.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{y=A.items||A;for(var x=0;x<y.length;x++){var C=y[x],B;if(C){var D=function(a){a=a.render(e,b);G=v.items.push(a)-1;0<G&&(a.previous=v.items[G-1],a.previous.next=a);a.toolbar=v;a.onkey=l;a.onfocus=function(){e.toolbox.focusCommandExecuted||e.focus()}};if(C.type==CKEDITOR.UI_SEPARATOR)n=g&&C;else{B=!1!==C.canGroup;if(!v){t=CKEDITOR.tools.getNextId();v={id:t,items:[]};z=A.name&&
+(e.lang.toolbar.toolbarGroups[A.name]||A.name);b.push('\x3cspan id\x3d"',t,'" class\x3d"cke_toolbar'+(q?' cke_toolbar_last"':'"'),z?' aria-labelledby\x3d"'+t+'_label"':"",' role\x3d"toolbar"\x3e');z&&b.push('\x3cspan id\x3d"',t,'_label" class\x3d"cke_voice_label"\x3e',z,"\x3c/span\x3e");b.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var G=m.push(v)-1;0<G&&(v.previous=m[G-1],v.previous.next=v)}B?g||(b.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),g=1):g&&(b.push("\x3c/span\x3e"),
+g=0);n&&(D(n),n=0);D(C)}}}g&&(b.push("\x3c/span\x3e"),n=g=0);v&&b.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}e.config.toolbarCanCollapse&&b.push("\x3c/span\x3e");if(e.config.toolbarCanCollapse&&e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var F=CKEDITOR.tools.addFunction(function(){e.execCommand("toolbarCollapse")});e.on("destroy",function(){CKEDITOR.tools.removeFunction(F)});e.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),
+d=b.getPrevious(),c=a.ui.space("contents"),g=d.getParent(),e=parseInt(c.$.style.height,10),f=g.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");h?(d.show(),b.removeClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(d.hide(),b.addClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarExpand));b.getFirst().setText(h?"▲":"◀");c.setStyle("height",e-(g.$.offsetHeight-f)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,
+contentsHeight:c.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});e.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");b.push('\x3ca title\x3d"'+(d?e.lang.toolbar.toolbarCollapse:e.lang.toolbar.toolbarExpand)+'" id\x3d"'+e.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');d||b.push(" cke_toolbox_collapser_min");b.push('" onclick\x3d"CKEDITOR.tools.callFunction('+F+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',
+"\x3c/a\x3e")}b.push("\x3c/span\x3e");f.data.html+=b.join("")}});e.on("destroy",function(){if(this.toolbox){var a,d=0,b,c,e;for(a=this.toolbox.toolbars;d<a.length;d++)for(c=a[d].items,b=0;b<c.length;b++)e=c[b],e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn),e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}});e.on("uiReady",function(){var a=e.ui.space("toolbox");a&&e.focusManager.add(a,1)});e.addCommand("toolbarFocus",f);e.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");e.ui.add("-",CKEDITOR.UI_SEPARATOR,
+{});e.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,c,f){var k=e(this.editor),d=0===c,b={name:a};if(f){if(f=CKEDITOR.tools.search(k,function(a){return a.name==f})){!f.groups&&(f.groups=[]);if(c&&(c=CKEDITOR.tools.indexOf(f.groups,c),0<=c)){f.groups.splice(c+1,0,a);return}d?f.groups.splice(0,0,a):f.groups.push(a);
+return}c=null}c&&(c=CKEDITOR.tools.indexOf(k,function(a){return a.name==c}));d?k.splice(0,0,a):"number"==typeof c?k.splice(c+1,0,b):k.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",CKEDITOR.plugins.add("notification",{requires:"toolbar",init:function(a){function e(a){var e=new CKEDITOR.dom.element("div");e.setStyles({position:"fixed","margin-left":"-9999px"});e.setAttributes({"aria-live":"assertive","aria-atomic":"true"});e.setText(a);CKEDITOR.document.getBody().append(e);
+setTimeout(function(){e.remove()},100)}a._.notificationArea=new ka(a);a.showNotification=function(c,e,h){var m,l;"progress"==e?m=h:l=h;c=new CKEDITOR.plugins.notification(a,{message:c,type:e,progress:m,duration:l});c.show();return c};a.on("key",function(c){if(27==c.data.keyCode){var f=a._.notificationArea.notifications;f.length&&(e(a.lang.notification.closed),f[f.length-1].hide(),c.cancel())}})}}),ja.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),
+this._hideAfterTimeout())},update:function(a){var e=!0;!1===this.editor.fire("notificationUpdate",{notification:this,options:a})&&(e=!1);var c=this.element,f=c.findOne(".cke_notification_message"),h=c.findOne(".cke_notification_progress"),m=a.type;c.removeAttribute("role");a.progress&&"progress"!=this.type&&(m="progress");m&&(c.removeClass(this._getClass()),c.removeAttribute("aria-label"),this.type=m,c.addClass(this._getClass()),c.setAttribute("aria-label",this.type),"progress"!=this.type||h?"progress"!=
+this.type&&h&&h.remove():(h=this._createProgressElement(),h.insertBefore(f)));void 0!==a.message&&(this.message=a.message,f.setHtml(this.message));void 0!==a.progress&&(this.progress=a.progress,h&&h.setStyle("width",this._getPercentageProgress()));e&&a.important&&(c.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=a.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=
+CKEDITOR.tools.indexOf(this.area.notifications,this)},_createElement:function(){var a=this,e,c,f=this.editor.lang.common.close;e=new CKEDITOR.dom.element("div");e.addClass("cke_notification");e.addClass(this._getClass());e.setAttributes({id:this.id,role:"alert","aria-label":this.type});"progress"==this.type&&e.append(this._createProgressElement());c=new CKEDITOR.dom.element("p");c.addClass("cke_notification_message");c.setHtml(this.message);e.append(c);c=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notification_close" href\x3d"javascript:void(0)" title\x3d"'+
+f+'" role\x3d"button" tabindex\x3d"-1"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e');e.append(c);c.on("click",function(){a.editor.focus();a.hide()});return e},_getClass:function(){return"progress"==this.type?"cke_notification_info":"cke_notification_"+this.type},_createProgressElement:function(){var a=new CKEDITOR.dom.element("span");a.addClass("cke_notification_progress");a.setStyle("width",this._getPercentageProgress());return a},_getPercentageProgress:function(){return Math.round(100*
+(this.progress||0))+"%"},_hideAfterTimeout:function(){var a=this,e;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId);if("number"==typeof this.duration)e=this.duration;else if("info"==this.type||"success"==this.type)e="number"==typeof this.editor.config.notification_duration?this.editor.config.notification_duration:5E3;e&&(a._hideTimeoutId=setTimeout(function(){a.hide()},e))}},ka.prototype={add:function(a){this.notifications.push(a);this.element.append(a.element);1==this.element.getChildCount()&&
+(CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(a){var e=CKEDITOR.tools.indexOf(this.notifications,a);0>e||(this.notifications.splice(e,1),a.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var a=this.editor,e=a.config,c=new CKEDITOR.dom.element("div");c.addClass("cke_notifications_area");c.setAttribute("id","cke_notifications_area_"+a.name);c.setStyle("z-index",e.baseFloatZIndex-
+2);return c},_attachListeners:function(){var a=CKEDITOR.document.getWindow(),e=this.editor;a.on("scroll",this._uiBuffer.input);a.on("resize",this._uiBuffer.input);e.on("change",this._changeBuffer.input);e.on("floatingSpaceLayout",this._layout,this,null,20);e.on("blur",this._layout,this,null,20)},_removeListeners:function(){var a=CKEDITOR.document.getWindow(),e=this.editor;a.removeListener("scroll",this._uiBuffer.input);a.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);
+e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function a(){e.setStyle("left",w(p+f.width-d-b))}var e=this.element,c=this.editor,f=c.ui.contentsElement.getClientRect(),h=c.ui.contentsElement.getDocumentPosition(),c=c.ui.space("top"),m=c.getClientRect(),l=e.getClientRect(),k,d=this._notificationWidth,b=this._notificationMargin;k=CKEDITOR.document.getWindow();var g=k.getScrollPosition(),n=k.getViewPaneSize(),u=CKEDITOR.document.getBody(),
+r=u.getDocumentPosition(),w=CKEDITOR.tools.cssLength;d&&b||(k=this.element.getChild(0),d=this._notificationWidth=k.getClientRect().width,b=this._notificationMargin=parseInt(k.getComputedStyle("margin-left"),10)+parseInt(k.getComputedStyle("margin-right"),10));c.isVisible()&&m.bottom>f.top&&m.bottom<f.bottom-l.height?e.setStyles({position:"fixed",top:w(m.bottom)}):0<f.top?e.setStyles({position:"absolute",top:w(h.y)}):h.y+f.height-l.height>g.y?e.setStyles({position:"fixed",top:0}):e.setStyles({position:"absolute",
+top:w(h.y+f.height-l.height)});var p="fixed"==e.getStyle("position")?f.left:"static"!=u.getComputedStyle("position")?h.x-r.x:h.x;f.width<d+b?h.x+d+b>g.x+n.width?a():e.setStyle("left",w(p)):h.x+d+b>g.x+n.width?e.setStyle("left",w(p)):h.x+f.width/2+d/2+b>g.x+n.width?e.setStyle("left",w(p-h.x+g.x+n.width-d-b)):0>f.left+f.width-d-b?a():0>f.left+f.width/2-d/2?e.setStyle("left",w(p-h.x+g.x)):e.setStyle("left",w(p+f.width/2-d/2-b/2))}},CKEDITOR.plugins.notification=ja,"use strict",function(){function a(a,
+b,d){b.type||(b.type="auto");if(d&&!1===a.fire("beforePaste",b)||!b.dataValue&&b.dataTransfer.isEmpty())return!1;b.dataValue||(b.dataValue="");if(CKEDITOR.env.gecko&&"drop"==b.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()});return a.fire("paste",b)}function e(b){function d(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(a){b.readOnly&&"cut"==a.name||B.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on("copy",c);a.on("cut",c);a.on("cut",
+function(){b.readOnly||b.extractSelectedHtml()},null,null,999)}a.on(B.mainPasteEvent,function(a){"beforepaste"==B.mainPasteEvent&&D||y(a)});"beforepaste"==B.mainPasteEvent&&(a.on("paste",function(a){G||(f(),a.data.preventDefault(),y(a),k("paste"))}),a.on("contextmenu",h,null,null,0),a.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));a.on("beforecut",function(){!D&&l(b)});var e;a.attachListener(CKEDITOR.env.ie?a:b.document.getDocumentElement(),"mouseup",
+function(){e=setTimeout(function(){x()},0)});b.on("destroy",function(){clearTimeout(e)});a.on("keyup",x)}function c(a){return{type:a,canUndo:"cut"==a,startDisabled:!0,fakeKeystroke:"cut"==a?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&l();var a;var d=this.type;if(CKEDITOR.env.ie)a=k(d);else try{a=b.document.$.execCommand(d,!1,null)}catch(c){a=!1}a||b.showNotification(b.lang.clipboard[this.type+"Error"]);return a}}}function e(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+
+86,exec:function(b,d){function c(d,f){f="undefined"!==typeof f?f:!0;d?(d.method="paste",d.dataTransfer||(d.dataTransfer=B.initPasteDataTransfer()),a(b,d,f)):e&&b.showNotification(k,"info",b.config.clipboard_notificationDuration);b.fire("afterCommandExec",{name:"paste",command:g,returnValue:!!d})}d="undefined"!==typeof d&&null!==d?d:{};var g=this,e="undefined"!==typeof d.notification?d.notification:!0,f=d.type,h=CKEDITOR.tools.keystrokeToString(b.lang.common.keyboard,b.getCommandKeystroke(this)),k=
+"string"===typeof e?e:b.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof d?d:d.dataValue;f?b._.nextPasteType=f:delete b._.nextPasteType;"string"===typeof h?c({dataValue:h}):b.getClipboardData(c)}}}function f(){G=1;setTimeout(function(){G=0},100)}function h(){D=1;setTimeout(function(){D=0},10)}function k(a){var d=b.document,c=d.getBody(),e=!1,f=function(){e=!0};c.on(a,f);7<CKEDITOR.env.version?d.$.execCommand(a):d.$.selection.createRange().execCommand(a);
+c.removeListener(a,f);return e}function l(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var a=b.getSelection(),d,c,e;a.getType()==CKEDITOR.SELECTION_ELEMENT&&(d=a.getSelectedElement())&&(c=a.getRanges()[0],e=b.document.createText(""),e.insertBefore(d),c.setStartBefore(e),c.setEndAfter(d),a.selectRanges([c]),setTimeout(function(){d.getParent()&&(e.remove(),a.selectElement(d))},0))}}function m(a,d){var c=b.document,e=b.editable(),f=function(a){a.cancel()},h;if(!c.getById("cke_pastebin")){var k=b.getSelection(),
+l=k.createBookmarks();CKEDITOR.env.ie&&k.root.fire("selectionchange");var n=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&!e.is("body")||CKEDITOR.env.ie?"div":"body",c);n.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var p=0,c=c.getWindow();CKEDITOR.env.webkit?(e.append(n),n.addClass("cke_editable"),e.is("body")||(p="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),p=p.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(n);
+n.setStyles({position:"absolute",top:c.getScrollPosition().y-p+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&n.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(p=n.getParent().isReadOnly())?(n.setOpacity(0),n.setAttribute("contenteditable",!0)):n.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-10000px");b.on("selectionChange",f,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)h=
+e.once("blur",f,null,null,-100);p&&n.focus();p=new CKEDITOR.dom.range(n);p.selectNodeContents(n);var q=p.select();CKEDITOR.env.ie&&(h=e.once("blur",function(){b.lockSelection(q)}));var t=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=t);h&&h.removeListener();CKEDITOR.env.ie&&e.focus();k.selectBookmarks(l);n.remove();var a;CKEDITOR.env.webkit&&(a=n.getFirst())&&a.is&&a.hasClass("Apple-style-span")&&(n=a);b.removeListener("selectionChange",
+f);d(n.getHtml())},0)}}function A(){if("paste"==B.mainPasteEvent)return b.fire("beforePaste",{type:"auto",method:"paste"}),!1;b.focus();f();var a=b.focusManager;a.lock();if(b.editable().fire(B.mainPasteEvent)&&!k("paste"))return a.unlock(),!1;a.unlock();return!0}function q(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();f();"paste"==B.mainPasteEvent&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),
+setTimeout(function(){b.fire("saveSnapshot")},50)}}function y(d){var c={type:"auto",method:"paste",dataTransfer:B.initPasteDataTransfer(d)};c.dataTransfer.cacheData();var e=!1!==b.fire("beforePaste",c);e&&B.canClipboardApiBeTrusted(c.dataTransfer,b)?(d.data.preventDefault(),setTimeout(function(){a(b,c)},0)):m(d,function(d){c.dataValue=d.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&a(b,c)})}function x(){if("wysiwyg"==b.mode){var a=C("paste");b.getCommand("cut").setState(C("cut"));b.getCommand("copy").setState(C("copy"));
+b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function C(a){if(F&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var B=CKEDITOR.plugins.clipboard,D=0,G=0,F=0;(function(){b.on("key",q);b.on("contentDom",d);b.on("selectionChange",function(a){F=a.data.selection.getRanges()[0].checkReadOnly();
+x()});b.contextMenu&&b.contextMenu.addListener(function(a,b){F=b.getRanges()[0].checkReadOnly();return{cut:C("cut"),copy:C("copy"),paste:C("paste")}})})();(function(){function a(d,c,e,f,h){var k=b.lang.clipboard[c];b.addCommand(c,e);b.ui.addButton&&b.ui.addButton(d,{label:k,command:c,toolbar:"clipboard,"+f});b.addMenuItems&&b.addMenuItem(c,{label:k,command:c,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",e(),30,8)})();b.getClipboardData=
+function(a,d){function c(a){a.removeListener();a.cancel();d(a.data)}d||(d=a,a=null);b.on("paste",c,null,null,0);!1===A()&&(b.removeListener("paste",c),d(null))}}function c(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";
+return"htmlifiedtext"}function f(a,b){function d(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}b=b.replace(/\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi,"\x3cbr\x3e");b=b.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(b.match(/^[^<]$/))return b;CKEDITOR.env.webkit&&-1<b.indexOf("\x3cdiv\x3e")&&(b=b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),
+b.match(/<div>(<br>|)<\/div>/)&&(b="\x3cp\x3e"+b.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return d(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),b=b.replace(/<\/div><div>/g,"\x3cbr\x3e"),b=b.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(b=b.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<b.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(b="\x3cp\x3e"+b.replace(/(<br>){2,}/g,function(a){return d(a.length/4)})+"\x3c/p\x3e"));return l(a,b)}function h(){function a(){var b=
+{},d;for(d in CKEDITOR.dtd)"$"!=d.charAt(0)&&"div"!=d&&"span"!=d&&(b[d]=1);return b}var b={};return{get:function(d){return"plain-text"==d?b.plainText||(b.plainText=new CKEDITOR.filter("br")):"semantic-content"==d?((d=b.semanticContent)||(d=new CKEDITOR.filter,d.allow({$1:{elements:a(),attributes:!0,styles:!1,classes:!1}}),d=b.semanticContent=d),d):d?new CKEDITOR.filter(d):null}}}function m(a,b,d){b=CKEDITOR.htmlParser.fragment.fromHtml(b);var c=new CKEDITOR.htmlParser.basicWriter;d.applyTo(b,!0,!1,
+a.activeEnterMode);b.writeHtml(c);return c.getHtml()}function l(a,b){a.enterMode==CKEDITOR.ENTER_BR?b=b.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(b=b.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return b}function k(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function d(b){var d=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(d,e,f){e.select();a(b,{dataTransfer:f,
+method:"drop"},1);f.sourceEditor.fire("saveSnapshot");f.sourceEditor.editable().extractHtmlFromRange(d);f.sourceEditor.getSelection().selectRanges([d]);f.sourceEditor.fire("saveSnapshot")}function e(c,f){c.select();a(b,{dataTransfer:f,method:"drop"},1);d.resetDragDataTransfer()}function f(a,d,c){var e={$:a.data.$,target:a.data.getTarget()};d&&(e.dragRange=d);c&&(e.dropRange=c);!1===b.fire(a.name,e)&&a.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}
+var k=b.editable(),l=CKEDITOR.plugins.clipboard.getDropTarget(b),m=b.ui.space("top"),A=b.ui.space("bottom");d.preventDefaultDropOnElement(m);d.preventDefaultDropOnElement(A);k.attachListener(l,"dragstart",f);k.attachListener(b,"dragstart",d.resetDragDataTransfer,d,null,1);k.attachListener(b,"dragstart",function(a){d.initDragDataTransfer(a,b)},null,null,2);k.attachListener(b,"dragstart",function(){var a=d.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(d.dragStartContainerChildCount=
+a?h(a.startContainer):null,d.dragEndContainerChildCount=a?h(a.endContainer):null)},null,null,100);k.attachListener(l,"dragend",f);k.attachListener(b,"dragend",d.initDragDataTransfer,d,null,1);k.attachListener(b,"dragend",d.resetDragDataTransfer,d,null,100);k.attachListener(l,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var b=a.data.getTarget();b&&b.is&&b.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&
+a.data.preventDefault()}});k.attachListener(l,"drop",function(a){if(!a.data.$.defaultPrevented){a.data.preventDefault();var c=a.data.getTarget();if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is("html")){var c=d.getRangeAtDropPosition(a,b),e=d.dragRange;c&&f(a,e,c)}}},null,null,9999);k.attachListener(b,"drop",d.initDragDataTransfer,d,null,1);k.attachListener(b,"drop",function(a){if(a=a.data){var f=a.dropRange,h=a.dragRange,k=a.dataTransfer;k.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL?
+setTimeout(function(){d.internalDrop(h,f,k,b)},0):k.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,f,k):e(f,k)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"notification",init:function(a){var b,k=h();a.config.forcePasteAsPlainText?b="plain-text":a.config.pasteFilter?b=a.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in a.config||(b="semantic-content");a.pasteFilter=k.get(b);e(a);d(a);if(CKEDITOR.env.gecko){var l=["image/png","image/jpeg","image/gif"],w;a.on("paste",
+function(b){var d=b.data,c=d.dataTransfer;if(!d.dataValue&&"paste"==d.method&&c&&1==c.getFilesCount()&&w!=c.id&&(c=c.getFile(0),-1!=CKEDITOR.tools.indexOf(l,c.type))){var e=new FileReader;e.addEventListener("load",function(){b.data.dataValue='\x3cimg src\x3d"'+e.result+'" /\x3e';a.fire("paste",b.data)},!1);e.addEventListener("abort",function(){a.fire("paste",b.data)},!1);e.addEventListener("error",function(){a.fire("paste",b.data)},!1);e.readAsDataURL(c);w=d.dataTransfer.id;b.stop()}},null,null,1)}a.on("paste",
+function(b){b.data.dataTransfer||(b.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!b.data.dataValue){var d=b.data.dataTransfer,c=d.getData("text/html");if(c)b.data.dataValue=c,b.data.type="html";else if(c=d.getData("text/plain"))b.data.dataValue=a.editable().transformPlainTextToHtml(c),b.data.type="text"}},null,null,1);a.on("paste",function(a){var b=a.data.dataValue,d=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi,
+" "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<b.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var c,e,g=new CKEDITOR.dom.element("div");for(g.setHtml(b);1==g.getChildCount()&&
+(c=g.getFirst())&&c.type==CKEDITOR.NODE_ELEMENT&&(c.hasClass("cke_editable")||c.hasClass("cke_contents"));)g=e=c;e&&(b=e.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,c){return c.toLowerCase()in d?(a.data.preSniffing="html","\x3c"+c):b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,c){return c in d?(a.data.endsWithEOL=1,"\x3c/"+c+"\x3e"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,
+null,3);a.on("paste",function(b){b=b.data;var d=a._.nextPasteType||b.type,e=b.dataValue,h,l=a.config.clipboard_defaultContentType||"html",n=b.dataTransfer.getTransferType(a);h="html"==d||"html"==b.preSniffing?"html":c(e);delete a._.nextPasteType;"htmlifiedtext"==h&&(e=f(a.config,e));"text"==d&&"html"==h?e=m(a,e,k.get("plain-text")):n==CKEDITOR.DATA_TRANSFER_EXTERNAL&&a.pasteFilter&&!b.dontFilter&&(e=m(a,e,a.pasteFilter));b.startsWithEOL&&(e='\x3cbr data-cke-eol\x3d"1"\x3e'+e);b.endsWithEOL&&(e+='\x3cbr data-cke-eol\x3d"1"\x3e');
+"auto"==d&&(d="html"==h||"html"==l?"html":"text");b.type=d;b.dataValue=e;delete b.preSniffing;delete b.startsWithEOL;delete b.endsWithEOL},null,null,6);a.on("paste",function(b){b=b.data;b.dataValue&&(a.insertHtml(b.dataValue,b.type,b.range),setTimeout(function(){a.fire("afterPaste")},0))},null,null,1E3)}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,
+mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",canClipboardApiBeTrusted:function(a,b){return a.getTransferType(b)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!a.isEmpty()||CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS?!0:!1},getDropTarget:function(a){var b=a.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||b.isInline()?b:a.document},fixSplitNodesAfterDrop:function(a,
+b,d,c){function e(a,d,c){var g=a;g.type==CKEDITOR.NODE_TEXT&&(g=a.getParent());if(g.equals(d)&&c!=d.getChildCount())return a=b.startContainer.getChild(b.startOffset-1),d=b.startContainer.getChild(b.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&d&&d.type==CKEDITOR.NODE_TEXT&&(c=a.getLength(),a.setText(a.getText()+d.getText()),d.remove(),b.setStart(a,c),b.collapse(!0)),!0}var f=b.startContainer;"number"==typeof c&&"number"==typeof d&&f.type==CKEDITOR.NODE_ELEMENT&&(e(a.startContainer,f,d)||e(a.endContainer,
+f,c))},isDropRangeAffectedByDragRange:function(a,b){var d=b.startContainer,c=b.endOffset;return a.endContainer.equals(d)&&a.endOffset<=c||a.startContainer.getParent().equals(d)&&a.startContainer.getIndex()<c||a.endContainer.getParent().equals(d)&&a.endContainer.getIndex()<c?!0:!1},internalDrop:function(b,d,c,e){var f=CKEDITOR.plugins.clipboard,h=e.editable(),k,l;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,d,f.dragStartContainerChildCount,
+f.dragEndContainerChildCount);(l=this.isDropRangeAffectedByDragRange(b,d))||(k=b.createBookmark(!1));f=d.clone().createBookmark(!1);l&&(k=b.createBookmark(!1));b=k.startNode;d=k.endNode;l=f.startNode;d&&b.getPosition(l)&CKEDITOR.POSITION_PRECEDING&&d.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&l.insertBefore(b);b=e.createRange();b.moveToBookmark(k);h.extractHtmlFromRange(b,1);d=e.createRange();d.moveToBookmark(f);a(e,{dataTransfer:c,method:"drop",range:d},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(a,
+b){var d=a.data.$,c=d.clientX,e=d.clientY,f=b.getSelection(!0).getRanges()[0],h=b.createRange();if(a.data.testRange)return a.data.testRange;if(document.caretRangeFromPoint&&b.document.$.caretRangeFromPoint(c,e))d=b.document.$.caretRangeFromPoint(c,e),h.setStart(CKEDITOR.dom.node(d.startContainer),d.startOffset),h.collapse(!0);else if(d.rangeParent)h.setStart(CKEDITOR.dom.node(d.rangeParent),d.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&f&&b.editable().hasFocus)return f;
+if(document.body.createTextRange){b.focus();d=b.document.getBody().$.createTextRange();try{for(var k=!1,l=0;20>l&&!k;l++){if(!k)try{d.moveToPoint(c,e-l),k=!0}catch(m){}if(!k)try{d.moveToPoint(c,e+l),k=!0}catch(q){}}if(k){var y="cke-temp-"+(new Date).getTime();d.pasteHTML('\x3cspan id\x3d"'+y+'"\x3e​\x3c/span\x3e');var x=b.document.getById(y);h.moveToPosition(x,CKEDITOR.POSITION_BEFORE_START);x.remove()}else{var C=b.document.$.elementFromPoint(c,e),B=new CKEDITOR.dom.element(C),D;if(B.equals(b.editable())||
+"html"==B.getName())return f&&f.startContainer&&!f.startContainer.equals(b.editable())?f:null;D=B.getClientRect();c<D.left?h.setStartAt(B,CKEDITOR.POSITION_AFTER_START):h.setStartAt(B,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(G){return null}}else return null}return h},initDragDataTransfer:function(a,b){var d=a.data.$?a.data.$.dataTransfer:null,c=new this.dataTransfer(d,b);d?this.dragData&&c.id==this.dragData.id?c=this.dragData:this.dragData=c:this.dragData?c=this.dragData:this.dragData=
+c;a.data.dataTransfer=c},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,b){if(this.isCustomCopyCutSupported){if(a&&a.data&&a.data.$){var d=new this.dataTransfer(a.data.$.clipboardData,b);this.copyCutData&&d.id==this.copyCutData.id?(d=this.copyCutData,d.$=a.data.$.clipboardData):this.copyCutData=d;return d}return new this.dataTransfer(null,b)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&&a.data.$.clipboardData||null,b)},preventDefaultDropOnElement:function(a){a&&
+a.on("dragover",k)}};var b=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(a,d){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(b);this.id||(this.id="Text"==b?"":"cke-"+CKEDITOR.tools.getUniqueId());
+if("Text"!=b)try{this.$.setData(b,this.id)}catch(c){}d&&(this.sourceEditor=d,this.setData("text/html",d.getSelectedHtml(1)),"Text"==b||this.getData("text/plain")||this.setData("text/plain",d.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(a,b){a=this._.normalizeType(a);var d=this._.data[a],c;if(void 0===d||null===d||""===d)try{d=this.$.getData(a)}catch(e){}if(void 0===
+d||null===d||""===d)d="";"text/html"!=a||b?"Text"==a&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==d.substring(0,7)&&(d=""):(d=d.replace(this._.metaRegExp,""),(c=this._.bodyRegExp.exec(d))&&c.length&&(d=c[1],d=d.replace(this._.fragmentRegExp,"")));"string"===typeof d&&(c=d.indexOf("\x3c/html\x3e"),d=-1!==c?d.substring(0,c+7):d);return d},setData:function(a,d){a=this._.normalizeType(a);this._.data[a]=d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a){"Text"==b&&
+"Text"==a&&(this.id=d);try{this.$.setData(a,d)}catch(c){}}},getTransferType:function(a){return this.sourceEditor?this.sourceEditor==a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function a(d){d=b._.normalizeType(d);var c=b.getData(d,!0);c&&(b._.data[d]=c)}if(this.$){var b=this,d,c;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(d=0;d<this.$.types.length;d++)a(this.$.types[d])}else a("Text"),
+a("URL");c=this._getImageFromClipboard();if(this.$&&this.$.files||c){this._.files=[];if(this.$.files&&this.$.files.length)for(d=0;d<this.$.files.length;d++)this._.files.push(this.$.files[d]);0===this._.files.length&&c&&this._.files.push(c)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(a){return this._.files.length?this._.files[a]:this.$&&this.$.files&&this.$.files.length?
+this.$.files[a]:0===a?this._getImageFromClipboard():void 0},isEmpty:function(){var a={},d;if(this.getFilesCount())return!1;for(d in this._.data)a[d]=1;if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c=0;c<this.$.types.length;c++)a[this.$.types[c]]=1}else a.Text=1,a.URL=1;"Text"!=b&&(a[b]=0);for(d in a)if(a[d]&&""!==this.getData(d))return!1;return!0},_getImageFromClipboard:function(){var a;if(this.$&&this.$.items&&this.$.items[0])try{if((a=this.$.items[0].getAsFile())&&
+a.type)return a}catch(b){}}}}(),CKEDITOR.config.clipboard_notificationDuration=1E4,function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,c){c&&CKEDITOR.tools.extend(this,c);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};
+var a=CKEDITOR.addTemplate("panel",'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),e=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),c=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');
+CKEDITOR.ui.panel.prototype={render:function(f,h){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),d=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&d.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});d=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(c.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+
 d+");"},m)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var d=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(d)?a.data.preventDefault():(27==d||d==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(d)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(d)}else a=this.document.getById(this.id);this._.holder=a}return a};var m={editorId:f.id,id:this.id,langCode:f.langCode,
 dir:f.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":f.config.baseFloatZIndex+1};if(this.isFramed){var l=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";m.frame=e.output({id:this.id+"_frame",src:l})}l=a.output(m);h&&h.push(l);return l},addBlock:function(a,c){c=this._.blocks[a]=c instanceof CKEDITOR.ui.panel.block?c:new CKEDITOR.ui.panel.block(this.getHolderElement(),
 c);this._.currentBlock||this.showBlock(a);return c},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){a=this._.blocks[a];var c=this._.currentBlock,e=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");c&&c.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",e);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=
@@ -705,12 +705,12 @@ getItems:function(){return this.element.getElementsByTag("a")}},proto:{show:func
 1));case "prev":l=this._.focusIndex;for(e=this.element.getElementsByTag("a");0<l&&(k=e.getItem(--l));){if(k.getAttribute("_cke_focus")&&k.$.offsetWidth){this._.focusIndex=l;k.focus();break}k=null}return k||c?!1:(this._.focusIndex=e.count(),this.onKeyDown(a,1));case "click":case "mouseup":return l=this._.focusIndex,(k=0<=l&&this.element.getElementsByTag("a").getItem(l))&&(k.$[e]?k.$[e]():k.$["on"+e]()),!1}return!0}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function a(a,
 f,h,m,l){l=CKEDITOR.tools.genKey(f.getUniqueId(),h.getUniqueId(),a.lang.dir,a.uiColor||"",m.css||"",l||"");var k=e[l];k||(k=e[l]=new CKEDITOR.ui.panel(f,m),k.element=h.append(CKEDITOR.dom.element.createFromHtml(k.render(a),f)),k.element.setStyles({display:"none",position:"absolute"}));return k}var e={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(c,e,h,m){function l(){g.hide()}h.forceIFrame=1;h.toolbarRelated&&c.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+
 c.name));var k=e.getDocument();m=a(c,k,e,h,m||0);var d=m.element,b=d.getFirst(),g=this;d.disableContextMenu();this.element=d;this._={editor:c,panel:m,parentElement:e,definition:h,document:k,iframe:b,children:[],dir:c.lang.dir,showBlockParams:null};c.on("mode",l);c.on("resize",l);k.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(a,e){return this._.panel.addBlock(a,e)},addListBlock:function(a,e){return this._.panel.addListBlock(a,e)},getBlock:function(a){return this._.panel.getBlock(a)},
-showBlock:function(a,e,h,m,l,k){var d=this._.panel,b=d.showBlock(a);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var g=this._.editor.editable();this._.returnFocus=g.hasFocus?g:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var n=this.element,g=this._.iframe,g=CKEDITOR.env.ie&&!CKEDITOR.env.edge?g:new CKEDITOR.dom.window(g.$.contentWindow),t=n.getDocument(),u=this._.parentElement.getPositionedAncestor(),w=e.getDocumentPosition(t),t=u?u.getDocumentPosition(t):
-{x:0,y:0},p="rtl"==this._.dir,r=w.x+(m||0)-t.x,v=w.y+(l||0)-t.y;!p||1!=h&&4!=h?p||2!=h&&3!=h||(r+=e.$.offsetWidth-1):r+=e.$.offsetWidth;if(3==h||4==h)v+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:v+"px",left:0,display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(g);this._.blurSet||(CKEDITOR.event.useCapture=!0,g.on("blur",function(a){function b(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&
+showBlock:function(a,e,h,m,l,k){var d=this._.panel,b=d.showBlock(a);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var g=this._.editor.editable();this._.returnFocus=g.hasFocus?g:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var n=this.element,g=this._.iframe,g=CKEDITOR.env.ie&&!CKEDITOR.env.edge?g:new CKEDITOR.dom.window(g.$.contentWindow),u=n.getDocument(),r=this._.parentElement.getPositionedAncestor(),w=e.getDocumentPosition(u),u=r?r.getDocumentPosition(u):
+{x:0,y:0},p="rtl"==this._.dir,t=w.x+(m||0)-u.x,v=w.y+(l||0)-u.y;!p||1!=h&&4!=h?p||2!=h&&3!=h||(t+=e.$.offsetWidth-1):t+=e.$.offsetWidth;if(3==h||4==h)v+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:v+"px",left:0,display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(g);this._.blurSet||(CKEDITOR.event.useCapture=!0,g.on("blur",function(a){function b(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&
 this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(b,0,this)):b.call(this))},this),g.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(g.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),g.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);d.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&
 !1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=n;a.removeStyle("width");if(b.autoSize){var c=b.element.getDocument(),c=(CKEDITOR.env.webkit||CKEDITOR.env.edge?b.element:c.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<c&&(c+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",c+10+"px");c=b.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<c&&(c+=(a.$.offsetHeight||0)-(a.$.clientHeight||
-0)+3);a.setStyle("height",c+"px");d._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");p&&(r-=n.$.offsetWidth);n.setStyle("left",r+"px");var c=d.element.getWindow(),a=n.$.getBoundingClientRect(),c=c.getViewPaneSize(),e=a.width||a.right-a.left,g=a.height||a.bottom-a.top,f=p?a.right:c.width-a.left,h=p?c.width-a.right:a.left;p?f<e&&(r=h>e?r+e:c.width>e?r-a.left:r-a.right+c.width):f<e&&(r=h>e?r-e:c.width>e?r-a.right+c.width:r-a.left);e=a.top;c.height-
-a.top<g&&(v=e>g?v-g:c.height>g?v-a.bottom+c.height:v-a.top);CKEDITOR.env.ie&&(c=a=new CKEDITOR.dom.element(n.$.offsetParent),"html"==c.getName()&&(c=c.getDocument().getBody()),"rtl"==c.getComputedStyle("direction")&&(r=CKEDITOR.env.ie8Compat?r-2*n.getDocument().getDocumentElement().$.scrollLeft:r-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),l;(l=a.getCustomData("activePanel"))&&l.onHide&&l.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:v+"px",left:r+"px"});n.setOpacity(1);
+0)+3);a.setStyle("height",c+"px");d._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");p&&(t-=n.$.offsetWidth);n.setStyle("left",t+"px");var c=d.element.getWindow(),a=n.$.getBoundingClientRect(),c=c.getViewPaneSize(),e=a.width||a.right-a.left,g=a.height||a.bottom-a.top,f=p?a.right:c.width-a.left,h=p?c.width-a.right:a.left;p?f<e&&(t=h>e?t+e:c.width>e?t-a.left:t-a.right+c.width):f<e&&(t=h>e?t-e:c.width>e?t-a.right+c.width:t-a.left);e=a.top;c.height-
+a.top<g&&(v=e>g?v-g:c.height>g?v-a.bottom+c.height:v-a.top);CKEDITOR.env.ie&&(c=a=new CKEDITOR.dom.element(n.$.offsetParent),"html"==c.getName()&&(c=c.getDocument().getBody()),"rtl"==c.getComputedStyle("direction")&&(t=CKEDITOR.env.ie8Compat?t-2*n.getDocument().getDocumentElement().$.scrollLeft:t-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),l;(l=a.getCustomData("activePanel"))&&l.onHide&&l.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:v+"px",left:t+"px"});n.setOpacity(1);
 k&&k()},this);d.isLoaded?a():d.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();b.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){b.markFirstDisplayed?b.markFirstDisplayed():b._.markFirstDisplayed()},0):b.markFirstDisplayed?b.markFirstDisplayed():b._.markFirstDisplayed();this._.editor.fire("panelShow",this)},
 0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=
 a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var e=this._.panel;
@@ -722,33 +722,33 @@ e+'\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton
 h=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,c){c=this._.definition=c||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=c.level||1;var e=CKEDITOR.tools.extend({},c.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),d=e.block.attributes=e.attributes||{};!d.role&&(d.role="menu");this._.panelDefinition=
 e},_:{onShow:function(){var a=this.editor.getSelection(),c=a&&a.getStartElement(),e=this.editor.elementPath(),d=this._.listeners;this.removeAll();for(var b=0;b<d.length;b++){var g=d[b](c,a,e);if(g)for(var f in g){var h=this.editor.getMenuItem(f);!h||h.command&&!this.editor.getCommand(h.command).state||(h.state=g[f],this.add(h))}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var c=this.parent;c?c._.panel.hideChild(1):
 27==a&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var c=this._.subMenu,e=this.items[a];if(e=e.getItems&&e.getItems()){c?c.removeAll():(c=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),c.parent=this,c._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var d in e){var b=this.editor.getMenuItem(d);b&&(b.state=e[d],c.add(b))}var g=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+
-String(a));setTimeout(function(){c.show(g,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(c,e,f,d){if(!this.parent&&(this._.onShow(),!this.items.length))return;e=e||("rtl"==this.editor.lang.dir?2:1);var b=this.items,g=this.editor,h=this._.panel,t=this._.element;if(!h){h=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);
-h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);t=h.addBlock(this.id,this._.panelDefinition.block);t.autoSize=!0;var u=t.keys;u[40]="next";u[9]="next";u[38]="prev";u[CKEDITOR.SHIFT+9]="prev";u["rtl"==g.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";u[32]=CKEDITOR.env.ie?"mouseup":
-"click";CKEDITOR.env.ie&&(u[13]="mouseup");t=this._.element=t.element;u=t.getDocument();u.getBody().setStyle("overflow","hidden");u.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,g.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);
-this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}a(b);for(var u=g.elementPath(),u=['\x3cdiv class\x3d"cke_menu'+(u&&u.direction()!=g.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],w=b.length,p=w&&b[0].group,r=0;r<w;r++){var v=b[r];p!=v.group&&(u.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),
-p=v.group);v.render(this,r,u)}u.push("\x3c/div\x3e");t.setHtml(u.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,c,e,f,d):h.showBlock(this.id,c,e,f,d);g.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,c,e){CKEDITOR.tools.extend(this,e,{order:0,className:"cke_menubutton__"+c});this.group=
-a._.menuGroups[this.group];this.editor=a;this.name=c},proto:{render:function(a,e,k){var d=a.id+String(e),b="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,g="",n=this.editor,t,u,w=b==CKEDITOR.TRISTATE_ON?"on":b==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(g=' aria-checked\x3d"'+(b==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var p=this.getItems,r="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",v=this.name;this.icon&&!/\./.test(this.icon)&&
-(v=this.icon);this.command&&(t=n.getCommand(this.command),(t=n.getCommandKeystroke(t))&&(u=CKEDITOR.tools.keystrokeToString(n.lang.common.keyboard,t)));a={id:d,name:this.name,iconName:v,label:this.label,cls:this.className||"",state:w,hasPopup:p?"true":"false",disabled:b==CKEDITOR.TRISTATE_DISABLED,title:this.label+(u?" ("+u.display+")":""),ariaShortcut:u?n.lang.common.keyboardShortcut+" "+u.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,
-clickFn:a._.itemClickFn,index:e,iconStyle:CKEDITOR.skin.getIconStyle(v,"rtl"==this.editor.lang.dir,v==this.icon?null:this.icon,this.iconOffset),shortcutHtml:u?h.output({shortcut:u.display}):"",arrowHtml:p?f.output({label:r}):"",role:this.role?this.role:"menuitem",ariaChecked:g};c.output(a,k)}}})}(),CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div",
+String(a));setTimeout(function(){c.show(g,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(c,e,f,d){if(!this.parent&&(this._.onShow(),!this.items.length))return;e=e||("rtl"==this.editor.lang.dir?2:1);var b=this.items,g=this.editor,h=this._.panel,u=this._.element;if(!h){h=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);
+h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);u=h.addBlock(this.id,this._.panelDefinition.block);u.autoSize=!0;var r=u.keys;r[40]="next";r[9]="next";r[38]="prev";r[CKEDITOR.SHIFT+9]="prev";r["rtl"==g.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";r[32]=CKEDITOR.env.ie?"mouseup":
+"click";CKEDITOR.env.ie&&(r[13]="mouseup");u=this._.element=u.element;r=u.getDocument();r.getBody().setStyle("overflow","hidden");r.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,g.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);
+this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}a(b);for(var r=g.elementPath(),r=['\x3cdiv class\x3d"cke_menu'+(r&&r.direction()!=g.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],w=b.length,p=w&&b[0].group,t=0;t<w;t++){var v=b[t];p!=v.group&&(r.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),
+p=v.group);v.render(this,t,r)}r.push("\x3c/div\x3e");u.setHtml(r.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,c,e,f,d):h.showBlock(this.id,c,e,f,d);g.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,c,e){CKEDITOR.tools.extend(this,e,{order:0,className:"cke_menubutton__"+c});this.group=
+a._.menuGroups[this.group];this.editor=a;this.name=c},proto:{render:function(a,e,k){var d=a.id+String(e),b="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,g="",n=this.editor,u,r,w=b==CKEDITOR.TRISTATE_ON?"on":b==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(g=' aria-checked\x3d"'+(b==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var p=this.getItems,t="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",v=this.name;this.icon&&!/\./.test(this.icon)&&
+(v=this.icon);this.command&&(u=n.getCommand(this.command),(u=n.getCommandKeystroke(u))&&(r=CKEDITOR.tools.keystrokeToString(n.lang.common.keyboard,u)));a={id:d,name:this.name,iconName:v,label:this.label,cls:this.className||"",state:w,hasPopup:p?"true":"false",disabled:b==CKEDITOR.TRISTATE_DISABLED,title:this.label+(r?" ("+r.display+")":""),ariaShortcut:r?n.lang.common.keyboardShortcut+" "+r.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,
+clickFn:a._.itemClickFn,index:e,iconStyle:CKEDITOR.skin.getIconStyle(v,"rtl"==this.editor.lang.dir,v==this.icon?null:this.icon,this.iconOffset),shortcutHtml:r?h.output({shortcut:r.display}):"",arrowHtml:p?f.output({label:t}):"",role:this.role?this.role:"menuitem",ariaChecked:g};c.output(a,k)}}})}(),CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div",
 CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){a=a.data;var f=CKEDITOR.env.webkit?c:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!f){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var f=this.editor,
 l=(new CKEDITOR.dom.elementPath(a.getTarget(),f.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);l&&"false"==l.getAttribute("contenteditable")&&f.getSelection().fake(l)}var l=a.getTarget().getDocument(),k=a.getTarget().getDocument().getDocumentElement(),f=!l.equals(CKEDITOR.document),l=l.getWindow().getScrollPosition(),d=f?a.$.clientX:a.$.pageX||l.x+a.$.clientX,b=f?a.$.clientY:a.$.pageY||l.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(k,null,d,b)},CKEDITOR.env.ie?
 200:0,this)}},this);if(CKEDITOR.env.webkit){var c,f=function(){c=0};a.on("keydown",function(a){c=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",f);a.on("contextmenu",f)}},open:function(a,e,c,f){!1!==this.editor.config.enableContextMenu&&(this.editor.focus(),a=a||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(a,e,c,f))}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),
 !1!==a.config.browserContextMenuOnCtrl)});a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}}),function(){function a(a,c){function l(b){b=g.list[b];var d;b.equals(a.editable())||"true"==b.getAttribute("contenteditable")?(d=a.createRange(),d.selectNodeContents(b),d=d.select()):(d=a.getSelection(),d.selectElement(b));CKEDITOR.env.ie&&a.fire("selectionChange",
 {selection:d,path:new CKEDITOR.dom.elementPath(b)});a.focus()}function k(){b&&b.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete g.list}var d=a.ui.spaceId("path"),b,g=a._.elementsPath,n=g.idBase;c.html+='\x3cspan id\x3d"'+d+'_label" class\x3d"cke_voice_label"\x3e'+a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+d+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+d+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';
-a.on("uiReady",function(){var b=a.ui.space("path");b&&a.focusManager.add(b,1)});g.onClick=l;var t=CKEDITOR.tools.addFunction(l),u=CKEDITOR.tools.addFunction(function(b,d){var c=g.idBase,e;d=new CKEDITOR.dom.event(d);e="rtl"==a.lang.dir;switch(d.getKeystroke()){case e?39:37:case 9:return(e=CKEDITOR.document.getById(c+(b+1)))||(e=CKEDITOR.document.getById(c+"0")),e.focus(),!1;case e?37:39:case CKEDITOR.SHIFT+9:return(e=CKEDITOR.document.getById(c+(b-1)))||(e=CKEDITOR.document.getById(c+(g.list.length-
-1))),e.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return l(b),!1}return!0});a.on("selectionChange",function(){for(var c=[],e=g.list=[],k=[],l=g.filters,m=!0,B=a.elementPath().elements,q,z=B.length;z--;){var y=B[z],x=0;q=y.data("cke-display-name")?y.data("cke-display-name"):y.data("cke-real-element-type")?y.data("cke-real-element-type"):y.getName();(m=y.hasAttribute("contenteditable")?"true"==y.getAttribute("contenteditable"):m)||y.hasAttribute("contenteditable")||(x=1);for(var D=0;D<l.length;D++){var C=
-l[D](y,q);if(!1===C){x=1;break}q=C||q}x||(e.unshift(y),k.unshift(q))}e=e.length;for(l=0;l<e;l++)q=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,q),q=f.output({id:n+l,label:m,text:q,jsTitle:"javascript:void('"+q+"')",index:l,keyDownFn:u,clickFn:t}),c.unshift(q);b||(b=CKEDITOR.document.getById(d));k=b;k.setHtml(c.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",k);a.on("contentDomUnload",k);a.addCommand("elementsPathFocus",
+a.on("uiReady",function(){var b=a.ui.space("path");b&&a.focusManager.add(b,1)});g.onClick=l;var u=CKEDITOR.tools.addFunction(l),r=CKEDITOR.tools.addFunction(function(b,d){var c=g.idBase,e;d=new CKEDITOR.dom.event(d);e="rtl"==a.lang.dir;switch(d.getKeystroke()){case e?39:37:case 9:return(e=CKEDITOR.document.getById(c+(b+1)))||(e=CKEDITOR.document.getById(c+"0")),e.focus(),!1;case e?37:39:case CKEDITOR.SHIFT+9:return(e=CKEDITOR.document.getById(c+(b-1)))||(e=CKEDITOR.document.getById(c+(g.list.length-
+1))),e.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return l(b),!1}return!0});a.on("selectionChange",function(){for(var c=[],e=g.list=[],k=[],l=g.filters,m=!0,A=a.elementPath().elements,q,y=A.length;y--;){var x=A[y],C=0;q=x.data("cke-display-name")?x.data("cke-display-name"):x.data("cke-real-element-type")?x.data("cke-real-element-type"):x.getName();(m=x.hasAttribute("contenteditable")?"true"==x.getAttribute("contenteditable"):m)||x.hasAttribute("contenteditable")||(C=1);for(var B=0;B<l.length;B++){var D=
+l[B](x,q);if(!1===D){C=1;break}q=D||q}C||(e.unshift(x),k.unshift(q))}e=e.length;for(l=0;l<e;l++)q=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,q),q=f.output({id:n+l,label:m,text:q,jsTitle:"javascript:void('"+q+"')",index:l,keyDownFn:r,clickFn:u}),c.unshift(q);b||(b=CKEDITOR.document.getById(d));k=b;k.setHtml(c.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",k);a.on("contentDomUnload",k);a.addCommand("elementsPathFocus",
 e.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var e={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},c="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(c+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var f=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+
 c+' hidefocus\x3d"true"  onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e');CKEDITOR.plugins.add("elementspath",{init:function(c){c._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};c.on("uiSpace",function(e){"bottom"==e.data.space&&a(c,e.data)})}})}(),function(){function a(a,d,c){c=a.config.forceEnterMode||
 c;if("wysiwyg"==a.mode){d||(d=a.activeEnterMode);var e=a.elementPath();e&&!e.isContextFor("p")&&(d=CKEDITOR.ENTER_BR,c=1);a.fire("saveSnapshot");d==CKEDITOR.ENTER_BR?l(a,d,null,c):k(a,d,null,c);a.fire("saveSnapshot")}}function e(a){a=a.getSelection().getRanges(!0);for(var d=a.length-1;0<d;d--)a[d].deleteContents();return a[0]}function c(a){var d=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(a.root.equals(d))return a;
 d=new CKEDITOR.dom.range(d);d.moveToRange(a);return d}CKEDITOR.plugins.add("enterkey",{init:function(b){b.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){a(b)}});b.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){a(b,b.activeShiftEnterMode,1)}});b.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var f=CKEDITOR.dom.walker.whitespaces(),h=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(a,g,k,m){if(k=k||e(a)){k=
-c(k);var u=k.document,w=k.checkStartOfBlock(),p=k.checkEndOfBlock(),r=a.elementPath(k.startContainer),v=r.block,A=g==CKEDITOR.ENTER_DIV?"div":"p",B;if(w&&p){if(v&&(v.is("li")||v.getParent().is("li"))){v.is("li")||(v=v.getParent());k=v.getParent();B=k.getParent();m=!v.hasPrevious();var q=!v.hasNext(),A=a.getSelection(),z=A.createBookmarks(),w=v.getDirection(1),p=v.getAttribute("class"),y=v.getAttribute("style"),x=B.getDirection(1)!=w;a=a.enterMode!=CKEDITOR.ENTER_BR||x||y||p;if(B.is("li"))m||q?(m&&
-q&&k.remove(),v[q?"insertAfter":"insertBefore"](B)):v.breakParent(B);else{if(a)if(r.block.is("li")?(B=u.createElement(g==CKEDITOR.ENTER_P?"p":"div"),x&&B.setAttribute("dir",w),y&&B.setAttribute("style",y),p&&B.setAttribute("class",p),v.moveChildren(B)):B=r.block,m||q)B[m?"insertBefore":"insertAfter"](k);else v.breakParent(k),B.insertAfter(k);else if(v.appendBogus(!0),m||q)for(;u=v[m?"getFirst":"getLast"]();)u[m?"insertBefore":"insertAfter"](k);else for(v.breakParent(k);u=v.getLast();)u.insertAfter(k);
-v.remove()}A.selectBookmarks(z);return}if(v&&v.getParent().is("blockquote")){v.breakParent(v.getParent());v.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||v.getPrevious().remove();v.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||v.getNext().remove();k.moveToElementEditStart(v);k.select();return}}else if(v&&v.is("pre")&&!p){l(a,g,k,m);return}if(w=k.splitBlock(A)){g=w.previousBlock;v=w.nextBlock;r=w.wasStartOfBlock;a=w.wasEndOfBlock;v?(z=v.getParent(),z.is("li")&&(v.breakParent(z),
-v.move(v.getNext(),1))):g&&(z=g.getParent())&&z.is("li")&&(g.breakParent(z),z=g.getNext(),k.moveToElementEditStart(z),g.move(g.getPrevious()));if(r||a){if(g){if(g.is("li")||!d.test(g.getName())&&!g.is("pre"))B=g.clone()}else v&&(B=v.clone());B?m&&!B.is("li")&&B.renameNode(A):z&&z.is("li")?B=z:(B=u.createElement(A),g&&(q=g.getDirection())&&B.setAttribute("dir",q));if(u=w.elementPath)for(m=0,A=u.elements.length;m<A;m++){z=u.elements[m];if(z.equals(u.block)||z.equals(u.blockLimit))break;CKEDITOR.dtd.$removeEmpty[z.getName()]&&
-(z=z.clone(),B.moveChildren(z),B.append(z))}B.appendBogus();B.getParent()||k.insertNode(B);B.is("li")&&B.removeAttribute("value");!CKEDITOR.env.ie||!r||a&&g.getChildCount()||(k.moveToElementEditStart(a?g:B),k.select());k.moveToElementEditStart(r&&!a?v:B)}else v.is("li")&&(B=k.clone(),B.selectNodeContents(v),B=new CKEDITOR.dom.walker(B),B.evaluator=function(a){return!(h(a)||f(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(z=B.next())&&
-z.type==CKEDITOR.NODE_ELEMENT&&z.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?u.createElement("br"):u.createText(" ")).insertBefore(z)),v&&k.moveToElementEditStart(v);k.select();k.scrollIntoView()}}},enterBr:function(a,c,f,h){if(f=f||e(a)){var l=f.document,m=f.checkEndOfBlock(),p=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),r=p.block,v=r&&p.block.getName();h||"li"!=v?(!h&&m&&d.test(v)?(m=r.getDirection())?(l=l.createElement("div"),l.setAttribute("dir",m),l.insertAfter(r),f.setStart(l,
-0)):(l.createElement("br").insertAfter(r),CKEDITOR.env.gecko&&l.createText("").insertAfter(r),f.setStartAt(r.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==v&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?l.createText("\r"):l.createElement("br"),f.deleteContents(),f.insertNode(a),CKEDITOR.env.needsBrFiller?(l.createText("﻿").insertAfter(a),m&&(r||p.blockLimit).appendBogus(),a.getNext().$.nodeValue="",f.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):
+c(k);var r=k.document,w=k.checkStartOfBlock(),p=k.checkEndOfBlock(),t=a.elementPath(k.startContainer),v=t.block,z=g==CKEDITOR.ENTER_DIV?"div":"p",A;if(w&&p){if(v&&(v.is("li")||v.getParent().is("li"))){v.is("li")||(v=v.getParent());k=v.getParent();A=k.getParent();m=!v.hasPrevious();var q=!v.hasNext(),z=a.getSelection(),y=z.createBookmarks(),w=v.getDirection(1),p=v.getAttribute("class"),x=v.getAttribute("style"),C=A.getDirection(1)!=w;a=a.enterMode!=CKEDITOR.ENTER_BR||C||x||p;if(A.is("li"))m||q?(m&&
+q&&k.remove(),v[q?"insertAfter":"insertBefore"](A)):v.breakParent(A);else{if(a)if(t.block.is("li")?(A=r.createElement(g==CKEDITOR.ENTER_P?"p":"div"),C&&A.setAttribute("dir",w),x&&A.setAttribute("style",x),p&&A.setAttribute("class",p),v.moveChildren(A)):A=t.block,m||q)A[m?"insertBefore":"insertAfter"](k);else v.breakParent(k),A.insertAfter(k);else if(v.appendBogus(!0),m||q)for(;r=v[m?"getFirst":"getLast"]();)r[m?"insertBefore":"insertAfter"](k);else for(v.breakParent(k);r=v.getLast();)r.insertAfter(k);
+v.remove()}z.selectBookmarks(y);return}if(v&&v.getParent().is("blockquote")){v.breakParent(v.getParent());v.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||v.getPrevious().remove();v.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||v.getNext().remove();k.moveToElementEditStart(v);k.select();return}}else if(v&&v.is("pre")&&!p){l(a,g,k,m);return}if(w=k.splitBlock(z)){g=w.previousBlock;v=w.nextBlock;t=w.wasStartOfBlock;a=w.wasEndOfBlock;v?(y=v.getParent(),y.is("li")&&(v.breakParent(y),
+v.move(v.getNext(),1))):g&&(y=g.getParent())&&y.is("li")&&(g.breakParent(y),y=g.getNext(),k.moveToElementEditStart(y),g.move(g.getPrevious()));if(t||a){if(g){if(g.is("li")||!d.test(g.getName())&&!g.is("pre"))A=g.clone()}else v&&(A=v.clone());A?m&&!A.is("li")&&A.renameNode(z):y&&y.is("li")?A=y:(A=r.createElement(z),g&&(q=g.getDirection())&&A.setAttribute("dir",q));if(r=w.elementPath)for(m=0,z=r.elements.length;m<z;m++){y=r.elements[m];if(y.equals(r.block)||y.equals(r.blockLimit))break;CKEDITOR.dtd.$removeEmpty[y.getName()]&&
+(y=y.clone(),A.moveChildren(y),A.append(y))}A.appendBogus();A.getParent()||k.insertNode(A);A.is("li")&&A.removeAttribute("value");!CKEDITOR.env.ie||!t||a&&g.getChildCount()||(k.moveToElementEditStart(a?g:A),k.select());k.moveToElementEditStart(t&&!a?v:A)}else v.is("li")&&(A=k.clone(),A.selectNodeContents(v),A=new CKEDITOR.dom.walker(A),A.evaluator=function(a){return!(h(a)||f(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(y=A.next())&&
+y.type==CKEDITOR.NODE_ELEMENT&&y.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?r.createElement("br"):r.createText(" ")).insertBefore(y)),v&&k.moveToElementEditStart(v);k.select();k.scrollIntoView()}}},enterBr:function(a,c,f,h){if(f=f||e(a)){var l=f.document,m=f.checkEndOfBlock(),p=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),t=p.block,v=t&&p.block.getName();h||"li"!=v?(!h&&m&&d.test(v)?(m=t.getDirection())?(l=l.createElement("div"),l.setAttribute("dir",m),l.insertAfter(t),f.setStart(l,
+0)):(l.createElement("br").insertAfter(t),CKEDITOR.env.gecko&&l.createText("").insertAfter(t),f.setStartAt(t.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==v&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?l.createText("\r"):l.createElement("br"),f.deleteContents(),f.insertNode(a),CKEDITOR.env.needsBrFiller?(l.createText("﻿").insertAfter(a),m&&(t||p.blockLimit).appendBogus(),a.getNext().$.nodeValue="",f.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):
 f.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),f.collapse(!0),f.select(),f.scrollIntoView()):k(a,c,f,h)}}};var m=CKEDITOR.plugins.enterkey,l=m.enterBr,k=m.enterBlock,d=/^h[1-6]$/}(),function(){function a(a,c){var f={},h=[],m={nbsp:" ",shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,d){var e=c?"\x26"+d+";":m[d];f[e]=c?m[d]:"\x26"+d+";";h.push(e);return""});if(!c&&a){a=a.split(",");var l=document.createElement("div"),k;l.innerHTML=
 "\x26"+a.join(";\x26")+";";k=l.innerHTML;l=null;for(l=0;l<k.length;l++){var d=k.charAt(l);f[d]="\x26"+a[l]+";";h.push(d)}}f.regex=h.join(c?"|":"");return f}CKEDITOR.plugins.add("entities",{afterInit:function(e){function c(a){return d[a]}function f(a){return"force"!=h.entities_processNumerical&&l[a]?l[a]:"\x26#"+a.charCodeAt(0)+";"}var h=e.config;if(e=(e=e.dataProcessor)&&e.htmlFilter){var m=[];!1!==h.basicEntities&&m.push("nbsp,gt,lt,amp");h.entities&&(m.length&&m.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
 h.entities_latin&&m.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),h.entities_greek&&m.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"),
@@ -757,14 +757,14 @@ CKEDITOR.config.entities_additional="#39",CKEDITOR.plugins.add("popup"),CKEDITOR
 e)/2,10);f=(f||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+e+",height\x3d"+c+",top\x3d"+h+",left\x3d"+m;var l=window.open("",null,f,!0);if(!l)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(l.moveTo(m,h),l.resizeTo(e,c)),l.focus(),l.location.href=a}catch(k){window.open(a,null,f,!0)}return!0}}),function(){function a(a,b){var c=[];if(b)for(var e in b)c.push(e+
 "\x3d"+encodeURIComponent(b[e]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+c.join("\x26")}function e(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function c(){var d=this.getDialog(),b=d.getParentEditor();b._.filebrowserSe=this;var c=b.config["filebrowser"+e(d.getName())+"WindowWidth"]||b.config.filebrowserWindowWidth||"80%",d=b.config["filebrowser"+e(d.getName())+"WindowHeight"]||b.config.filebrowserWindowHeight||"70%",f=this.filebrowser.params||{};f.CKEditor=b.name;f.CKEditorFuncNum=
 b._.filebrowserFn;f.langCode||(f.langCode=b.langCode);f=a(this.filebrowser.url,f);b.popup(f,c,d,b.config.filebrowserWindowFeatures||b.config.fileBrowserWindowFeatures)}function f(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value&&a.getContentElement(this["for"][0],this["for"][1]).getAction()?!0:!1}function h(d,b,c){var e=c.params||{};e.CKEditor=d.name;e.CKEditorFuncNum=d._.filebrowserFn;e.langCode||
-(e.langCode=d.langCode);b.action=a(c.url,e);b.filebrowser=c}function m(a,b,g,k){if(k&&k.length)for(var l,u=k.length;u--;)if(l=k[u],"hbox"!=l.type&&"vbox"!=l.type&&"fieldset"!=l.type||m(a,b,g,l.children),l.filebrowser)if("string"==typeof l.filebrowser&&(l.filebrowser={action:"fileButton"==l.type?"QuickUpload":"Browse",target:l.filebrowser}),"Browse"==l.filebrowser.action){var w=l.filebrowser.url;void 0===w&&(w=a.config["filebrowser"+e(b)+"BrowseUrl"],void 0===w&&(w=a.config.filebrowserBrowseUrl));
+(e.langCode=d.langCode);b.action=a(c.url,e);b.filebrowser=c}function m(a,b,g,k){if(k&&k.length)for(var l,r=k.length;r--;)if(l=k[r],"hbox"!=l.type&&"vbox"!=l.type&&"fieldset"!=l.type||m(a,b,g,l.children),l.filebrowser)if("string"==typeof l.filebrowser&&(l.filebrowser={action:"fileButton"==l.type?"QuickUpload":"Browse",target:l.filebrowser}),"Browse"==l.filebrowser.action){var w=l.filebrowser.url;void 0===w&&(w=a.config["filebrowser"+e(b)+"BrowseUrl"],void 0===w&&(w=a.config.filebrowserBrowseUrl));
 w&&(l.onClick=c,l.filebrowser.url=w,l.hidden=!1)}else if("QuickUpload"==l.filebrowser.action&&l["for"]&&(w=l.filebrowser.url,void 0===w&&(w=a.config["filebrowser"+e(b)+"UploadUrl"],void 0===w&&(w=a.config.filebrowserUploadUrl)),w)){var p=l.onClick;l.onClick=function(a){var b=a.sender;if(p&&!1===p.call(b,a))return!1;if(f.call(b,a)){a=b.getDialog().getContentElement(this["for"][0],this["for"][1]).getInputElement();if(b=new CKEDITOR.dom.element(a.$.form))(a=b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):
 (a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken());return!0}return!1};l.filebrowser.url=w;l.hidden=!1;h(a,g.getContents(l["for"][0]).get(l["for"][1]),l.filebrowser)}}function l(a,b,c){if(-1!==c.indexOf(";")){c=c.split(";");for(var e=0;e<c.length;e++)if(l(a,b,c[e]))return!0;return!1}return(a=a.getContents(b).get(c).filebrowser)&&a.url}function k(a,b){var c=this._.filebrowserSe.getDialog(),e=this._.filebrowserSe["for"],
 f=this._.filebrowserSe.filebrowser.onSelect;e&&c.getContentElement(e[0],e[1]).reset();if("function"!=typeof b||!1!==b.call(this._.filebrowserSe))if(!f||!1!==f.call(this._.filebrowserSe,a,b))if("string"==typeof b&&b&&alert(b),a&&(e=this._.filebrowserSe,c=e.getDialog(),e=e.filebrowser.target||null))if(e=e.split(":"),f=c.getContentElement(e[0],e[1]))f.setValue(a),c.selectPage(e[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(k,a);
 a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,c,e=0;e<b.contents.length;++e)if(c=b.contents[e])m(a.editor,a.data.name,b,c.elements),c.hidden&&c.filebrowser&&(c.hidden=!l(b,c.id,c.filebrowser))})}(),function(){function a(a){var h=a.config,m=a.fire("uiSpace",{space:"top",html:""}).html,l=function(){function b(a,e,g){d.setStyle(e,c(g));d.setStyle("position",a)}function g(a){var d=
-m.getDocumentPosition();switch(a){case "top":b("absolute","top",d.y-A-z);break;case "pin":b("fixed","top",x);break;case "bottom":b("absolute","top",d.y+(r.height||r.bottom-r.top)+z)}k=a}var k,m,p,r,v,A,B,q=h.floatSpaceDockedOffsetX||0,z=h.floatSpaceDockedOffsetY||0,y=h.floatSpacePinnedOffsetX||0,x=h.floatSpacePinnedOffsetY||0;return function(b){if(m=a.editable()){var n=b&&"focus"==b.name;n&&d.show();a.fire("floatingSpaceLayout",{show:n});d.removeStyle("left");d.removeStyle("right");p=d.getClientRect();
-r=m.getClientRect();v=e.getViewPaneSize();A=p.height;B="pageXOffset"in e.$?e.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;k?(A+z<=r.top?g("top"):A+z>v.height-r.bottom?g("pin"):g("bottom"),b=v.width/2,b=h.floatSpacePreferRight?"right":0<r.left&&r.right<v.width&&r.width>p.width?"rtl"==h.contentsLangDirection?"right":"left":b-r.left>r.right-b?"left":"right",p.width>v.width?(b="left",n=0):(n="left"==b?0<r.left?r.left:0:r.right<v.width?v.width-r.right:0,n+p.width>v.width&&(b="left"==b?
-"right":"left",n=0)),d.setStyle(b,c(("pin"==k?y:q)+n+("pin"==k?0:"left"==b?B:-B)))):(k="pin",g("pin"),l(b))}}}();if(m){var k=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':
+m.getDocumentPosition();switch(a){case "top":b("absolute","top",d.y-z-y);break;case "pin":b("fixed","top",C);break;case "bottom":b("absolute","top",d.y+(t.height||t.bottom-t.top)+y)}k=a}var k,m,p,t,v,z,A,q=h.floatSpaceDockedOffsetX||0,y=h.floatSpaceDockedOffsetY||0,x=h.floatSpacePinnedOffsetX||0,C=h.floatSpacePinnedOffsetY||0;return function(b){if(m=a.editable()){var n=b&&"focus"==b.name;n&&d.show();a.fire("floatingSpaceLayout",{show:n});d.removeStyle("left");d.removeStyle("right");p=d.getClientRect();
+t=m.getClientRect();v=e.getViewPaneSize();z=p.height;A="pageXOffset"in e.$?e.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;k?(z+y<=t.top?g("top"):z+y>v.height-t.bottom?g("pin"):g("bottom"),b=v.width/2,b=h.floatSpacePreferRight?"right":0<t.left&&t.right<v.width&&t.width>p.width?"rtl"==h.contentsLangDirection?"right":"left":b-t.left>t.right-b?"left":"right",p.width>v.width?(b="left",n=0):(n="left"==b?0<t.left?t.left:0:t.right<v.width?v.width-t.right:0,n+p.width>v.width&&(b="left"==b?
+"right":"left",n=0)),d.setStyle(b,c(("pin"==k?x:q)+n+("pin"==k?0:"left"==b?A:-A)))):(k="pin",g("pin"),l(b))}}}();if(m){var k=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':
 " ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),d=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(k.output({content:m,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+(h.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),b=CKEDITOR.tools.eventsBuffer(500,l),g=CKEDITOR.tools.eventsBuffer(100,l);d.unselectable();d.on("mousedown",
 function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(d){l(d);a.on("change",b.input);e.on("scroll",g.input);e.on("resize",g.input)});a.on("blur",function(){d.hide();a.removeListener("change",b.input);e.removeListener("scroll",g.input);e.removeListener("resize",g.input)});a.on("destroy",function(){e.removeListener("scroll",g.input);e.removeListener("resize",g.input);d.clearCustomData();d.remove()});a.focusManager.hasFocus&&d.show();a.focusManager.add(d,
 1)}}var e=CKEDITOR.document.getWindow(),c=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(c){c.on("loaded",function(){a(this)},null,null,20)}})}(),CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var a=CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),e=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" href\x3d"javascript:void(\'{val}\')"  {onclick}\x3d"CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'),
@@ -779,9 +779,9 @@ e&&setTimeout(function(){e.focus()},0)}}})}}),CKEDITOR.plugins.add("richcombo",{
 "":" href\x3d\"javascript:void('{titleJs}')\"")+' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(a+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(a+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var a=a+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':
 "onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":CKEDITOR.env.air?"\x26nbsp;":"")+"\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"),e=CKEDITOR.addTemplate("combo",a);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,
 a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var e=[];this.render(a,e);return e.join("")},render:function(a,f){function h(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var b=
-this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(b=CKEDITOR.TRISTATE_DISABLED);this.setState(b);this.setValue("");b!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var m=CKEDITOR.env,l="cke_"+this.id,k=CKEDITOR.tools.addFunction(function(d){t&&(a.unlockSelection(1),t=0);b.execute(d)},this),d=this,b={id:l,combo:this,focus:function(){CKEDITOR.document.getById(l).getChild(1).focus()},execute:function(b){var e=d._;if(e.state!=CKEDITOR.TRISTATE_DISABLED)if(d.createPanel(a),
+this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(b=CKEDITOR.TRISTATE_DISABLED);this.setState(b);this.setValue("");b!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var m=CKEDITOR.env,l="cke_"+this.id,k=CKEDITOR.tools.addFunction(function(d){u&&(a.unlockSelection(1),u=0);b.execute(d)},this),d=this,b={id:l,combo:this,focus:function(){CKEDITOR.document.getById(l).getChild(1).focus()},execute:function(b){var e=d._;if(e.state!=CKEDITOR.TRISTATE_DISABLED)if(d.createPanel(a),
 e.on)e.panel.hide();else{d.commit();var g=d.getValue();g?e.list.mark(g):e.list.unmarkAll();e.panel.showBlock(d.id,new CKEDITOR.dom.element(b),4)}},clickFn:k};a.on("activeFilterChange",h,this);a.on("mode",h,this);a.on("selectionChange",h,this);!this.readOnly&&a.on("readOnly",h,this);var g=CKEDITOR.tools.addFunction(function(a,d){a=new CKEDITOR.dom.event(a);var c=a.getKeystroke();switch(c){case 13:case 32:case 40:CKEDITOR.tools.callFunction(k,d);break;default:b.onkey(b,c)}a.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){b.onfocus&&
-b.onfocus()}),t=0;b.keyDownFn=g;m={id:l,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:m.gecko&&!m.hc?"":(this.title||"").replace("'",""),keydownFn:g,focusFn:n,clickFn:k};e.output(m,f);if(this.onRender)this.onRender();return b},createPanel:function(a){if(!this._.panel){var e=this._.panelDefinition,h=this._.panelDefinition.block,m=e.parent||CKEDITOR.document.getBody(),l="cke_combopanel__"+this.name,k=new CKEDITOR.ui.floatPanel(a,m,e),e=k.addListBlock(this.id,
+b.onfocus()}),u=0;b.keyDownFn=g;m={id:l,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:m.gecko&&!m.hc?"":(this.title||"").replace("'",""),keydownFn:g,focusFn:n,clickFn:k};e.output(m,f);if(this.onRender)this.onRender();return b},createPanel:function(a){if(!this._.panel){var e=this._.panelDefinition,h=this._.panelDefinition.block,m=e.parent||CKEDITOR.document.getBody(),l="cke_combopanel__"+this.name,k=new CKEDITOR.ui.floatPanel(a,m,e),e=k.addListBlock(this.id,
 h),d=this;k.onShow=function(){this.element.addClass(l);d.setState(CKEDITOR.TRISTATE_ON);d._.on=1;d.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(d.onOpen)d.onOpen()};k.onHide=function(b){this.element.removeClass(l);d.setState(d.modes&&d.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d._.on=0;if(!b&&d.onClose)d.onClose()};k.onEscape=function(){k.hide(1)};e.onClick=function(a,c){d.onClick&&d.onClick.call(d,a,c);k.hide()};this._.panel=k;this._.list=e;k.getBlock(this.id).onHide=
 function(){d._.on=0;d.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,e){this._.value=a;var h=this.document.getById("cke_"+this.id+"_text");h&&(a||e?h.removeClass("cke_combo_inlinelabel"):(e=this.label,h.addClass("cke_combo_inlinelabel")),h.setText("undefined"!=typeof e?e:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},
 showAll:function(){this._.list.showAll()},add:function(a,e,h){this._.items[a]=h||a;this._.list.add(a,e,h)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var e=this.document.getById("cke_"+this.id);e.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?e.setAttribute("aria-disabled",!0):e.removeAttribute("aria-disabled");this._.state=
@@ -820,56 +820,56 @@ removeFillers:function(a){if(this.hasFiller(a)&&!this.isWholeContentSelected(a))
 "").replace(this.createFillerRegex(!0),""));return a},isWholeContentSelected:function(a){var c=a.editor.getSelection().getRanges()[0];return!c||c&&c.collapsed?!1:(c=c.clone(),c.enlarge(CKEDITOR.ENLARGE_ELEMENT),!!(c&&a&&c.startContainer&&c.endContainer&&0===c.startOffset&&c.endOffset===a.getChildCount()&&c.startContainer.equals(a)&&c.endContainer.equals(a)))},hasFiller:function(a){return 0<a.find(this.fillerTagName+"["+this.fillerAttribute+"]").count()},createFiller:function(a){var c=new CKEDITOR.dom.element(this.fillerTagName);
 c.setHtml(this.fillerContent);c.setAttribute(this.fillerAttribute,a?"end":"start");c.setAttribute("data-cke-temp",1);c.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return c},removeFiller:function(a,c){if(a){var f=c.editor,h=c.editor.getSelection().getRanges()[0].startPath(),m=f.createRange(),l,k;h.contains(a)&&(l=a.getHtml(),k=!0);h="start"==a.getAttribute(this.fillerAttribute);a.remove();l&&0<l.length&&
 l!=this.fillerContent?(c.insertHtmlIntoRange(l,f.getSelection().getRanges()[0]),m.setStartAt(c.getChild(c.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),f.getSelection().selectRanges([m])):k&&(h?m.setStartAt(c.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):m.setEndAt(c.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),c.editor.getSelection().selectRanges([m]))}},createFillerRegex:function(a){var c=this.createFiller(a).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi,
-"\x3e[^\x3c]*\x3c");return new RegExp((a?"":"^")+c+(a?"$":""))},addSelectAllIntegration:function(a){var c=this;a.editable().attachListener(a,"beforeCommandExec",function(f){var h=a.editable();"selectAll"==f.data.name&&h&&c.addFillers(h)},null,null,9999)}}}(),"use strict",function(){function a(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};y(this);z(this);this.on("checkWidgets",
-l);this.editor.on("contentDomInvalidated",this.checkWidgets,this);q(this);v(this);A(this);r(this);B(this)}function e(a,b,c,d,f){var g=a.editor;CKEDITOR.tools.extend(this,d,{editor:g,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:e.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?
+"\x3e[^\x3c]*\x3c");return new RegExp((a?"":"^")+c+(a?"$":""))},addSelectAllIntegration:function(a){var c=this;a.editable().attachListener(a,"beforeCommandExec",function(f){var h=a.editable();"selectAll"==f.data.name&&h&&c.addFillers(h)},null,null,9999)}}}(),"use strict",function(){function a(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};x(this);y(this);this.on("checkWidgets",
+l);this.editor.on("contentDomInvalidated",this.checkWidgets,this);q(this);v(this);z(this);t(this);A(this)}function e(a,b,c,d,f){var g=a.editor;CKEDITOR.tools.extend(this,d,{editor:g,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:e.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?
 d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);T(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));f&&this.setData(f);this.data.classes||this.setData("classes",this.getClasses());this.dataReady=!0;W(this);this.fire("data",this.data);this.isInited()&&g.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function c(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;
 this._={};b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function f(a,b){a.addCommand(b.name,{exec:function(a,c){function d(){a.widgets.finalizeCreation(h)}var e=a.widgets.focused;if(e&&e.name==b.name)e.edit();else if(b.insert)b.insert();else if(b.template){var e="function"==typeof b.defaults?
 b.defaults():b.defaults,e=CKEDITOR.dom.element.createFromHtml(b.template.output(e)),f,g=a.widgets.wrapElement(e,b.name),h=new CKEDITOR.dom.documentFragment(g.getDocument());h.append(g);(f=a.widgets.initOn(e,b,c&&c.startupData))?(e=f.once("edit",function(b){if(b.data.dialog)f.once("dialog",function(b){b=b.data;var c,e;c=b.once("ok",d,null,null,20);e=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(f,!0)});b.once("hide",function(){c.removeListener();e.removeListener()})});else d()},
 null,null,999),f.edit(),e.removeListener()):d()}},allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function h(a,b){function c(b,d,e){var f=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>e});0>f&&(f=a._.upcasts.length);a._.upcasts.splice(f,0,[b,d,e])}var d=b.upcast,e=b.upcastPriority||10;if(d)if("string"==typeof d)for(d=d.split(",");d.length;)c(b.upcasts[d.pop()],b.name,e);else c(d,b.name,e)}
 function m(a,b){a.focused=null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function l(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,f,g,h;if(b){for(d in c)c[d].isReady()&&!b.contains(c[d].wrapper)&&this.destroy(c[d],!0);if(a&&a.initOnlyNew)c=this.initOnAll();else{var k=b.find(".cke_widget_wrapper"),c=[];d=0;for(f=k.count();d<f;d++){g=k.getItem(d);if(h=!this.getByElement(g,
-!0)){a:{h=t;for(var l=g;l=l.getParent();)if(h(l)){h=!0;break a}h=!1}h=!h}h&&b.contains(g)&&(g.addClass("cke_widget_new"),c.push(this.initOn(g.getFirst(e.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function k(a,b,c){if(!c.allowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});(a=d[b])||(d[b]=a=new CKEDITOR.filter(c.allowedContent));return a}function d(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,g,
+!0)){a:{h=u;for(var l=g;l=l.getParent();)if(h(l)){h=!0;break a}h=!1}h=!h}h&&b.contains(g)&&(g.addClass("cke_widget_new"),c.push(this.initOn(g.getFirst(e.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function k(a,b,c){if(!c.allowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});(a=d[b])||(d[b]=a=new CKEDITOR.filter(c.allowedContent));return a}function d(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,g,
 h,k,l;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(e.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(l=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;k=0;for(f=d.length;k<f;++k)if(!1===d[k](a))return;for(k=0;k<l;++k)if(f=c[k],h={},g=f[0](a,h))return g instanceof CKEDITOR.htmlParser.element&&(a=g),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(h)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,
 f[1]]),!1}}}}function b(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}}function g(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),e=a.parent;b=d.getIndex();a.children.length||(--b,a.remove());d.children.length||d.remove();return g(e,b,c)}}a.add(c,b)}function n(a,b){return"boolean"==typeof a.inline?
-a.inline:!!CKEDITOR.dtd.$inline[b]}function t(a){return a.hasAttribute("data-cke-temp")}function u(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),b.focusedEditable=null,a.widgetHoldingFocusedEditable=
-null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function w(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function p(a,b){return CKEDITOR.tools.trim(b)}function r(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("dragstart",function(c){var d=c.data.target;e.isDomDragHandler(d)&&(d=a.getByElement(d),c.data.dataTransfer.setData("cke/widget-id",d.id),b.focus(),d.focus())});b.on("drop",
+a.inline:!!CKEDITOR.dtd.$inline[b]}function u(a){return a.hasAttribute("data-cke-temp")}function r(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),b.focusedEditable=null,a.widgetHoldingFocusedEditable=
+null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function w(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function p(a,b){return CKEDITOR.tools.trim(b)}function t(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("dragstart",function(c){var d=c.data.target;e.isDomDragHandler(d)&&(d=a.getByElement(d),c.data.dataTransfer.setData("cke/widget-id",d.id),b.focus(),d.focus())});b.on("drop",
 function(c){var d=c.data.dataTransfer,e=d.getData("cke/widget-id"),f=d.getTransferType(b),d=b.createRange();""!==e&&f===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c.cancel():""!==e&&f==CKEDITOR.DATA_TRANSFER_INTERNAL&&(e=a.instances[e])&&(d.setStartBefore(e.wrapper),d.setEndAfter(e.wrapper),c.data.dragRange=d,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,c.data.dataTransfer.setData("text/html",b.editable().getHtmlFromRange(d).getHtml()),
 b.widgets.destroy(e,!0))});b.on("contentDom",function(){var d=b.editable();CKEDITOR.tools.extend(a,{finder:new c.finder(b,{lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&&!e.isDomNestedEditable(b)&&!a._.draggedWidget.wrapper.contains(b)){var c=e.getNestedEditable(d,b);if(c){b=a._.draggedWidget;if(a.getByElement(c)==b)return;c=CKEDITOR.filter.instances[c.data("cke-filter")];b=b.requiredContent;if(c&&b&&!c.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|
-CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function v(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,f,g;c.attachListener(d,"mousedown",function(c){var d=c.data.getTarget();f=d instanceof CKEDITOR.dom.element?a.getByElement(d):null;g=0;f&&(f.inline&&d.type==CKEDITOR.NODE_ELEMENT&&
-d.hasAttribute("data-cke-widget-drag-handler")?(g=1,a.focused!=f&&b.getSelection().removeAllRanges()):e.getNestedEditable(f.wrapper,d)?f=null:(c.data.preventDefault(),CKEDITOR.env.ie||f.focus()))});c.attachListener(d,"mouseup",function(){g&&f&&f.wrapper&&(g=0,f.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){f&&f.wrapper&&c.contains(f.wrapper)&&(f.focus(),f=null)})})});b.on("doubleclick",function(b){var c=a.getByElement(b.data.element);if(c&&!e.getNestedEditable(c.wrapper,
-b.data.element))return c.fire("doubleclick",{element:b.data.element})},null,null,1)}function A(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&
-d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e},null,null,1)}function B(a){function b(c){a.focused&&G(a.focused,"cut"==c.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function q(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=e.getNestedEditable(b.editable(),c.data.selection.getStartElement()))&&
-a.getByElement(c),f=a.widgetHoldingFocusedEditable;f?f===d&&f.focusedEditable.equals(c)||(u(a,f,null),d&&c&&u(a,d,c)):d&&c&&u(a,d,c)});b.on("dataReady",function(){x(a).commit()});b.on("blur",function(){var b;(b=a.focused)&&m(a,b);(b=a.widgetHoldingFocusedEditable)&&u(a,b,null)})}function z(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var d=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=d;c[d]=f;b.data.dataValue.forEach(function(b){var c=b.attributes,d;if("data-cke-widget-id"in
-c){if(c=a.instances[c["data-cke-widget-id"]])d=b.getFirst(e.isParserWidgetElement),f.push({wrapper:b,element:d,widget:c,editables:{}}),"1"!=d.attributes["data-cke-widget-keep-attr"]&&delete d.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return f[f.length-1].editables[c["data-cke-widget-editable"]]=b,!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId){a=c[a.data.downcastingSessionId];for(var b,d,e,f,g,h;b=a.shift();){d=b.widget;
-e=b.element;f=d._.downcastFn&&d._.downcastFn.call(d,e);for(h in b.editables)g=b.editables[h],delete g.attributes.contenteditable,g.setHtml(d.editables[h].getData());f||(f=e);b.wrapper.replaceWith(f)}}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function y(a){var b=a.editor,c,f;b.on("toHtml",function(b){var f=d(a),g;for(b.data.dataValue.forEach(f.iterator,CKEDITOR.NODE_ELEMENT,!0);g=f.toBeWrapped.pop();){var h=g[0],k=h.parent;k.type==CKEDITOR.NODE_ELEMENT&&k.attributes["data-cke-widget-wrapper"]&&
-k.replaceWith(h);a.wrapElement(g[0],g[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&e.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&e.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(f)for(var c=b.editable().find(".cke_widget_wrapper"),d,g,h=0,k=c.count();h<k;++h)d=c.getItem(h),g=d.getFirst(e.isDomWidgetElement),g.type==CKEDITOR.NODE_ELEMENT&&g.data("widget")?(g.replace(d),a.wrapElement(g)):
-d.remove();f=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(f=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(X,p);a.range&&(a=e.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,
-focusInited:c}),b.fire("unlockSnapshot"))})}function x(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,h;a.editor.fire("lockSnapshot");for(f&&(g=a.focused)&&m(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(h=g.editor.checkDirty(),g.setSelected(!1),!h&&g.editor.resetDirty());
-f&&e&&(h=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!h&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function D(a,b,c){var d=0;b=F(b);var e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f],d=1);d&&a.setData("classes",e)}}function C(a){a.cancel()}function G(a,b){var c=a.editor,d=c.document;if(!d.getById("cke_copybin")){var e=c.blockless||CKEDITOR.env.ie?
-"span":"div",f=d.createElement(e),g=d.createElement(e),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version;g.setAttributes({id:"cke_copybin","data-cke-temp":"1"});f.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});f.setStyle("ltr"==c.config.contentsLangDirection?"left":"right","-5000px");var h=c.createRange();h.setStartBefore(a.wrapper);h.setEndAfter(a.wrapper);f.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+c.editable().getHtmlFromRange(h).getHtml()+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');
-c.fire("saveSnapshot");c.fire("lockSnapshot");g.append(f);c.editable().append(g);var k=c.on("selectionChange",C,null,null,0),l=a.repository.on("checkSelection",C,null,null,0);if(e)var m=d.getDocumentElement().$,p=m.scrollTop;h=c.createRange();h.selectNodeContents(f);h.select();e&&(m.scrollTop=p);setTimeout(function(){b||a.focus();g.remove();k.removeListener();l.removeListener();c.fire("unlockSnapshot");b&&(a.repository.del(a),c.fire("saveSnapshot"))},100)}}function F(a){return(a=(a=a.getDefinition().attributes)&&
-a["class"])?a.split(/\s+/):null}function I(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function H(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function N(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c);
-b=a}})}function O(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function E(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(e.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",
-style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png)"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1",src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",
-a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",S,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=c}}function S(a){function b(){var c;for(q.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var e=this.repository.finder,f=this.repository.liner,g=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(f.visible)||(d=e.getRange(d[0]),
-this.focus(),g.fire("drop",{dropRange:d,target:d.startContainer}));l.removeClass("cke_widget_dragging");f.hideVisible();g.fire("dragend",{target:c})}var c=this.repository.finder,d=this.repository.locator,e=this.repository.liner,f=this.editor,g=f.editable(),h=[],k=[],l,m;this.repository._.draggedWidget=this;var p=c.greedySearch(),q=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(p);k=d.sort(m,1);k.length&&(e.prepare(p,l),e.placeLine(k[0]),e.cleanup())});g.addClass("cke_widget_dragging");h.push(g.on("mousemove",
-function(a){m=a.data.$.clientY;q.input()}));f.fire("dragstart",{target:a.sender});h.push(f.document.once("mouseup",b,this));g.isInline()||h.push(CKEDITOR.document.once("mouseup",b,this))}function L(a){var b,c,d=a.editables;a.editables={};if(a.editables)for(b in d)c=d[b],a.initEditable(b,"string"==typeof c?{selector:c}:c)}function P(a){if(a.mask){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,
-"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}}function J(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function T(a,b){V(a);J(a);L(a);P(a);E(a);N(a);O(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();e.getNestedEditable(a,c)||a.inline&&e.isDomDragHandler(c)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",
-function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){G(a,b==CKEDITOR.CTRL+88);return}if(b in M||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function V(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function W(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}CKEDITOR.plugins.add("widget",
-{requires:"lineutils,clipboard,widgetselection",onLoad:function(){CKEDITOR.addCss(".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:none;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}")},
+CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function v(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,f,g;c.attachListener(d,"mousedown",function(c){var d=c.data.getTarget();if(!d.type)return!1;f=a.getByElement(d);g=0;f&&(f.inline&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("data-cke-widget-drag-handler")?
+(g=1,a.focused!=f&&b.getSelection().removeAllRanges()):e.getNestedEditable(f.wrapper,d)?f=null:(c.data.preventDefault(),CKEDITOR.env.ie||f.focus()))});c.attachListener(d,"mouseup",function(){g&&f&&f.wrapper&&(g=0,f.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){f&&f.wrapper&&c.contains(f.wrapper)&&(f.focus(),f=null)})})});b.on("doubleclick",function(b){var c=a.getByElement(b.data.element);if(c&&!e.getNestedEditable(c.wrapper,b.data.element))return c.fire("doubleclick",
+{element:b.data.element})},null,null,1)}function z(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":
+"END"]))):e=void 0);return e},null,null,1)}function A(a){function b(c){a.focused&&G(a.focused,"cut"==c.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function q(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=e.getNestedEditable(b.editable(),c.data.selection.getStartElement()))&&a.getByElement(c),f=a.widgetHoldingFocusedEditable;
+f?f===d&&f.focusedEditable.equals(c)||(r(a,f,null),d&&c&&r(a,d,c)):d&&c&&r(a,d,c)});b.on("dataReady",function(){C(a).commit()});b.on("blur",function(){var b;(b=a.focused)&&m(a,b);(b=a.widgetHoldingFocusedEditable)&&r(a,b,null)})}function y(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var d=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=d;c[d]=f;b.data.dataValue.forEach(function(b){var c=b.attributes,d;if("data-cke-widget-id"in c){if(c=a.instances[c["data-cke-widget-id"]])d=
+b.getFirst(e.isParserWidgetElement),f.push({wrapper:b,element:d,widget:c,editables:{}}),"1"!=d.attributes["data-cke-widget-keep-attr"]&&delete d.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return f[f.length-1].editables[c["data-cke-widget-editable"]]=b,!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId){a=c[a.data.downcastingSessionId];for(var b,d,e,f,g,h;b=a.shift();){d=b.widget;e=b.element;f=d._.downcastFn&&d._.downcastFn.call(d,
+e);for(h in b.editables)g=b.editables[h],delete g.attributes.contenteditable,g.setHtml(d.editables[h].getData());f||(f=e);b.wrapper.replaceWith(f)}}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function x(a){var b=a.editor,c,f;b.on("toHtml",function(b){var f=d(a),g;for(b.data.dataValue.forEach(f.iterator,CKEDITOR.NODE_ELEMENT,!0);g=f.toBeWrapped.pop();){var h=g[0],k=h.parent;k.type==CKEDITOR.NODE_ELEMENT&&k.attributes["data-cke-widget-wrapper"]&&k.replaceWith(h);a.wrapElement(g[0],
+g[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&e.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&e.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(f)for(var c=b.editable().find(".cke_widget_wrapper"),d,g,h=0,k=c.count();h<k;++h)d=c.getItem(h),g=d.getFirst(e.isDomWidgetElement),g.type==CKEDITOR.NODE_ELEMENT&&g.data("widget")?(g.replace(d),a.wrapElement(g)):d.remove();f=0;a.destroyAll(!0);
+a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(f=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(X,p);a.range&&(a=e.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:c}),b.fire("unlockSnapshot"))})}
+function C(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,h;a.editor.fire("lockSnapshot");for(f&&(g=a.focused)&&m(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(h=g.editor.checkDirty(),g.setSelected(!1),!h&&g.editor.resetDirty());f&&e&&(h=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",
+{widget:e}),e.setFocused(!0),!h&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function B(a,b,c){var d=0;b=F(b);var e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f],d=1);d&&a.setData("classes",e)}}function D(a){a.cancel()}function G(a,b){var c=a.editor,d=c.document;if(!d.getById("cke_copybin")){var e=c.blockless||CKEDITOR.env.ie?"span":"div",f=d.createElement(e),g=d.createElement(e),e=
+CKEDITOR.env.ie&&9>CKEDITOR.env.version;g.setAttributes({id:"cke_copybin","data-cke-temp":"1"});f.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});f.setStyle("ltr"==c.config.contentsLangDirection?"left":"right","-5000px");var h=c.createRange();h.setStartBefore(a.wrapper);h.setEndAfter(a.wrapper);f.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+c.editable().getHtmlFromRange(h).getHtml()+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');c.fire("saveSnapshot");
+c.fire("lockSnapshot");g.append(f);c.editable().append(g);var k=c.on("selectionChange",D,null,null,0),l=a.repository.on("checkSelection",D,null,null,0);if(e)var m=d.getDocumentElement().$,p=m.scrollTop;h=c.createRange();h.selectNodeContents(f);h.select();e&&(m.scrollTop=p);setTimeout(function(){b||a.focus();g.remove();k.removeListener();l.removeListener();c.fire("unlockSnapshot");b&&(a.repository.del(a),c.fire("saveSnapshot"))},100)}}function F(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?
+a.split(/\s+/):null}function I(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function H(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function N(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c);b=a}})}function O(a){a.on("data",
+function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function E(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(e.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+
+b.plugins.widget.path+"images/handle.png)"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1",src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",
+a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",S,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=c}}function S(a){function b(){var c;for(q.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var e=this.repository.finder,f=this.repository.liner,g=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(f.visible)||(d=e.getRange(d[0]),this.focus(),g.fire("drop",{dropRange:d,target:d.startContainer}));
+l.removeClass("cke_widget_dragging");f.hideVisible();g.fire("dragend",{target:c})}var c=this.repository.finder,d=this.repository.locator,e=this.repository.liner,f=this.editor,g=f.editable(),h=[],k=[],l,m;this.repository._.draggedWidget=this;var p=c.greedySearch(),q=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(p);k=d.sort(m,1);k.length&&(e.prepare(p,l),e.placeLine(k[0]),e.cleanup())});g.addClass("cke_widget_dragging");h.push(g.on("mousemove",function(a){m=a.data.$.clientY;q.input()}));f.fire("dragstart",
+{target:a.sender});h.push(f.document.once("mouseup",b,this));g.isInline()||h.push(CKEDITOR.document.once("mouseup",b,this))}function L(a){var b,c,d=a.editables;a.editables={};if(a.editables)for(b in d)c=d[b],a.initEditable(b,"string"==typeof c?{selector:c}:c)}function P(a){if(a.mask){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));
+a.mask=b}}function J(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function T(a,b){V(a);J(a);L(a);P(a);E(a);N(a);O(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();e.getNestedEditable(a,c)||a.inline&&e.isDomDragHandler(c)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==
+CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){G(a,b==CKEDITOR.CTRL+88);return}if(b in M||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function V(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function W(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",
+onLoad:function(){CKEDITOR.addCss(".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:none;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}")},
 beforeInit:function(b){b.widgets=new a(b)},afterInit:function(a){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});w(a)}});a.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(a,b){b=CKEDITOR.tools.prototypedCopy(b);b.name=a;b._=b._||{};this.editor.fire("widgetDefinition",b);b.template&&(b.template=new CKEDITOR.template(b.template));f(this.editor,b);h(this,b);return this.registered[a]=
-b},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=x(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=e.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===
-a){var b=a.editor,c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper,!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&u(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),f=0;f<e;++f)(c=this.getByElement(d.getItem(f),
+b},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=C(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=e.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===
+a){var b=a.editor,c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper,!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&r(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),f=0;f<e;++f)(c=this.getByElement(d.getItem(f),
 !0))&&this.destroy(c)}else for(d in e)c=e[d],this.destroy(c,a)},finalizeCreation:function(a){(a=a.getFirst())&&e.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(c){return c.is(b)&&c.data("cke-widget-id")}var b={div:1,span:1};return function(b,c){if(!b)return null;var d=a(b);if(!c&&!d){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(d=a(b)))}return this.instances[d]||null}}(),
 initOn:function(a,b,c){b?"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new e(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){a=(a||this.editor.editable()).find(".cke_widget_new");for(var b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(e.isDomWidgetElement)))&&b.push(c);return b},onWidget:function(a){var b=
 Array.prototype.slice.call(arguments);b.shift();for(var c in this.instances){var d=this.instances[c];d.name==a&&d.on.apply(d,b)}this.on("instanceCreated",function(c){c=c.data;c.name==a&&c.on.apply(c,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,c){var d=null,e,f;if(a instanceof CKEDITOR.dom.element){c=c||a.data("widget");e=this.registered[c];if(!e)return null;
 if((d=a.getParent())&&d.type==CKEDITOR.NODE_ELEMENT&&d.data("cke-widget-wrapper"))return d;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",c);f=n(e,a.getName());d=new CKEDITOR.dom.element(f?"span":"div");d.setAttributes(b(f,c));d.data("cke-display-name",e.pathName?e.pathName:a.getName());a.getParent(!0)&&d.replace(a);a.appendTo(d)}else if(a instanceof CKEDITOR.htmlParser.element){c=c||a.attributes["data-widget"];e=this.registered[c];
 if(!e)return null;if((d=a.parent)&&d.type==CKEDITOR.NODE_ELEMENT&&d.attributes["data-cke-widget-wrapper"])return d;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);c&&(a.attributes["data-widget"]=c);f=n(e,a.name);d=new CKEDITOR.htmlParser.element(f?"span":"div",b(f,c));d.attributes["data-cke-display-name"]=e.pathName?e.pathName:a.name;e=a.parent;var h;e&&(h=a.getIndex(),a.remove());d.add(a);e&&g(e,h,d)}return d},_tests_createEditableFilter:k};
-CKEDITOR.event.implementOn(a.prototype);e.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(e.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){D(this,a,1)},checkStyleActive:function(a){a=F(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),
+CKEDITOR.event.implementOn(a.prototype);e.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(e.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){B(this,a,1)},checkStyleActive:function(a){a=F(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),
 this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a];c.removeListener("focus",H);c.removeListener("blur",I);this.editor.focusManager.remove(c);b||(this.repository.destroyAll(!1,c),c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable",
 "data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var c,d;!1!==b.fire("dialog",a)&&(c=a.on("show",function(){a.setupContent(b)}),d=a.on("ok",function(){var c,d=b.on("data",function(a){c=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);d.removeListener();c&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){c.removeListener();
 d.removeListener()}))});return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var d=this._findOneNotNested(b.selector);return d&&d.is(CKEDITOR.dtd.$editable)?(d=new c(this.editor,d,{filter:k.call(this.repository,this.name,a,b)}),this.editables[a]=d,d.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":d.enterMode}),d.filter&&
 d.data("cke-filter",d.filter.id),d.addClass("cke_widget_editable"),d.removeClass("cke_widget_editable_focused"),b.pathName&&d.data("cke-display-name",b.pathName),this.editor.focusManager.add(d),d.on("focus",H,this),CKEDITOR.env.ie&&d.on("blur",I,this),d._.initialSetData=!0,d.setData(d.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(e.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||
-!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(e.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){D(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=
+!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(e.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){B(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=
 e[a])}d&&this.dataReady&&(W(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-15};c&&b.x==c.x&&b.y==c.y||(c=a.checkDirty(),
 a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+"px",left:b.x+"px",display:"block"}),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b)}};CKEDITOR.event.implementOn(e.prototype);e.getNestedEditable=function(a,b){return!b||b.equals(a)?null:e.isDomNestedEditable(b)?b:e.getNestedEditable(a,b.getParent())};e.isDomDragHandler=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};e.isDomDragHandlerContainer=function(a){return a.type==
 CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};e.isDomNestedEditable=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};e.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};e.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};e.isParserWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]};
@@ -880,39 +880,39 @@ this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:functi
 e=!0)}return e},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement):!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return e.isDomWidgetWrapper(a)?(a=a.getFirst(e.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];
 var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})})();CKEDITOR.plugins.widget=e;e.repository=a;e.nestedEditable=c}(),
 "use strict",function(){function a(a){function d(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function f(){var b=a.editable(),c=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,b)).block&&(b=c.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),b.replace(this.widget.wrapper),this.widget.wrapper.move(b)),
-this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var d=this.widget,b=h,c=d.wrapper,e=d.data.align,d=d.data.hasCaption;if(b){for(var g=3;g--;)c.removeClass(b[g]);"center"==e?d&&c.addClass(b[1]):"none"!=e&&c.addClass(b[u[e]])}else"center"==e?(d?c.setStyle("text-align","center"):c.removeStyle("text-align"),c.removeStyle("float")):("none"==e?c.removeStyle("float"):c.setStyle("float",e),c.removeStyle("text-align"))}}var h=a.config.image2_alignClasses,k=a.config.image2_captionedClass;
+this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var d=this.widget,b=h,c=d.wrapper,e=d.data.align,d=d.data.hasCaption;if(b){for(var g=3;g--;)c.removeClass(b[g]);"center"==e?d&&c.addClass(b[1]):"none"!=e&&c.addClass(b[r[e]])}else"center"==e?(d?c.setStyle("text-align","center"):c.removeStyle("text-align"),c.removeStyle("float")):("none"==e?c.removeStyle("float"):c.setStyle("float",e),c.removeStyle("text-align"))}}var h=a.config.image2_alignClasses,k=a.config.image2_captionedClass;
 return{allowedContent:b(a),requiredContent:"img[src,alt]",features:g(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'\x3cimg alt\x3d"" src\x3d"" /\x3e',data:function(){var b=this.features;this.data.hasCaption&&!a.filter.checkFeature(b.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||
 a.filter.checkFeature(b.align)||(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:d,inflate:f});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var c in this.data.classes)this.parts.image.removeClass(c);
 if(a.filter.checkFeature(b.dimension)){b=this.data;b={width:b.width,height:b.height};c=this.parts.image;for(var e in b)b[e]?c.setAttribute(e,b[e]):c.removeAttribute(e)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,c=this.parts.image,d={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},e=c.getAscendant("a");
-e&&this.wrapper.contains(e)&&(this.parts.link=e);d.align||(c=d.hasCaption?this.element:c,h?(c.hasClass(h[0])?d.align="left":c.hasClass(h[2])&&(d.align="right"),d.align?c.removeClass(h[u[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float")));a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link),(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?
+e&&this.wrapper.contains(e)&&(this.parts.link=e);d.align||(c=d.hasCaption?this.element:c,h?(c.hasClass(h[0])?d.align="left":c.hasClass(h[2])&&(d.align="right"),d.align?c.removeClass(h[r[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float")));a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link),(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?
 "remove":"add")+"Class"]("cke_image_nocaption");this.setData(d);a.filter.checkFeature(this.features.dimension)&&!0!==a.config.image2_disableResizer&&m(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF});this.on("dialog",function(a){a.data.widget=this},this)},addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},
 removeClass:function(a){n(this).removeClass(a)},getClasses:function(){var a=new RegExp("^("+[].concat(k,h).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),c;for(c in b)a.test(c)&&delete b[c];return b}}(),upcast:e(a),downcast:c(a),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,(this.data.alt||"")+" "+this.pathName)}}}function e(a){var b=f(a),c=a.config.image2_captionedClass;return function(a,d){var e={width:1,height:1},
 f=a.name,g;if(!a.attributes["data-cke-realelement"]&&(b(a)?("div"==f&&(g=a.getFirst("figure"))&&(a.replaceWith(g),a=g),d.align="center",g=a.getFirst("img")||a.getFirst("a").getFirst("img")):"figure"==f&&a.hasClass(c)?g=a.getFirst("img")||a.getFirst("a").getFirst("img"):h(a)&&(g="a"==a.name?a.children[0]:a),g)){for(var k in e)(e=g.attributes[k])&&e.match(w)&&delete g.attributes[k];return a}}}function c(a){var b=a.config.image2_alignClasses;return function(a){var c="a"==a.name?a.getFirst():a,d=c.attributes,
-e=this.data.align;if(!this.inline){var f=a.getFirst("span");f&&f.replaceWith(f.getFirst({img:1,a:1}))}e&&"none"!=e&&(f=CKEDITOR.tools.parseCssText(d.style||""),"center"==e&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):e in{left:1,right:1}&&(b?c.addClass(b[u[e]]):f["float"]=e),b||CKEDITOR.tools.isEmpty(f)||(d.style=CKEDITOR.tools.writeCssText(f)));return a}}function f(a){var b=a.config.image2_captionedClass,c=a.config.image2_alignClasses,
+e=this.data.align;if(!this.inline){var f=a.getFirst("span");f&&f.replaceWith(f.getFirst({img:1,a:1}))}e&&"none"!=e&&(f=CKEDITOR.tools.parseCssText(d.style||""),"center"==e&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):e in{left:1,right:1}&&(b?c.addClass(b[r[e]]):f["float"]=e),b||CKEDITOR.tools.isEmpty(f)||(d.style=CKEDITOR.tools.writeCssText(f)));return a}}function f(a){var b=a.config.image2_captionedClass,c=a.config.image2_alignClasses,
 d={figure:1,a:1,img:1};return function(e){if(!(e.name in{div:1,p:1}))return!1;var f=e.children;if(1!==f.length)return!1;f=f[0];if(!(f.name in d))return!1;if("p"==e.name){if(!h(f))return!1}else if("figure"==f.name){if(!f.hasClass(b))return!1}else if(a.enterMode==CKEDITOR.ENTER_P||!h(f))return!1;return(c?e.hasClass(c[1]):"center"==CKEDITOR.tools.parseCssText(e.attributes.style||"",!0)["text-align"])?!0:!1}}function h(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function m(a){var b=
 a.editor,c=b.editable(),d=b.document,e=a.resizer=d.createElement("span");e.addClass("cke_image_resizer");e.setAttribute("title",b.lang.image2.resizer);e.append(new CKEDITOR.dom.text("​",d));if(a.inline)a.wrapper.append(e);else{var f=a.parts.link||a.parts.image,g=f.getParent(),h=d.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(f);h.append(e);a.element.append(h,!0);g.is("span")&&g.remove()}e.on("mousedown",function(f){function g(a,b,c){var e=CKEDITOR.document,f=[];d.equals(e)||
-f.push(e.on(a,b));f.push(d.on(a,b));if(c)for(a=f.length;a--;)c.push(f.pop())}function h(){T=w+m*X;V=Math.round(T/t)}function k(){V=z-M;T=Math.round(V*t)}var l=a.parts.image,m="right"==a.data.align?-1:1,q=f.data.$.screenX,n=f.data.$.screenY,w=l.$.clientWidth,z=l.$.clientHeight,t=w/z,y=[],u="cke_image_s"+(~m?"e":"w"),J,T,V,W,X,M,K;b.fire("saveSnapshot");g("mousemove",function(a){J=a.data.$;X=J.screenX-q;M=n-J.screenY;K=Math.abs(X/M);1==m?0>=X?0>=M?h():K>=t?h():k():0>=M?K>=t?k():h():k():0>=X?0>=M?K>=
-t?k():h():k():0>=M?h():K>=t?h():k();15<=T&&15<=V?(l.setAttributes({width:T,height:V}),W=!0):W=!1},y);g("mouseup",function(){for(var d;d=y.pop();)d.removeListener();c.removeClass(u);e.removeClass("cke_image_resizing");W&&(a.setData({width:T,height:V}),b.fire("saveSnapshot"));W=!1},y);c.addClass(u);e.addClass("cke_image_resizing")});a.on("data",function(){e["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function l(a){var b=[],c;return function(e){var f=a.getCommand("justify"+
+f.push(e.on(a,b));f.push(d.on(a,b));if(c)for(a=f.length;a--;)c.push(f.pop())}function h(){T=w+m*X;V=Math.round(T/x)}function k(){V=y-M;T=Math.round(V*x)}var l=a.parts.image,m="right"==a.data.align?-1:1,q=f.data.$.screenX,n=f.data.$.screenY,w=l.$.clientWidth,y=l.$.clientHeight,x=w/y,u=[],r="cke_image_s"+(~m?"e":"w"),J,T,V,W,X,M,K;b.fire("saveSnapshot");g("mousemove",function(a){J=a.data.$;X=J.screenX-q;M=n-J.screenY;K=Math.abs(X/M);1==m?0>=X?0>=M?h():K>=x?h():k():0>=M?K>=x?k():h():k():0>=X?0>=M?K>=
+x?k():h():k():0>=M?h():K>=x?h():k();15<=T&&15<=V?(l.setAttributes({width:T,height:V}),W=!0):W=!1},u);g("mouseup",function(){for(var d;d=u.pop();)d.removeListener();c.removeClass(r);e.removeClass("cke_image_resizing");W&&(a.setData({width:T,height:V}),b.fire("saveSnapshot"));W=!1},u);c.addClass(r);e.addClass("cke_image_resizing")});a.on("data",function(){e["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function l(a){var b=[],c;return function(e){var f=a.getCommand("justify"+
 e);if(f){b.push(function(){f.refresh(a,a.elementPath())});if(e in{right:1,left:1,center:1})f.on("exec",function(c){var f=d(a);if(f){f.setData("align",e);for(f=b.length;f--;)b[f]();c.cancel()}});f.on("refresh",function(b){var f=d(a),g={right:1,left:1,center:1};f&&(void 0===c&&(c=a.filter.checkFeature(a.widgets.registered.image.features.align)),c?this.setState(f.data.align==e?CKEDITOR.TRISTATE_ON:e in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}
 function k(a){a.plugins.link&&(CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b=b.definition;var c=b.onShow,e=b.onOk;b.onShow=function(){var b=d(a),e=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),e.hide()):(e.show(),c.apply(this,arguments))};b.onOk=function(){var b=d(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var c={};this.commitContent(c);b.setData("link",
 c)}else e.apply(this,arguments)}}}),a.getCommand("unlink").on("exec",function(b){var c=d(a);c&&c.parts.link&&(c.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())}),a.getCommand("unlink").on("refresh",function(b){var c=d(a);c&&(this.setState(c.data.link||c.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())}))}function d(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function b(a){var b=a.config.image2_alignClasses;a={div:{match:f(a)},p:{match:f(a)},
 img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles="text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function g(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}
-function n(a){return a.data.hasCaption?a.element:a.parts.image}var t=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),u={left:0,center:1,right:2},w=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_widget_wrapper\x3ea{display:inline-block}")},
+function n(a){return a.data.hasCaption?a.element:a.parts.image}var u=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),r={left:0,center:1,right:2},w=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss(".cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_widget_wrapper\x3ea{display:inline-block}")},
 init:function(b){var c=b.config,d=b.lang.image2,e=a(b);c.filebrowserImage2BrowseUrl=c.filebrowserImageBrowseUrl;c.filebrowserImage2UploadUrl=c.filebrowserImageUploadUrl;e.pathName=d.pathName;e.editables.caption.pathName=d.pathNameCaption;b.widgets.add("image",e);b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.contextMenu&&(b.addMenuGroup("image",10),b.addMenuItem("image",{label:d.menu,command:"image",group:"image"}));CKEDITOR.dialog.add("image2",
 this.path+"dialogs/image2.js")},afterInit:function(a){var b={left:1,right:1,center:1,block:1},c=l(a),d;for(d in b)c(d);k(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,f){var g={};e?g.attributes={"class":e[1]}:g.styles={"text-align":"center"};g=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",g);c(g,f);f.move(g);return g}function c(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();g.insertElementIntoRange(b,
 e)}else b.replace(d)}var d=a.document,e=a.config.image2_alignClasses,f=a.config.image2_captionedClass,g=a.editable(),h=["hasCaption","align","link"],k={align:function(c,d,f){var g=c.element;c.changed.align?c.newData.hasCaption||("center"==f&&(c.deflate(),c.element=b(a,g)),c.changed.hasCaption||"center"!=d||"center"==f||(c.deflate(),d=g.findOne("a,img"),d.replace(g),c.element=d)):"center"==f&&c.changed.hasCaption&&!c.newData.hasCaption&&(c.deflate(),c.element=b(a,g));!e&&g.is("figure")&&("center"==
-f?g.setStyle("display","inline-block"):g.removeStyle("display"))},hasCaption:function(b,e,g){b.changed.hasCaption&&(e=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(t.output({captionedClass:f,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(g,b.element),e.replace(g.findOne("img")),b.element=g):(e.replace(b.element),b.element=e))},link:function(b,c,e){if(b.changed.link){var f=b.element.is("img")?b.element:b.element.findOne("img"),
+f?g.setStyle("display","inline-block"):g.removeStyle("display"))},hasCaption:function(b,e,g){b.changed.hasCaption&&(e=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(u.output({captionedClass:f,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(g,b.element),e.replace(g.findOne("img")),b.element=g):(e.replace(b.element),b.element=e))},link:function(b,c,e){if(b.changed.link){var f=b.element.is("img")?b.element:b.element.findOne("img"),
 g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!e||b.element.is("img")&&e,k;h&&b.deflate();e?(c||(k=d.createElement("a",{attributes:{href:b.newData.link.url}}),k.replace(f),f.move(k)),e=CKEDITOR.plugins.image2.getLinkAttributesGetter()(a,e),CKEDITOR.tools.isEmpty(e.set)||(k||g).setAttributes(e.set),e.removed.length&&(k||g).removeAttributes(e.removed)):(e=g.findOne("img"),e.replace(g),k=e);h&&(b.element=k)}}};return function(a){var b,c;a.changed={};for(c=0;c<h.length;c++)b=
 h[c],a.changed[b]=a.oldData?a.oldData[b]!==a.newData[b]:!1;for(c=0;c<h.length;c++)b=h[c],k[b](a,a.oldData?a.oldData[b]:null,a.newData[b]);a.inflate()}},checkHasNaturalRatio:function(a){var b=a.$;a=this.getNatural(a);return Math.round(b.clientWidth/a.width*a.height)==b.clientHeight||Math.round(b.clientHeight/a.height*a.width)==b.clientWidth},getNatural:function(a){if(a.$.naturalWidth)a={width:a.$.naturalWidth,height:a.$.naturalHeight};else{var b=new Image;b.src=a.getAttribute("src");a={width:b.width,
 height:b.height}}return a},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}}(),CKEDITOR.config.image2_captionedClass="image",function(){function a(a,h){var m,l;h.on("refresh",function(a){var d=[e],b;for(b in a.data.states)d.push(a.data.states[b]);this.setState(CKEDITOR.tools.search(d,c)?c:e)},h,null,100);h.on("exec",function(c){m=a.getSelection();l=m.createBookmarks(1);c.data||(c.data=
 {});c.data.done=!1},h,null,0);h.on("exec",function(){a.forceNextSelectionCheck();m.selectBookmarks(l)},h,null,100)}var e=CKEDITOR.TRISTATE_DISABLED,c=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(c){var e=CKEDITOR.plugins.indent.genericDefinition;a(c,c.addCommand("indent",new e(!0)));a(c,c.addCommand("outdent",new e));c.ui.addButton&&(c.ui.addButton("Indent",{label:c.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),c.ui.addButton("Outdent",{label:c.lang.indent.outdent,
-command:"outdent",directional:!0,toolbar:"indent,10"}));c.on("dirChanged",function(a){var e=c.createRange(),h=a.data.node;e.setStartBefore(h);e.setEndAfter(h);for(var d=new CKEDITOR.dom.walker(e),b;b=d.next();)if(b.type==CKEDITOR.NODE_ELEMENT)if(!b.equals(h)&&b.getDirection())e.setStartAfter(b),d=new CKEDITOR.dom.walker(e);else{var g=c.config.indentClasses;if(g)for(var n="ltr"==a.data.dir?["_rtl",""]:["","_rtl"],t=0;t<g.length;t++)b.hasClass(g[t]+n[0])&&(b.removeClass(g[t]+n[0]),b.addClass(g[t]+n[1]));
+command:"outdent",directional:!0,toolbar:"indent,10"}));c.on("dirChanged",function(a){var e=c.createRange(),h=a.data.node;e.setStartBefore(h);e.setEndAfter(h);for(var d=new CKEDITOR.dom.walker(e),b;b=d.next();)if(b.type==CKEDITOR.NODE_ELEMENT)if(!b.equals(h)&&b.getDirection())e.setStartAfter(b),d=new CKEDITOR.dom.walker(e);else{var g=c.config.indentClasses;if(g)for(var n="ltr"==a.data.dir?["_rtl",""]:["","_rtl"],u=0;u<g.length;u++)b.hasClass(g[u]+n[0])&&(b.removeClass(g[u]+n[0]),b.addClass(g[u]+n[1]));
 g=b.getStyle("margin-right");n=b.getStyle("margin-left");g?b.setStyle("margin-left",g):b.removeStyle("margin-left");n?b.setStyle("margin-right",n):b.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,c,e){this.name=c;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+
 9;this.database={}},registerCommands:function(a,c){a.on("pluginsLoaded",function(){for(var a in c)(function(a,c){var d=a.getCommand(c.relatedGlobal),b;for(b in c.jobs)d.on("exec",function(d){d.data.done||(a.fire("lockSnapshot"),c.execJob(a,b)&&(d.data.done=!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(c.database))},this,null,b),d.on("refresh",function(d){d.data.states||(d.data.states={});d.data.states[c.name+"@"+b]=c.refreshJob(a,b,d.data.path)},this,null,b);a.addFeature(c)})(this,
 c[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,c){var m=this.jobs[c];if(m.state!=e)return m.exec.call(this,a)},refreshJob:function(a,c,m){c=this.jobs[c];a.activeFilter.checkFeature(this)?c.state=c.refresh.call(this,a,m):c.state=e;return c.state},getContext:function(a){return a.contains(this.context)}}}(),function(){function a(a){function d(d){for(var e=l.startContainer,m=l.endContainer;e&&
 !e.getParent().equals(d);)e=e.getParent();for(;m&&!m.getParent().equals(d);)m=m.getParent();if(!e||!m)return!1;for(var p=e,e=[],q=!1;!q;)p.equals(m)&&(q=!0),e.push(p),p=p.getNext();if(1>e.length)return!1;p=d.getParents(!0);for(m=0;m<p.length;m++)if(p[m].getName&&h[p[m].getName()]){d=p[m];break}for(var p=b.isIndent?1:-1,m=e[0],e=e[e.length-1],q=CKEDITOR.plugins.list.listToArray(d,f),w=q[e.getCustomData("listarray_index")].indent,m=m.getCustomData("listarray_index");m<=e.getCustomData("listarray_index");m++)if(q[m].indent+=
-p,0<p){var y=q[m].parent;q[m].parent=new CKEDITOR.dom.element(y.getName(),y.getDocument())}for(m=e.getCustomData("listarray_index")+1;m<q.length&&q[m].indent>w;m++)q[m].indent+=p;e=CKEDITOR.plugins.list.arrayToList(q,f,null,a.config.enterMode,d.getDirection());if(!b.isIndent){var x;if((x=d.getParent())&&x.is("li"))for(var p=e.listNode.getChildren(),u=[],C,m=p.count()-1;0<=m;m--)(C=p.getItem(m))&&C.is&&C.is("li")&&u.push(C)}e&&e.listNode.replace(d);if(u&&u.length)for(m=0;m<u.length;m++){for(C=d=u[m];(C=
-C.getNext())&&C.is&&C.getName()in h;)CKEDITOR.env.needsNbspFiller&&!d.getFirst(c)&&d.append(l.document.createText(" ")),d.append(C);d.insertAfter(x)}e&&a.fire("contentDomInvalidated");return!0}for(var b=this,f=this.database,h=this.context,l,m=a.getSelection(),m=(m&&m.getRanges()).createIterator();l=m.getNextRange();){for(var w=l.getCommonAncestor();w&&(w.type!=CKEDITOR.NODE_ELEMENT||!h[w.getName()]);){if(a.editable().equals(w)){w=!1;break}w=w.getParent()}w||(w=l.startPath().contains(h))&&l.setEndAt(w,
+p,0<p){var x=q[m].parent;q[m].parent=new CKEDITOR.dom.element(x.getName(),x.getDocument())}for(m=e.getCustomData("listarray_index")+1;m<q.length&&q[m].indent>w;m++)q[m].indent+=p;e=CKEDITOR.plugins.list.arrayToList(q,f,null,a.config.enterMode,d.getDirection());if(!b.isIndent){var C;if((C=d.getParent())&&C.is("li"))for(var p=e.listNode.getChildren(),r=[],D,m=p.count()-1;0<=m;m--)(D=p.getItem(m))&&D.is&&D.is("li")&&r.push(D)}e&&e.listNode.replace(d);if(r&&r.length)for(m=0;m<r.length;m++){for(D=d=r[m];(D=
+D.getNext())&&D.is&&D.getName()in h;)CKEDITOR.env.needsNbspFiller&&!d.getFirst(c)&&d.append(l.document.createText(" ")),d.append(D);d.insertAfter(C)}e&&a.fire("contentDomInvalidated");return!0}for(var b=this,f=this.database,h=this.context,l,m=a.getSelection(),m=(m&&m.getRanges()).createIterator();l=m.getNextRange();){for(var w=l.getCommonAncestor();w&&(w.type!=CKEDITOR.NODE_ELEMENT||!h[w.getName()]);){if(a.editable().equals(w)){w=!1;break}w=w.getParent()}w||(w=l.startPath().contains(h))&&l.setEndAt(w,
 CKEDITOR.POSITION_BEFORE_END);if(!w){var p=l.getEnclosedNode();p&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in h&&(l.setStartAt(p,CKEDITOR.POSITION_AFTER_START),l.setEndAt(p,CKEDITOR.POSITION_BEFORE_END),w=p)}w&&l.startContainer.type==CKEDITOR.NODE_ELEMENT&&l.startContainer.getName()in h&&(p=new CKEDITOR.dom.walker(l),p.evaluator=e,l.startContainer=p.next());w&&l.endContainer.type==CKEDITOR.NODE_ELEMENT&&l.endContainer.getName()in h&&(p=new CKEDITOR.dom.walker(l),p.evaluator=e,l.endContainer=p.previous());
 if(w)return d(w)}return 0}function e(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is("li")}function c(a){return f(a)&&h(a)}var f=CKEDITOR.dom.walker.whitespaces(!0),h=CKEDITOR.dom.walker.bookmark(!1,!0),m=CKEDITOR.TRISTATE_DISABLED,l=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(c){function d(c){b.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];c.on("key",function(a){var b=c.elementPath();if("wysiwyg"==c.mode&&a.data.keyCode==this.indentKey&&
 b){var d=this.getContext(b);!d||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,d)||(c.execCommand(this.relatedGlobal),a.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,c);return c&&this.isIndent&&!d?l:m}:function(a,b){return!this.getContext(b)||this.isIndent?m:l},exec:CKEDITOR.tools.bind(a,this)}}var b=CKEDITOR.plugins.indent;b.registerCommands(c,{indentlist:new d(c,
@@ -920,91 +920,90 @@ b){var d=this.getContext(b);!d||this.isIndent&&CKEDITOR.plugins.indentList.first
 if(!e)break;a=e}e=a.getStyle("text-align")||a.getAttribute("align")||""}e&&(e=e.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!e&&c&&(e="rtl"==a.getComputedStyle("direction")?"right":"left");return e}function e(a,c,e){this.editor=a;this.name=c;this.value=e;this.context="p";c=a.config.justifyClasses;var l=a.config.enterMode==CKEDITOR.ENTER_P?"p":"div";if(c){switch(e){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;
 case "justify":this.cssClassName=c[3]}this.cssClassRegex=new RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?\x3d$|\\s)");this.requiredContent=l+"("+this.cssClassName+")"}else this.requiredContent=l+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName||null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function c(a){var c=a.editor,e=c.createRange();e.setStartBefore(a.data.node);
 e.setEndAfter(a.data.node);for(var l=new CKEDITOR.dom.walker(e),k;k=l.next();)if(k.type==CKEDITOR.NODE_ELEMENT)if(!k.equals(a.data.node)&&k.getDirection())e.setStartAfter(k),l=new CKEDITOR.dom.walker(e);else{var d=c.config.justifyClasses;d&&(k.hasClass(d[0])?(k.removeClass(d[0]),k.addClass(d[2])):k.hasClass(d[2])&&(k.removeClass(d[2]),k.addClass(d[0])));d=k.getStyle("text-align");"left"==d?k.setStyle("text-align","right"):"right"==d&&k.setStyle("text-align","left")}}e.prototype={exec:function(c){var e=
-c.getSelection(),m=c.config.enterMode;if(e){for(var l=e.createBookmarks(),k=e.getRanges(),d=this.cssClassName,b,g,n=c.config.useComputedState,n=void 0===n||n,t=k.length-1;0<=t;t--)for(b=k[t].createIterator(),b.enlargeBr=m!=CKEDITOR.ENTER_BR;g=b.getNextParagraph(m==CKEDITOR.ENTER_P?"p":"div");)if(!g.isReadOnly()){var u=g.getName(),w;w=c.activeFilter.check(u+"{text-align}");if((u=c.activeFilter.check(u+"("+d+")"))||w){g.removeAttribute("align");g.removeStyle("text-align");var p=d&&(g.$.className=CKEDITOR.tools.ltrim(g.$.className.replace(this.cssClassRegex,
-""))),r=this.state==CKEDITOR.TRISTATE_OFF&&(!n||a(g,!0)!=this.value);d&&u?r?g.addClass(d):p||g.removeAttribute("class"):r&&w&&g.setStyle("text-align",this.value)}}c.focus();c.forceNextSelectionCheck();e.selectBookmarks(l)}},refresh:function(c,e){var m=e.block||e.blockLimit,l=m.getName(),k=m.equals(c.editable()),l=this.cssClassName?c.activeFilter.check(l+"("+this.cssClassName+")"):c.activeFilter.check(l+"{text-align}");k&&1===e.elements.length?this.setState(CKEDITOR.TRISTATE_OFF):!k&&l?this.setState(a(m,
-this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(a){if(!a.blockless){var h=new e(a,"justifyleft","left"),m=new e(a,"justifycenter","center"),l=new e(a,"justifyright","right"),k=new e(a,"justifyblock","justify");a.addCommand("justifyleft",h);a.addCommand("justifycenter",m);a.addCommand("justifyright",l);a.addCommand("justifyblock",k);a.ui.addButton&&(a.ui.addButton("JustifyLeft",
-{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",c)}}})}(),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var a=function(a){var c=
-this._,f=c.menu;c.state!==CKEDITOR.TRISTATE_DISABLED&&(c.on&&f?f.hide():(c.previousState=c.state,f||(f=c.menu=new CKEDITOR.menu(a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.common.options}}}),f.onHide=CKEDITOR.tools.bind(function(){var f=this.command?a.getCommand(this.command).modes:this.modes;this.setState(!f||f[a.mode]?c.previousState:CKEDITOR.TRISTATE_DISABLED);c.on=0},this),this.onMenu&&f.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),c.on=1,setTimeout(function(){f.show(CKEDITOR.document.getById(c.id),
-4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(e){delete e.panel;this.base(e);this.hasArrow=!0;this.click=a},statics:{handler:{create:function(a){return new CKEDITOR.ui.menuButton(a)}}}})},beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(a){var e=a.config.language_list||["ar:Arabic:rtl",
-"fr:French","es:Spanish"],c=this,f=a.lang.language,h={},m,l,k,d;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,c){var d=h["language_"+c];if(d)a[d.style.checkActive(a.elementPath(),a)?"removeStyle":"applyStyle"](d.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(d=0;d<e.length;d++)m=e[d].split(":"),l=m[0],k="language_"+l,h[k]={label:m[1],langId:l,group:"language",
-order:d,ltr:"rtl"!=(""+m[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},h[k].style=new CKEDITOR.style({element:"span",attributes:{lang:l,dir:h[k].ltr?"ltr":"rtl"}});h.language_remove={label:f.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:h.length,onClick:function(){var b=c.getCurrentLangElement(a);b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(h);
-a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:f.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),e;for(e in h)b[e]=CKEDITOR.TRISTATE_OFF;b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var e=a.elementPath();a=e&&e.elements;var c;if(e)for(var f=0;f<
-a.length;f++)e=a[f],!c&&"span"==e.getName()&&e.hasAttribute("dir")&&e.hasAttribute("lang")&&(c=e);return c}})}(),function(){function a(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];
-(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(g=0;g<f.length;g++)h=f[g].getCustomData("listarray_index"),e[h].indent=-1;for(g=h+1;g<e.length;g++)if(e[g].indent>e[g-1].indent+1){f=e[g-1].indent+1-e[g].indent;for(h=e[g].indent;e[g]&&e[g].indent>=h;)e[g].indent+=f,g++;g--}var k=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);
-a.fire("contentDomInvalidated")}function e(a,b){this.name=a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function c(a,b,c,d){for(var e,f;e=a[d?"getLast":"getFirst"](u);)(f=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",f),e.remove(),c?e[d?"insertBefore":"insertAfter"](c):b.append(e,d)}function f(a){function b(d){var e=a[d?"getPrevious":"getNext"](g);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(a.getName())&&(c(a,e,null,!d),a.remove(),a=e)}b();b(1)}function h(a){return a.type==
-CKEDITOR.NODE_ELEMENT&&(a.getName()in CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function m(a,b,d){a.fire("saveSnapshot");d.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var e=d.extractContents();b.trim(!1,!0);var h=b.createBookmark(),k=new CKEDITOR.dom.elementPath(b.startContainer),m=k.block,k=k.lastElement.getAscendant("li",1)||m,z=new CKEDITOR.dom.elementPath(d.startContainer),y=z.contains(CKEDITOR.dtd.$listItem),z=z.contains(CKEDITOR.dtd.$list);m?
-(m=m.getBogus())&&m.remove():z&&(m=z.getPrevious(g))&&n(m)&&m.remove();(m=e.getLast())&&m.type==CKEDITOR.NODE_ELEMENT&&m.is("br")&&m.remove();(m=b.startContainer.getChild(b.startOffset))?e.insertBefore(m):b.startContainer.append(e);y&&(e=l(y))&&(k.contains(y)?(c(e,y.getParent(),y),e.remove()):k.append(e));for(;d.checkStartOfBlock()&&d.checkEndOfBlock();){z=d.startPath();e=z.block;if(!e)break;e.is("li")&&(k=e.getParent(),e.equals(k.getLast(g))&&e.equals(k.getFirst(g))&&(e=k));d.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);
-e.remove()}d=d.clone();e=a.editable();d.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=function(a){return g(a)&&!n(a)};(d=d.next())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in CKEDITOR.dtd.$list&&f(d);b.moveToBookmark(h);b.select();a.fire("saveSnapshot")}function l(a){return(a=a.getLast(g))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in k?a:null}var k={ol:1,ul:1},d=CKEDITOR.dom.walker.whitespaces(),b=CKEDITOR.dom.walker.bookmark(),g=function(a){return!(d(a)||b(a))},
-n=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(a,b,c,d,e){if(!k[a.getName()])return[];d||(d=0);c||(c=[]);for(var f=0,g=a.getChildCount();f<g;f++){var h=a.getChild(f);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(h,b,c,d+1);if("li"==h.$.nodeName.toLowerCase()){var l={parent:a,indent:d,element:h,contents:[]};e?l.grandparent=e:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=
-l.grandparent.getParent()));b&&CKEDITOR.dom.element.setMarker(b,h,"listarray_index",c.length);c.push(l);for(var m=0,n=h.getChildCount(),t;m<n;m++)t=h.getChild(m),t.type==CKEDITOR.NODE_ELEMENT&&k[t.getName()]?CKEDITOR.plugins.list.listToArray(t,b,c,d+1,l.grandparent):l.contents.push(t)}}return c},arrayToList:function(a,c,d,e,f){d||(d=0);if(!a||a.length<d+1)return null;for(var h,l=a[d].parent.getDocument(),m=new CKEDITOR.dom.documentFragment(l),n=null,t=d,u=Math.max(a[d].indent,0),C=null,G,F,I=e==CKEDITOR.ENTER_P?
-"p":"div";;){var H=a[t];h=H.grandparent;G=H.element.getDirection(1);if(H.indent==u){n&&a[t].parent.getName()==n.getName()||(n=a[t].parent.clone(!1,1),f&&n.setAttribute("dir",f),m.append(n));C=n.append(H.element.clone(0,1));G!=n.getDirection(1)&&C.setAttribute("dir",G);for(h=0;h<H.contents.length;h++)C.append(H.contents[h].clone(1,1));t++}else if(H.indent==Math.max(u,0)+1)H=a[t-1].element.getDirection(1),t=CKEDITOR.plugins.list.arrayToList(a,null,t,e,H!=G?G:null),!C.getChildCount()&&CKEDITOR.env.needsNbspFiller&&
-7>=l.$.documentMode&&C.append(l.createText(" ")),C.append(t.listNode),t=t.nextIndex;else if(-1==H.indent&&!d&&h){k[h.getName()]?(C=H.element.clone(!1,!0),G!=h.getDirection(1)&&C.setAttribute("dir",G)):C=new CKEDITOR.dom.documentFragment(l);var n=h.getDirection(1)!=G,N=H.element,O=N.getAttribute("class"),E=N.getAttribute("style"),S=C.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e!=CKEDITOR.ENTER_BR||n||E||O),L,P=H.contents.length,J;for(h=0;h<P;h++)if(L=H.contents[h],b(L)&&1<P)S?J=L.clone(1,1):C.append(L.clone(1,
-1));else if(L.type==CKEDITOR.NODE_ELEMENT&&L.isBlockBoundary()){n&&!L.getDirection()&&L.setAttribute("dir",G);F=L;var T=N.getAttribute("style");T&&F.setAttribute("style",T.replace(/([^;])$/,"$1;")+(F.getAttribute("style")||""));O&&L.addClass(O);F=null;J&&(C.append(J),J=null);C.append(L.clone(1,1))}else S?(F||(F=l.createElement(I),C.append(F),n&&F.setAttribute("dir",G)),E&&F.setAttribute("style",E),O&&F.setAttribute("class",O),J&&(F.append(J),J=null),F.append(L.clone(1,1))):C.append(L.clone(1,1));
-J&&((F||C).append(J),J=null);C.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&t!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(G=C.getLast())&&G.type==CKEDITOR.NODE_ELEMENT&&G.is("br")&&G.remove(),(G=C.getLast(g))&&G.type==CKEDITOR.NODE_ELEMENT&&G.is(CKEDITOR.dtd.$block)||C.append(l.createElement("br")));G=C.$.nodeName.toLowerCase();"div"!=G&&"p"!=G||C.appendBogus();m.append(C);n=null;t++}else return null;F=null;if(a.length<=t||Math.max(a[t].indent,0)<u)break}if(c)for(a=m.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&
-(CKEDITOR.dom.element.clearMarkers(c,a),a.getName()in CKEDITOR.dtd.$listItem&&(d=a,l=f=e=void 0,e=d.getDirection()))){for(f=d.getParent();f&&!(l=f.getDirection());)f=f.getParent();e==l&&d.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:m,nextIndex:t}}};var t=/^h[1-6]$/,u=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(b){this.refresh(b,b.elementPath());var c=b.config,d=b.getSelection(),e=d&&d.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var h=b.editable();
-if(h.getFirst(g)){var l=1==e.length&&e[0];(c=l&&l.getEnclosedNode())&&c.is&&this.type==c.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else c.enterMode==CKEDITOR.ENTER_BR?h.appendBogus():e[0].fixBlock(1,c.enterMode==CKEDITOR.ENTER_P?"p":"div"),d.selectRanges(e)}for(var c=d.createBookmarks(!0),h=[],m={},e=e.createIterator(),n=0;(l=e.getNextRange())&&++n;){var y=l.getBoundaryNodes(),x=y.startNode,u=y.endNode;x.type==CKEDITOR.NODE_ELEMENT&&"td"==x.getName()&&l.setStartAt(y.startNode,CKEDITOR.POSITION_AFTER_START);
-u.type==CKEDITOR.NODE_ELEMENT&&"td"==u.getName()&&l.setEndAt(y.endNode,CKEDITOR.POSITION_BEFORE_END);l=l.createIterator();for(l.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;y=l.getNextParagraph();)if(!y.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(m,y,"list_block",1);for(var C=b.elementPath(y),x=C.elements,u=0,C=C.blockLimit,G,F=x.length-1;0<=F&&(G=x[F]);F--)if(k[G.getName()]&&C.contains(G)){C.removeCustomData("list_group_object_"+n);(x=G.getCustomData("list_group_object"))?x.contents.push(y):
-(x={root:G,contents:[y]},h.push(x),CKEDITOR.dom.element.setMarker(m,G,"list_group_object",x));u=1;break}u||(u=C,u.getCustomData("list_group_object_"+n)?u.getCustomData("list_group_object_"+n).contents.push(y):(x={root:u,contents:[y]},CKEDITOR.dom.element.setMarker(m,u,"list_group_object_"+n,x),h.push(x)))}}for(G=[];0<h.length;)if(x=h.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(k[x.root.getName()]){e=b;n=x;x=m;l=G;u=CKEDITOR.plugins.list.listToArray(n.root,x);C=[];for(y=0;y<n.contents.length;y++)F=
-n.contents[y],(F=F.getAscendant("li",!0))&&!F.getCustomData("list_item_processed")&&(C.push(F),CKEDITOR.dom.element.setMarker(x,F,"list_item_processed",!0));for(var F=n.root.getDocument(),I=void 0,H=void 0,y=0;y<C.length;y++){var N=C[y].getCustomData("listarray_index"),I=u[N].parent;I.is(this.type)||(H=F.createElement(this.type),I.copyAttributes(H,{start:1,type:1}),H.removeStyle("list-style-type"),u[N].parent=H)}x=CKEDITOR.plugins.list.arrayToList(u,x,null,e.config.enterMode);u=void 0;C=x.listNode.getChildCount();
-for(y=0;y<C&&(u=x.listNode.getChild(y));y++)u.getName()==this.type&&l.push(u);x.listNode.replace(n.root);e.fire("contentDomInvalidated")}else{u=b;l=x;y=G;C=l.contents;e=l.root.getDocument();n=[];1==C.length&&C[0].equals(l.root)&&(x=e.createElement("div"),C[0].moveChildren&&C[0].moveChildren(x),C[0].append(x),C[0]=x);l=l.contents[0].getParent();for(F=0;F<C.length;F++)l=l.getCommonAncestor(C[F].getParent());I=u.config.useComputedState;u=x=void 0;I=void 0===I||I;for(F=0;F<C.length;F++)for(H=C[F];N=H.getParent();){if(N.equals(l)){n.push(H);
-!u&&H.getDirection()&&(u=1);H=H.getDirection(I);null!==x&&(x=x&&x!=H?null:H);break}H=N}if(!(1>n.length)){C=n[n.length-1].getNext();F=e.createElement(this.type);y.push(F);for(I=y=void 0;n.length;)y=n.shift(),I=e.createElement("li"),H=y,H.is("pre")||t.test(H.getName())||"false"==H.getAttribute("contenteditable")?y.appendTo(I):(y.copyAttributes(I),x&&y.getDirection()&&(I.removeStyle("direction"),I.removeAttribute("dir")),y.moveChildren(I),y.remove()),I.appendTo(F);x&&u&&F.setAttribute("dir",x);C?F.insertBefore(C):
-F.appendTo(l)}}else this.state==CKEDITOR.TRISTATE_ON&&k[x.root.getName()]&&a.call(this,b,x,m);for(F=0;F<G.length;F++)f(G[F]);CKEDITOR.dom.element.clearAllMarkers(m);d.selectBookmarks(c);b.focus()},refresh:function(a,b){var c=b.contains(k,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){a.blockless||(a.addCommand("numberedlist",
-new e("numberedlist","ol")),a.addCommand("bulletedlist",new e("bulletedlist","ul")),a.ui.addButton&&(a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),a.ui.addButton("BulletedList",{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var c=b.data.domEvent.getKey(),d;if("wysiwyg"==a.mode&&c in{8:1,46:1}){var e=a.getSelection().getRanges()[0],f=e&&e.startPath();if(e&&e.collapsed){var q=
-8==c,t=a.editable(),u=new CKEDITOR.dom.walker(e.clone());u.evaluator=function(a){return g(a)&&!n(a)};u.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};c=e.clone();if(q){var x;(x=f.contains(k))&&e.checkBoundaryOfElement(x,CKEDITOR.START)&&(x=x.getParent())&&x.is("li")&&(x=l(x))?(d=x,x=x.getPrevious(g),c.moveToPosition(x&&n(x)?x:d,CKEDITOR.POSITION_BEFORE_START)):(u.range.setStartAt(t,CKEDITOR.POSITION_AFTER_START),u.range.setEnd(e.startContainer,e.startOffset),(x=u.previous())&&
-x.type==CKEDITOR.NODE_ELEMENT&&(x.getName()in k||x.is("li"))&&(x.is("li")||(u.range.selectNodeContents(x),u.reset(),u.evaluator=h,x=u.previous()),d=x,c.moveToElementEditEnd(d),c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END)));if(d)m(a,c,e),b.cancel();else{var D=f.contains(k);D&&e.checkBoundaryOfElement(D,CKEDITOR.START)&&(d=D.getFirst(g),e.checkBoundaryOfElement(d,CKEDITOR.START)&&(x=D.getPrevious(g),l(d)?x&&(e.moveToElementEditEnd(x),e.select()):a.execCommand("outdent"),b.cancel()))}}else if(d=
-f.contains("li")){if(u.range.setEndAt(t,CKEDITOR.POSITION_BEFORE_END),q=(t=d.getLast(g))&&h(t)?t:d,f=0,(x=u.next())&&x.type==CKEDITOR.NODE_ELEMENT&&x.getName()in k&&x.equals(t)?(f=1,x=u.next()):e.checkBoundaryOfElement(q,CKEDITOR.END)&&(f=2),f&&x){e=e.clone();e.moveToElementEditStart(x);if(1==f&&(c.optimize(),!c.startContainer.equals(d))){for(d=c.startContainer;d.is(CKEDITOR.dtd.$inline);)D=d,d=d.getParent();D&&c.moveToPosition(D,CKEDITOR.POSITION_AFTER_END)}2==f&&(c.moveToPosition(c.endPath().block,
-CKEDITOR.POSITION_BEFORE_END),e.endPath().block&&e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_AFTER_START));m(a,c,e);b.cancel()}}else u.range.setEndAt(t,CKEDITOR.POSITION_BEFORE_END),(x=u.next())&&x.type==CKEDITOR.NODE_ELEMENT&&x.is(k)&&(x=x.getFirst(g),f.block&&e.checkStartOfBlock()&&e.checkEndOfBlock()?(f.block.remove(),e.moveToElementEditStart(x),e.select()):l(x)?(e.moveToElementEditStart(x),e.select()):(e=e.clone(),e.moveToElementEditStart(x),m(a,c,e)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),
-"use strict",function(){function a(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(ca(a)||da(a)||t(a))}))}function e(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function c(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=l(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function f(a,b,c){q(a,b);q(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function h(a,
-b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!ca(b)||n(b)&&!t(b)&&!g(a,b)})}function m(a,b,c){return a>b&&a<c}function l(a,b){if(a.data("cke-editable"))return null;for(b||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function k(a){var b=a.doc,c=G('\x3cspan contenteditable\x3d"false" style\x3d"'+U+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),e=
-CKEDITOR.getUrl(this.path+"images/"+(F.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");D(c,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[D(G('\x3cspan title\x3d"'+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:U+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+e+") center no-repeat "+a.boxColor+";cursor:pointer;"+(F.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":
-"")+(F.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),D(G(ba,b),{base:R+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),D(G(ba,b),{base:R+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px",
-"border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){q(a,this);var b=a.holdDistance,c=this.size;return c&&m(a.mouse.y,c.top-b,c.bottom+b)&&m(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,e=d.upper,f=d.lower,g=e||f,h=g.getParent(),k={};this.trigger=d;e&&q(a,e,!0);f&&q(a,f,!0);q(a,h,!0);a.inInlineMode&&z(a,!0);h.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=
-g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x,k.right="");e&&f?k.top=e.size.margin.bottom===f.size.margin.top?0|e.size.bottom+e.size.margin.bottom/2:e.size.margin.bottom<f.size.margin.top?e.size.bottom+e.size.margin.bottom:e.size.bottom+e.size.margin.bottom-f.size.margin.top:e?f||(k.top=e.size.bottom+e.size.margin.bottom):k.top=f.size.top-f.size.margin.top;d.is(P)||m(k.top,
-b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(P)):d.is(J)||m(k.top,b.pane.bottom-5,b.pane.bottom+15)?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(J)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(T));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=
-a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new C("span",a.doc)});for(b=c.lineChildren.length;b--;)c.lineChildren[b].appendTo(c);c.look(T);c.appendTo(c.wrap);c.unselectable();c.lineChildren[0].on("mouseup",function(b){c.detach();d(a,function(b){var c=a.line.trigger;b[c.is(O)?"insertBefore":"insertAfter"](c.is(O)?c.lower:c.upper)},!0);a.editor.focus();F.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();
-b.data.preventDefault(!0)});c.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=c}function d(a,b,c){var d=new CKEDITOR.dom.range(a.doc),e=a.editor,f;F.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(V):(f=(f=l(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new C(N[f],a.doc),f.is("br")||a.doc.createText(V).appendTo(f));c&&e.fire("saveSnapshot");b(f);d.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([d]);a.hotNode=f;c&&e.fire("saveSnapshot")}
-function b(a,b){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(c){var f=F.ie&&9>F.version?" ":V,g=a.hotNode&&a.hotNode.getText()==f&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!b;d(a,function(d){g&&a.hotNode&&a.hotNode.remove();d[b?"insertAfter":"insertBefore"](c);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!b});a.lastCmdDirection=!!b});F.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();a.line.detach()}return function(d){d=d.getSelection().getStartElement();
-var f;d=d.getAscendant(K,1);if(!p(a,d)&&d&&!d.equals(a.editable)&&!d.contains(a.editable)){(f=l(d))&&"false"==f.getAttribute("contenteditable")&&(d=f);a.element=d;f=h(a,d,!b);var g;n(f)&&f.is(a.triggers)&&f.is(M)&&(!h(a,f,!b)||(g=h(a,f,!b))&&n(g)&&g.is(a.triggers))?e(f):(g=c(a,d),n(g)&&(h(a,g,!b)?(d=h(a,g,!b))&&n(d)&&d.is(a.triggers)&&e(g):e(g)))}}}()}}function g(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&
-a.type==CKEDITOR.NODE_ELEMENT&&a.$}function t(a){if(!n(a))return!1;var b;(b=u(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function u(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function w(a,b){return n(b)?b.is(a.triggers):null}function p(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var e=a.tabuList.length;e--;)if(c[d].hasAttribute(a.tabuList[e]))return!0;return!1}function r(a,b,c){b=
-b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(X)});if(!b)return!1;q(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function v(a){var b=a.editable,c=a.mouse,d=a.view,f=a.triggerOffset;z(a);var h=c.y>(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[h?"getLast":"getFirst"](function(a){return!(ca(a)||da(a))});if(!b)return null;g(a,b)&&(b=a.line.wrap[h?"getPrevious":"getNext"](function(a){return!(ca(a)||da(a))}));if(!n(b)||
-t(b)||!w(a,b))return null;q(a,b);return!h&&0<=b.size.top&&m(c.y,0,b.size.top+f)?(a=a.inInlineMode||0===d.scroll.y?P:T,new e([null,b,O,L,a])):h&&b.size.bottom<=d.pane.height&&m(c.y,b.size.bottom-f,d.pane.height)?(a=a.inInlineMode||m(b.size.bottom,d.pane.height-f,d.pane.height)?J:T,new e([b,null,E,L,a])):null}function A(a){var b=a.mouse,d=a.view,f=a.triggerOffset,g=c(a);if(!g)return null;q(a,g);var f=Math.min(f,0|g.size.outerHeight/2),k=[],l,p;if(m(b.y,g.size.top-1,g.size.top+f))p=!1;else if(m(b.y,
-g.size.bottom-f,g.size.bottom+1))p=!0;else return null;if(t(g)||r(a,g,p)||g.getParent().is(W))return null;var v=h(a,g,!p);if(v){if(v&&v.type==CKEDITOR.NODE_TEXT)return null;if(n(v)){if(t(v)||!w(a,v)||v.getParent().is(W))return null;k=[v,g][p?"reverse":"concat"]().concat([S,L])}}else g.equals(a.editable[p?"getLast":"getFirst"](a.isRelevant))?(z(a),p&&m(b.y,g.size.bottom-f,d.pane.height)&&m(g.size.bottom,d.pane.height-f,d.pane.height)?l=J:m(b.y,0,g.size.top+f)&&(l=P)):l=T,k=[null,g][p?"reverse":"concat"]().concat([p?
-E:O,L,l,g.equals(a.editable[p?"getLast":"getFirst"](a.isRelevant))?p?J:P:T]);return 0 in k?new e(k):null}function B(a,b,c,d){for(var e=b.getDocumentPosition(),f={},g={},h={},k={},l=ea.length;l--;)f[ea[l]]=parseInt(b.getComputedStyle.call(b,"border-"+ea[l]+"-width"),10)||0,h[ea[l]]=parseInt(b.getComputedStyle.call(b,"padding-"+ea[l]),10)||0,g[ea[l]]=parseInt(b.getComputedStyle.call(b,"margin-"+ea[l]),10)||0;c&&!d||y(a,d);k.top=e.y-(c?0:a.view.scroll.y);k.left=e.x-(c?0:a.view.scroll.x);k.outerWidth=
-b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+f.top+f.bottom);k.width=k.outerWidth-(h.left+h.right+f.left+f.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,left:b.$.scrollLeft});return D({border:f,padding:h,margin:g,ignoreScroll:c},k,!0)}function q(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-Q)return null;return D(b.size,B(a,b,c),{date:+new Date},
-!0)}function z(a,b){a.view.editable=B(a,a.editable,b,!0)}function y(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-Q)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();D(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function x(a,b,c,d){for(var f=d,g=d,h=0,k=!1,l=!1,m=a.view.pane.height,p=a.mouse;p.y+h<m&&0<p.y-
-h;){k||(k=b(f,d));l||(l=b(g,d));!k&&0<p.y-h&&(f=c(a,{x:p.x,y:p.y-h}));!l&&p.y+h<m&&(g=c(a,{x:p.x,y:p.y+h}));if(k&&l)break;h+=2}return new e([f,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var f=a.config,l=f.magicline_triggerOffset||30,m={editor:a,enterMode:f.enterMode,triggerOffset:l,holdDistance:0|l*(f.magicline_holdDistance||.5),boxColor:f.magicline_color||"#ff0000",rtl:"rtl"==f.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(f.magicline_tabuList||[]),triggers:f.magicline_everywhere?
-K:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},q,r,w;m.isRelevant=function(a){return n(a)&&!g(m,a)&&!t(a)};a.on("contentDom",function(){var l=a.editable(),n=a.document,t=a.window;D(m,{editable:l,inInlineMode:l.isInline(),doc:n,win:t,hotNode:null},!0);m.boundary=m.inInlineMode?m.editable:m.doc.getDocumentElement();l.is(H.$inline)||(m.inInlineMode&&!u(l)&&l.setStyles({position:"relative",top:null,left:null}),k.call(this,m),y(m),l.attachListener(a,"beforeUndoImage",function(){m.line.detach()}),
-l.attachListener(a,"beforeGetData",function(){m.line.wrap.getParent()&&(m.line.detach(),a.once("getData",function(){m.line.attach()},null,null,1E3))},null,null,0),l.attachListener(m.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(b){if("wysiwyg"==a.mode)if(m.inInlineMode){var c=b.data.$.clientX;b=b.data.$.clientY;y(m);z(m,!0);var d=m.view.editable,e=m.view.scroll;c>d.left-e.x&&c<d.right-e.x&&b>d.top-e.y&&b<d.bottom-e.y||(clearTimeout(w),w=null,m.line.detach())}else clearTimeout(w),w=null,
-m.line.detach()}),l.attachListener(l,"keyup",function(){m.hiddenMode=0}),l.attachListener(l,"keydown",function(b){if("wysiwyg"==a.mode)switch(b.data.getKeystroke()){case 2228240:case 16:m.hiddenMode=1,m.line.detach()}}),l.attachListener(m.inInlineMode?l:n,"mousemove",function(b){r=!0;if("wysiwyg"==a.mode&&!a.readOnly&&!w){var c={x:b.data.$.clientX,y:b.data.$.clientY};w=setTimeout(function(){m.mouse=c;w=m.trigger=null;y(m);r&&!m.hiddenMode&&a.focusManager.hasFocus&&!m.line.mouseNear()&&(m.element=
-Y(m,!0))&&((m.trigger=v(m)||A(m)||aa(m))&&!p(m,m.trigger.upper||m.trigger.lower)?m.line.attach().place():(m.trigger=null,m.line.detach()),r=!1)},30)}}),l.attachListener(t,"scroll",function(){"wysiwyg"==a.mode&&(m.line.detach(),F.webkit&&(m.hiddenMode=1,clearTimeout(q),q=setTimeout(function(){m.mouseDown||(m.hiddenMode=0)},50)))}),l.attachListener(I?n:t,"mousedown",function(){"wysiwyg"==a.mode&&(m.line.detach(),m.hiddenMode=1,m.mouseDown=1)}),l.attachListener(I?n:t,"mouseup",function(){m.hiddenMode=
-0;m.mouseDown=0}),a.addCommand("accessPreviousSpace",b(m)),a.addCommand("accessNextSpace",b(m,!0)),a.setKeystroke([[f.magicline_keystrokePrevious,"accessPreviousSpace"],[f.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var b,c,d,e;for(e in{p:1,br:1,div:1})for(b=a.document.getElementsByTag(e),d=b.count();d--;)if((c=b.getItem(d)).data("cke-magicline-hot")){m.hotNode=c;m.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),this.backdoor={accessFocusSpace:d,
-boxTrigger:e,isLine:g,getAscendantTrigger:c,getNonEmptyNeighbour:h,getSize:B,that:m,triggerEdge:A,triggerEditable:v,triggerExpand:aa})},this)}});var D=CKEDITOR.tools.extend,C=CKEDITOR.dom.element,G=C.createFromHtml,F=CKEDITOR.env,I=CKEDITOR.env.ie&&9>CKEDITOR.env.version,H=CKEDITOR.dtd,N={},O=128,E=64,S=32,L=16,P=4,J=2,T=1,V=" ",W=H.$listItem,X=H.$tableContent,M=D({},H.$nonEditable,H.$empty),K=H.$block,Q=100,U="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",
-R=U+"border-color:transparent;display:block;border-style:solid;",ba="\x3cspan\x3e"+V+"\x3c/span\x3e";N[CKEDITOR.ENTER_BR]="br";N[CKEDITOR.ENTER_P]="p";N[CKEDITOR.ENTER_DIV]="div";e.prototype={set:function(a,b,c){this.properties=a+b+(c||T);return this},is:function(a){return(this.properties&a)==a}};var Y=function(){function a(b,c){var d=b.$.elementFromPoint(c.x,c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,d){if(!b.mouse)return null;var e=b.doc,f=b.line.wrap;d=d||b.mouse;
-var h=a(e,d);c&&g(b,h)&&(f.hide(),h=a(e,d),f.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||F.ie&&9>F.version&&!b.boundary.equals(h)&&!b.boundary.contains(h)?null:h}}(),ca=CKEDITOR.dom.walker.whitespaces(),da=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),aa=function(){function b(d){var e=d.element,g,h,k;if(!n(e)||e.contains(d.editable)||e.isReadOnly())return null;k=x(d,function(a,b){return!b.equals(a)},function(a,b){return Y(a,!0,b)},e);g=k.upper;h=k.lower;if(a(d,g,h))return k.set(S,
-8);if(g&&e.contains(g))for(;!g.getParent().equals(e);)g=g.getParent();else g=e.getFirst(function(a){return c(d,a)});if(h&&e.contains(h))for(;!h.getParent().equals(e);)h=h.getParent();else h=e.getLast(function(a){return c(d,a)});if(!g||!h)return null;q(d,g);q(d,h);if(!m(d.mouse.y,g.size.top,h.size.bottom))return null;for(var e=Number.MAX_VALUE,l,p,v,r;h&&!h.equals(g)&&(p=g.getNext(d.isRelevant));)l=Math.abs(f(d,g,p)-d.mouse.y),l<e&&(e=l,v=g,r=p),g=p,q(d,g);if(!v||!r||!m(d.mouse.y,v.size.top,r.size.bottom))return null;
-k.upper=v;k.lower=r;return k.set(S,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||da(b)||t(b)||g(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=b(c),e;if(e=d){e=d.upper;var f=d.lower;e=!e||!f||t(f)||t(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:w(c,e)&&w(c,f)&&a(c,e,f)?!0:!1}return e?d:null}}(),ea=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=
-CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function a(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var c=[],e=["style","className"],d=0;d<e.length;d++){var b=a.$.elements.namedItem(e[d]);b&&(b=new CKEDITOR.dom.element(b),c.push([b,b.nextSibling]),b.remove())}return c}function e(a,c){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<c.length)for(var e=c.length-1;0<=e;e--){var d=c[e][0],b=c[e][1];b?d.insertBefore(b):d.appendTo(a)}}function c(c,f){var h=a(c),d=
-{},b=c.$;f||(d["class"]=b.className||"",b.className="");d.inline=b.style.cssText||"";f||(b.style.cssText="position: static; overflow: visible");e(h);return d}function f(c,f){var h=a(c),d=c.$;"class"in f&&(d.className=f["class"]);"inline"in f&&(d.style.cssText=f.inline);e(h)}function h(a){if(!a.editable().isInline()){var c=CKEDITOR.instances,e;for(e in c){var d=c[e];"wysiwyg"!=d.mode||d.readOnly||(d=d.document.getBody(),d.setAttribute("contentEditable",!1),d.setAttribute("contentEditable",!0))}a.editable().hasFocus&&
-(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var c=b.getViewPaneSize();a.resize(c.width,c.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var k=a.lang,d=CKEDITOR.document,b=d.getWindow(),g,n,t,u=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var w=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),
-p=a.ui.space("contents");if("wysiwyg"==a.mode){var r=a.getSelection();g=r&&r.getRanges();n=b.getScrollPosition()}else{var v=a.editable().$;g=!CKEDITOR.env.ie&&[v.selectionStart,v.selectionEnd];n=[v.scrollLeft,v.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){b.on("resize",e);t=b.getScrollPosition();for(r=a.container;r=r.getParent();)r.setCustomData("maximize_saved_styles",c(r)),r.setStyle("z-index",a.config.baseFloatZIndex-5);p.setCustomData("maximize_saved_styles",c(p,!0));w.setCustomData("maximize_saved_styles",
-c(w,!0));p={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};d.getDocumentElement().setStyles(p);!CKEDITOR.env.gecko&&d.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||d.getBody().setStyles(p);CKEDITOR.env.ie?setTimeout(function(){b.$.scrollTo(0,0)},0):b.$.scrollTo(0,0);w.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");w.$.offsetLeft;w.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});w.addClass("cke_maximized");
-e();p=w.getDocumentPosition();w.setStyles({left:-1*p.x+"px",top:-1*p.y+"px"});CKEDITOR.env.gecko&&h(a)}else if(this.state==CKEDITOR.TRISTATE_ON){b.removeListener("resize",e);for(var r=[p,w],A=0;A<r.length;A++)f(r[A],r[A].getCustomData("maximize_saved_styles")),r[A].removeCustomData("maximize_saved_styles");for(r=a.container;r=r.getParent();)f(r,r.getCustomData("maximize_saved_styles")),r.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){b.$.scrollTo(t.x,t.y)},0):b.$.scrollTo(t.x,
-t.y);w.removeClass("cke_maximized");CKEDITOR.env.webkit&&(w.setStyle("display","inline"),setTimeout(function(){w.setStyle("display","block")},0));a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:p.$.offsetHeight,outerWidth:a.container.$.offsetWidth})}this.toggleState();if(r=this.uiItems[0])p=this.state==CKEDITOR.TRISTATE_OFF?k.maximize.maximize:k.maximize.minimize,r=CKEDITOR.document.getById(r._.id),r.getChild(1).setHtml(p),r.setAttribute("title",p),r.setAttribute("href",'javascript:void("'+
-p+'");');"wysiwyg"==a.mode?g?(CKEDITOR.env.gecko&&h(a),a.getSelection().selectRanges(g),(v=a.getSelection().getStartElement())&&v.scrollIntoView(!0)):b.$.scrollTo(n.x,n.y):(g&&(v.selectionStart=g[0],v.selectionEnd=g[1]),v.scrollLeft=n[0],v.scrollTop=n[1]);g=n=null;u=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:k.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==
-CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:u)},null,null,100)}}})}(),function(){function a(a,c,f){var h=CKEDITOR.cleanWord;h?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||c+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!h}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(e){var c=0,f=this.path;e.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a,e){c=1;a.execCommand("paste",{type:"html",notification:e&&"undefined"!==
-typeof e.notification?e.notification:!0})}});e.ui.addButton&&e.ui.addButton("PasteFromWord",{label:e.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});e.on("paste",function(h){var m=h.data,l=(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?m.dataTransfer.getData("text/html",!0):null)||m.dataValue,k={dataValue:l},d=/(class=\"?Mso|style=(?:\"|\')[^\"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,d=/<meta\s*name=(?:\"|\')?generator(?:\"|\')?\s*content=(?:\"|\')?microsoft/gi.test(l)||
-d.test(l);if(l&&(c||d)&&(!1!==e.fire("pasteFromWord",k)||c)){m.dontFilter=!0;var b=a(e,f,function(){if(b)e.fire("paste",m);else if(!e.config.pasteFromWordPromptCleanup||c||confirm(e.lang.pastefromword.confirmCleanup))k.dataValue=CKEDITOR.cleanWord(k.dataValue,e),e.fire("afterPasteFromWord",k),m.dataValue=k.dataValue;c=0});b&&h.cancel()}},null,null,3)}})}(),function(){var a={canUndo:!1,async:!0,exec:function(a,c){var f=a.lang,h=CKEDITOR.tools.keystrokeToString(f.common.keyboard,a.getCommandKeystroke(CKEDITOR.env.ie?
-a.commands.paste:this)),m=c&&"undefined"!==typeof c.notification?c.notification:!c||!c.from||"keystrokeHandler"===c.from&&CKEDITOR.env.ie,f=m&&"string"===typeof m?m:f.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e");a.execCommand("paste",{type:"text",notification:m?f:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(e){var c=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+
-86;e.addCommand("pastetext",a);e.setKeystroke(c,"pastetext");e.ui.addButton&&e.ui.addButton("PasteText",{label:e.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(e.config.forcePasteAsPlainText)e.on("beforePaste",function(a){"html"!=a.data.type&&(a.data.type="text")});e.on("pasteState",function(a){e.getCommand("pastetext").setState(a.data)})}})}(),CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);
-a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var e=a._.removeFormatRegex||(a._.removeFormatRegex=new RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),c=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,h=a.getSelection().getRanges(),m=h.createIterator(),
-l=function(a){return a.type==CKEDITOR.NODE_ELEMENT},k;k=m.getNextRange();){k.collapsed||k.enlarge(CKEDITOR.ENLARGE_ELEMENT);var d=k.createBookmark(),b=d.startNode,g=d.endNode,n=function(b){for(var c=a.elementPath(b),d=c.elements,g=1,h;(h=d[g])&&!h.equals(c.block)&&!h.equals(c.blockLimit);g++)e.test(h.getName())&&f(a,h)&&b.breakParent(h)};n(b);if(g)for(n(g),b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(g);)if(b.isReadOnly()){if(b.getPosition(g)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(l)}else n=
-b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==b.getName()&&b.data("cke-realelement")||!f(a,b)||(e.test(b.getName())?b.remove(1):(b.removeAttributes(c),a.fire("removeFormatCleanup",b))),b=n;k.moveToBookmark(d)}a.forceNextSelectionCheck();a.getSelection().selectRanges(h)}}},filter:function(a,e){for(var c=a._.removeFormatFilters||[],f=0;f<c.length;f++)if(!1===c[f](e))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=
-[]);this._.removeFormatFilters.push(a)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",function(){function a(a,f,h){var m,l;if(h="string"==typeof h?CKEDITOR.document.getById(h):new CKEDITOR.dom.element(h))if(m=a.fire("uiSpace",{space:f,html:""}).html)a.on("uiSpace",function(a){a.data.space==f&&a.cancel()},null,null,1),l=h.append(CKEDITOR.dom.element.createFromHtml(e.output({id:a.id,
-name:a.name,langDir:a.lang.dir,langCode:a.langCode,space:f,spaceId:a.ui.spaceId(f),content:m}))),h.getCustomData("cke_hasshared")?l.hide():h.setCustomData("cke_hasshared",1),l.unselectable(),l.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()}),a.focusManager.add(l,1),a.on("focus",function(){for(var a=0,c,b=h.getChildren();c=b.getItem(a);a++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(l)&&c.hasClass("cke_shared")&&c.hide();l.show()}),a.on("destroy",function(){l.remove()})}
-var e=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');CKEDITOR.plugins.add("sharedspace",{init:function(c){c.on("loaded",
-function(){var e=c.config.sharedSpaces;if(e)for(var h in e)a(c,h,e[h])},null,null,9)}})}(),function(){var a={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state!=CKEDITOR.TRISTATE_ON||a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!a.focusManager.hasFocus?"removeClass":"attachClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),
-c,f,h,m,l=CKEDITOR.getUrl(this.path),k=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),d=k?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",b,g;for(c=f=h=m="";b=a.pop();)g=a.length?",":"",c+=".cke_show_blocks "+b+d+g,h+=".cke_show_blocks.cke_contents_ltr "+b+d+g,m+=".cke_show_blocks.cke_contents_rtl "+b+d+g,f+=".cke_show_blocks "+b+d+"{background-image:url("+CKEDITOR.getUrl(l+"images/block_"+b+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(f,
-h+"{background-position:top left;padding-left:8px}",m+"{background-position:top right;padding-right:8px}"));k||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},
+c.getSelection(),m=c.config.enterMode;if(e){for(var l=e.createBookmarks(),k=e.getRanges(),d=this.cssClassName,b,g,n=c.config.useComputedState,n=void 0===n||n,u=k.length-1;0<=u;u--)for(b=k[u].createIterator(),b.enlargeBr=m!=CKEDITOR.ENTER_BR;g=b.getNextParagraph(m==CKEDITOR.ENTER_P?"p":"div");)if(!g.isReadOnly()){g.removeAttribute("align");g.removeStyle("text-align");var r=d&&(g.$.className=CKEDITOR.tools.ltrim(g.$.className.replace(this.cssClassRegex,""))),w=this.state==CKEDITOR.TRISTATE_OFF&&(!n||
+a(g,!0)!=this.value);d?w?g.addClass(d):r||g.removeAttribute("class"):w&&g.setStyle("text-align",this.value)}c.focus();c.forceNextSelectionCheck();e.selectBookmarks(l)}},refresh:function(c,e){var m=e.block||e.blockLimit;this.setState("body"!=m.getName()&&a(m,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify",{init:function(a){if(!a.blockless){var h=new e(a,"justifyleft","left"),m=new e(a,"justifycenter","center"),l=new e(a,
+"justifyright","right"),k=new e(a,"justifyblock","justify");a.addCommand("justifyleft",h);a.addCommand("justifycenter",m);a.addCommand("justifyright",l);a.addCommand("justifyblock",k);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),
+a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",c)}}})}(),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var a=function(a){var c=this._,f=c.menu;c.state!==CKEDITOR.TRISTATE_DISABLED&&(c.on&&f?f.hide():(c.previousState=c.state,f||(f=c.menu=new CKEDITOR.menu(a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.common.options}}}),f.onHide=CKEDITOR.tools.bind(function(){var f=this.command?
+a.getCommand(this.command).modes:this.modes;this.setState(!f||f[a.mode]?c.previousState:CKEDITOR.TRISTATE_DISABLED);c.on=0},this),this.onMenu&&f.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),c.on=1,setTimeout(function(){f.show(CKEDITOR.document.getById(c.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(e){delete e.panel;this.base(e);this.hasArrow=!0;this.click=a},statics:{handler:{create:function(a){return new CKEDITOR.ui.menuButton(a)}}}})},
+beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(a){var e=a.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,f=a.lang.language,h={},m,l,k,d;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,c){var d=h["language_"+c];if(d)a[d.style.checkActive(a.elementPath(),
+a)?"removeStyle":"applyStyle"](d.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(d=0;d<e.length;d++)m=e[d].split(":"),l=m[0],k="language_"+l,h[k]={label:m[1],langId:l,group:"language",order:d,ltr:"rtl"!=(""+m[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},h[k].style=new CKEDITOR.style({element:"span",attributes:{lang:l,dir:h[k].ltr?"ltr":"rtl"}});h.language_remove={label:f.remove,
+group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:h.length,onClick:function(){var b=c.getCurrentLangElement(a);b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(h);a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:f.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),e;for(e in h)b[e]=CKEDITOR.TRISTATE_OFF;
+b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var e=a.elementPath();a=e&&e.elements;var c;if(e)for(var f=0;f<a.length;f++)e=a[f],!c&&"span"==e.getName()&&e.hasAttribute("dir")&&e.hasAttribute("lang")&&(c=e);return c}})}(),function(){function a(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||
+m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(g=0;g<f.length;g++)h=f[g].getCustomData("listarray_index"),e[h].indent=-1;for(g=h+1;g<e.length;g++)if(e[g].indent>e[g-1].indent+1){f=e[g-1].indent+
+1-e[g].indent;for(h=e[g].indent;e[g]&&e[g].indent>=h;)e[g].indent+=f,g++;g--}var k=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name=a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function c(a,b,c,d){for(var e,f;e=a[d?"getLast":"getFirst"](r);)(f=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",f),e.remove(),c?e[d?"insertBefore":
+"insertAfter"](c):b.append(e,d)}function f(a){function b(d){var e=a[d?"getPrevious":"getNext"](g);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(a.getName())&&(c(a,e,null,!d),a.remove(),a=e)}b();b(1)}function h(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function m(a,b,d){a.fire("saveSnapshot");d.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var e=d.extractContents();b.trim(!1,!0);var h=b.createBookmark(),
+k=new CKEDITOR.dom.elementPath(b.startContainer),m=k.block,k=k.lastElement.getAscendant("li",1)||m,y=new CKEDITOR.dom.elementPath(d.startContainer),x=y.contains(CKEDITOR.dtd.$listItem),y=y.contains(CKEDITOR.dtd.$list);m?(m=m.getBogus())&&m.remove():y&&(m=y.getPrevious(g))&&n(m)&&m.remove();(m=e.getLast())&&m.type==CKEDITOR.NODE_ELEMENT&&m.is("br")&&m.remove();(m=b.startContainer.getChild(b.startOffset))?e.insertBefore(m):b.startContainer.append(e);x&&(e=l(x))&&(k.contains(x)?(c(e,x.getParent(),x),
+e.remove()):k.append(e));for(;d.checkStartOfBlock()&&d.checkEndOfBlock();){y=d.startPath();e=y.block;if(!e)break;e.is("li")&&(k=e.getParent(),e.equals(k.getLast(g))&&e.equals(k.getFirst(g))&&(e=k));d.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e.remove()}d=d.clone();e=a.editable();d.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=function(a){return g(a)&&!n(a)};(d=d.next())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in CKEDITOR.dtd.$list&&f(d);b.moveToBookmark(h);
+b.select();a.fire("saveSnapshot")}function l(a){return(a=a.getLast(g))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in k?a:null}var k={ol:1,ul:1},d=CKEDITOR.dom.walker.whitespaces(),b=CKEDITOR.dom.walker.bookmark(),g=function(a){return!(d(a)||b(a))},n=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(a,b,c,d,e){if(!k[a.getName()])return[];d||(d=0);c||(c=[]);for(var f=0,g=a.getChildCount();f<g;f++){var h=a.getChild(f);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&
+CKEDITOR.plugins.list.listToArray(h,b,c,d+1);if("li"==h.$.nodeName.toLowerCase()){var l={parent:a,indent:d,element:h,contents:[]};e?l.grandparent=e:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=l.grandparent.getParent()));b&&CKEDITOR.dom.element.setMarker(b,h,"listarray_index",c.length);c.push(l);for(var m=0,n=h.getChildCount(),u;m<n;m++)u=h.getChild(m),u.type==CKEDITOR.NODE_ELEMENT&&k[u.getName()]?CKEDITOR.plugins.list.listToArray(u,b,c,
+d+1,l.grandparent):l.contents.push(u)}}return c},arrayToList:function(a,c,d,e,f){d||(d=0);if(!a||a.length<d+1)return null;for(var h,l=a[d].parent.getDocument(),m=new CKEDITOR.dom.documentFragment(l),n=null,u=d,r=Math.max(a[d].indent,0),D=null,G,F,I=e==CKEDITOR.ENTER_P?"p":"div";;){var H=a[u];h=H.grandparent;G=H.element.getDirection(1);if(H.indent==r){n&&a[u].parent.getName()==n.getName()||(n=a[u].parent.clone(!1,1),f&&n.setAttribute("dir",f),m.append(n));D=n.append(H.element.clone(0,1));G!=n.getDirection(1)&&
+D.setAttribute("dir",G);for(h=0;h<H.contents.length;h++)D.append(H.contents[h].clone(1,1));u++}else if(H.indent==Math.max(r,0)+1)H=a[u-1].element.getDirection(1),u=CKEDITOR.plugins.list.arrayToList(a,null,u,e,H!=G?G:null),!D.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=l.$.documentMode&&D.append(l.createText(" ")),D.append(u.listNode),u=u.nextIndex;else if(-1==H.indent&&!d&&h){k[h.getName()]?(D=H.element.clone(!1,!0),G!=h.getDirection(1)&&D.setAttribute("dir",G)):D=new CKEDITOR.dom.documentFragment(l);
+var n=h.getDirection(1)!=G,N=H.element,O=N.getAttribute("class"),E=N.getAttribute("style"),S=D.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e!=CKEDITOR.ENTER_BR||n||E||O),L,P=H.contents.length,J;for(h=0;h<P;h++)if(L=H.contents[h],b(L)&&1<P)S?J=L.clone(1,1):D.append(L.clone(1,1));else if(L.type==CKEDITOR.NODE_ELEMENT&&L.isBlockBoundary()){n&&!L.getDirection()&&L.setAttribute("dir",G);F=L;var T=N.getAttribute("style");T&&F.setAttribute("style",T.replace(/([^;])$/,"$1;")+(F.getAttribute("style")||""));O&&
+L.addClass(O);F=null;J&&(D.append(J),J=null);D.append(L.clone(1,1))}else S?(F||(F=l.createElement(I),D.append(F),n&&F.setAttribute("dir",G)),E&&F.setAttribute("style",E),O&&F.setAttribute("class",O),J&&(F.append(J),J=null),F.append(L.clone(1,1))):D.append(L.clone(1,1));J&&((F||D).append(J),J=null);D.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&u!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(G=D.getLast())&&G.type==CKEDITOR.NODE_ELEMENT&&G.is("br")&&G.remove(),(G=D.getLast(g))&&G.type==CKEDITOR.NODE_ELEMENT&&
+G.is(CKEDITOR.dtd.$block)||D.append(l.createElement("br")));G=D.$.nodeName.toLowerCase();"div"!=G&&"p"!=G||D.appendBogus();m.append(D);n=null;u++}else return null;F=null;if(a.length<=u||Math.max(a[u].indent,0)<r)break}if(c)for(a=m.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(c,a),a.getName()in CKEDITOR.dtd.$listItem&&(d=a,l=f=e=void 0,e=d.getDirection()))){for(f=d.getParent();f&&!(l=f.getDirection());)f=f.getParent();e==l&&d.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:m,
+nextIndex:u}}};var u=/^h[1-6]$/,r=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(b){this.refresh(b,b.elementPath());var c=b.config,d=b.getSelection(),e=d&&d.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var h=b.editable();if(h.getFirst(g)){var l=1==e.length&&e[0];(c=l&&l.getEnclosedNode())&&c.is&&this.type==c.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else c.enterMode==CKEDITOR.ENTER_BR?h.appendBogus():e[0].fixBlock(1,c.enterMode==CKEDITOR.ENTER_P?"p":"div"),
+d.selectRanges(e)}for(var c=d.createBookmarks(!0),h=[],m={},e=e.createIterator(),n=0;(l=e.getNextRange())&&++n;){var x=l.getBoundaryNodes(),r=x.startNode,B=x.endNode;r.type==CKEDITOR.NODE_ELEMENT&&"td"==r.getName()&&l.setStartAt(x.startNode,CKEDITOR.POSITION_AFTER_START);B.type==CKEDITOR.NODE_ELEMENT&&"td"==B.getName()&&l.setEndAt(x.endNode,CKEDITOR.POSITION_BEFORE_END);l=l.createIterator();for(l.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;x=l.getNextParagraph();)if(!x.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(m,
+x,"list_block",1);for(var D=b.elementPath(x),r=D.elements,B=0,D=D.blockLimit,G,F=r.length-1;0<=F&&(G=r[F]);F--)if(k[G.getName()]&&D.contains(G)){D.removeCustomData("list_group_object_"+n);(r=G.getCustomData("list_group_object"))?r.contents.push(x):(r={root:G,contents:[x]},h.push(r),CKEDITOR.dom.element.setMarker(m,G,"list_group_object",r));B=1;break}B||(B=D,B.getCustomData("list_group_object_"+n)?B.getCustomData("list_group_object_"+n).contents.push(x):(r={root:B,contents:[x]},CKEDITOR.dom.element.setMarker(m,
+B,"list_group_object_"+n,r),h.push(r)))}}for(G=[];0<h.length;)if(r=h.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(k[r.root.getName()]){e=b;n=r;r=m;l=G;B=CKEDITOR.plugins.list.listToArray(n.root,r);D=[];for(x=0;x<n.contents.length;x++)F=n.contents[x],(F=F.getAscendant("li",!0))&&!F.getCustomData("list_item_processed")&&(D.push(F),CKEDITOR.dom.element.setMarker(r,F,"list_item_processed",!0));for(var F=n.root.getDocument(),I=void 0,H=void 0,x=0;x<D.length;x++){var N=D[x].getCustomData("listarray_index"),
+I=B[N].parent;I.is(this.type)||(H=F.createElement(this.type),I.copyAttributes(H,{start:1,type:1}),H.removeStyle("list-style-type"),B[N].parent=H)}r=CKEDITOR.plugins.list.arrayToList(B,r,null,e.config.enterMode);B=void 0;D=r.listNode.getChildCount();for(x=0;x<D&&(B=r.listNode.getChild(x));x++)B.getName()==this.type&&l.push(B);r.listNode.replace(n.root);e.fire("contentDomInvalidated")}else{B=b;l=r;x=G;D=l.contents;e=l.root.getDocument();n=[];1==D.length&&D[0].equals(l.root)&&(r=e.createElement("div"),
+D[0].moveChildren&&D[0].moveChildren(r),D[0].append(r),D[0]=r);l=l.contents[0].getParent();for(F=0;F<D.length;F++)l=l.getCommonAncestor(D[F].getParent());I=B.config.useComputedState;B=r=void 0;I=void 0===I||I;for(F=0;F<D.length;F++)for(H=D[F];N=H.getParent();){if(N.equals(l)){n.push(H);!B&&H.getDirection()&&(B=1);H=H.getDirection(I);null!==r&&(r=r&&r!=H?null:H);break}H=N}if(!(1>n.length)){D=n[n.length-1].getNext();F=e.createElement(this.type);x.push(F);for(I=x=void 0;n.length;)x=n.shift(),I=e.createElement("li"),
+H=x,H.is("pre")||u.test(H.getName())||"false"==H.getAttribute("contenteditable")?x.appendTo(I):(x.copyAttributes(I),r&&x.getDirection()&&(I.removeStyle("direction"),I.removeAttribute("dir")),x.moveChildren(I),x.remove()),I.appendTo(F);r&&B&&F.setAttribute("dir",r);D?F.insertBefore(D):F.appendTo(l)}}else this.state==CKEDITOR.TRISTATE_ON&&k[r.root.getName()]&&a.call(this,b,r,m);for(F=0;F<G.length;F++)f(G[F]);CKEDITOR.dom.element.clearAllMarkers(m);d.selectBookmarks(c);b.focus()},refresh:function(a,
+b){var c=b.contains(k,1),d=b.blockLimit||b.root;c&&d.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){a.blockless||(a.addCommand("numberedlist",new e("numberedlist","ol")),a.addCommand("bulletedlist",new e("bulletedlist","ul")),a.ui.addButton&&(a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),
+a.ui.addButton("BulletedList",{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var c=b.data.domEvent.getKey(),d;if("wysiwyg"==a.mode&&c in{8:1,46:1}){var e=a.getSelection().getRanges()[0],f=e&&e.startPath();if(e&&e.collapsed){var q=8==c,u=a.editable(),r=new CKEDITOR.dom.walker(e.clone());r.evaluator=function(a){return g(a)&&!n(a)};r.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};c=e.clone();if(q){var C;
+(C=f.contains(k))&&e.checkBoundaryOfElement(C,CKEDITOR.START)&&(C=C.getParent())&&C.is("li")&&(C=l(C))?(d=C,C=C.getPrevious(g),c.moveToPosition(C&&n(C)?C:d,CKEDITOR.POSITION_BEFORE_START)):(r.range.setStartAt(u,CKEDITOR.POSITION_AFTER_START),r.range.setEnd(e.startContainer,e.startOffset),(C=r.previous())&&C.type==CKEDITOR.NODE_ELEMENT&&(C.getName()in k||C.is("li"))&&(C.is("li")||(r.range.selectNodeContents(C),r.reset(),r.evaluator=h,C=r.previous()),d=C,c.moveToElementEditEnd(d),c.moveToPosition(c.endPath().block,
+CKEDITOR.POSITION_BEFORE_END)));if(d)m(a,c,e),b.cancel();else{var B=f.contains(k);B&&e.checkBoundaryOfElement(B,CKEDITOR.START)&&(d=B.getFirst(g),e.checkBoundaryOfElement(d,CKEDITOR.START)&&(C=B.getPrevious(g),l(d)?C&&(e.moveToElementEditEnd(C),e.select()):a.execCommand("outdent"),b.cancel()))}}else if(d=f.contains("li")){if(r.range.setEndAt(u,CKEDITOR.POSITION_BEFORE_END),q=(u=d.getLast(g))&&h(u)?u:d,f=0,(C=r.next())&&C.type==CKEDITOR.NODE_ELEMENT&&C.getName()in k&&C.equals(u)?(f=1,C=r.next()):e.checkBoundaryOfElement(q,
+CKEDITOR.END)&&(f=2),f&&C){e=e.clone();e.moveToElementEditStart(C);if(1==f&&(c.optimize(),!c.startContainer.equals(d))){for(d=c.startContainer;d.is(CKEDITOR.dtd.$inline);)B=d,d=d.getParent();B&&c.moveToPosition(B,CKEDITOR.POSITION_AFTER_END)}2==f&&(c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END),e.endPath().block&&e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_AFTER_START));m(a,c,e);b.cancel()}}else r.range.setEndAt(u,CKEDITOR.POSITION_BEFORE_END),(C=r.next())&&C.type==CKEDITOR.NODE_ELEMENT&&
+C.is(k)&&(C=C.getFirst(g),f.block&&e.checkStartOfBlock()&&e.checkEndOfBlock()?(f.block.remove(),e.moveToElementEditStart(C),e.select()):l(C)?(e.moveToElementEditStart(C),e.select()):(e=e.clone(),e.moveToElementEditStart(C),m(a,c,e)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),"use strict",function(){function a(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(ca(a)||da(a)||u(a))}))}function e(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}
+function c(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=l(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function f(a,b,c){q(a,b);q(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function h(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!ca(b)||n(b)&&!u(b)&&!g(a,b)})}function m(a,b,c){return a>b&&a<c}function l(a,b){if(a.data("cke-editable"))return null;
+for(b||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function k(a){var b=a.doc,c=G('\x3cspan contenteditable\x3d"false" style\x3d"'+U+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),e=CKEDITOR.getUrl(this.path+"images/"+(F.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");B(c,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[B(G('\x3cspan title\x3d"'+
+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:U+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+e+") center no-repeat "+a.boxColor+";cursor:pointer;"+(F.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(F.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),B(G(ba,b),{base:R+
+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),B(G(ba,b),{base:R+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){q(a,this);var b=a.holdDistance,c=this.size;return c&&m(a.mouse.y,
+c.top-b,c.bottom+b)&&m(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,e=d.upper,f=d.lower,g=e||f,h=g.getParent(),k={};this.trigger=d;e&&q(a,e,!0);f&&q(a,f,!0);q(a,h,!0);a.inInlineMode&&y(a,!0);h.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x,k.right="");e&&f?
+k.top=e.size.margin.bottom===f.size.margin.top?0|e.size.bottom+e.size.margin.bottom/2:e.size.margin.bottom<f.size.margin.top?e.size.bottom+e.size.margin.bottom:e.size.bottom+e.size.margin.bottom-f.size.margin.top:e?f||(k.top=e.size.bottom+e.size.margin.bottom):k.top=f.size.top-f.size.margin.top;d.is(P)||m(k.top,b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(P)):d.is(J)||m(k.top,b.pane.bottom-5,b.pane.bottom+15)?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+
+b.editable.padding.bottom:b.pane.bottom-1,this.look(J)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(T));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new D("span",a.doc)});for(b=c.lineChildren.length;b--;)c.lineChildren[b].appendTo(c);
+c.look(T);c.appendTo(c.wrap);c.unselectable();c.lineChildren[0].on("mouseup",function(b){c.detach();d(a,function(b){var c=a.line.trigger;b[c.is(O)?"insertBefore":"insertAfter"](c.is(O)?c.lower:c.upper)},!0);a.editor.focus();F.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();b.data.preventDefault(!0)});c.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=c}function d(a,b,c){var d=new CKEDITOR.dom.range(a.doc),e=a.editor,f;F.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(V):
+(f=(f=l(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new D(N[f],a.doc),f.is("br")||a.doc.createText(V).appendTo(f));c&&e.fire("saveSnapshot");b(f);d.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([d]);a.hotNode=f;c&&e.fire("saveSnapshot")}function b(a,b){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(c){var f=F.ie&&9>F.version?" ":V,g=a.hotNode&&a.hotNode.getText()==f&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!b;d(a,function(d){g&&
+a.hotNode&&a.hotNode.remove();d[b?"insertAfter":"insertBefore"](c);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!b});a.lastCmdDirection=!!b});F.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();a.line.detach()}return function(d){d=d.getSelection().getStartElement();var f;d=d.getAscendant(K,1);if(!p(a,d)&&d&&!d.equals(a.editable)&&!d.contains(a.editable)){(f=l(d))&&"false"==f.getAttribute("contenteditable")&&(d=f);a.element=d;f=h(a,d,!b);var g;n(f)&&f.is(a.triggers)&&
+f.is(M)&&(!h(a,f,!b)||(g=h(a,f,!b))&&n(g)&&g.is(a.triggers))?e(f):(g=c(a,d),n(g)&&(h(a,g,!b)?(d=h(a,g,!b))&&n(d)&&d.is(a.triggers)&&e(g):e(g)))}}}()}}function g(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function u(a){if(!n(a))return!1;var b;(b=r(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function r(a){return!!{absolute:1,
+fixed:1}[a.getComputedStyle("position")]}function w(a,b){return n(b)?b.is(a.triggers):null}function p(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var e=a.tabuList.length;e--;)if(c[d].hasAttribute(a.tabuList[e]))return!0;return!1}function t(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(X)});if(!b)return!1;q(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function v(a){var b=a.editable,c=a.mouse,d=a.view,f=a.triggerOffset;y(a);var h=c.y>
+(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[h?"getLast":"getFirst"](function(a){return!(ca(a)||da(a))});if(!b)return null;g(a,b)&&(b=a.line.wrap[h?"getPrevious":"getNext"](function(a){return!(ca(a)||da(a))}));if(!n(b)||u(b)||!w(a,b))return null;q(a,b);return!h&&0<=b.size.top&&m(c.y,0,b.size.top+f)?(a=a.inInlineMode||0===d.scroll.y?P:T,new e([null,b,O,L,a])):h&&b.size.bottom<=d.pane.height&&m(c.y,b.size.bottom-f,d.pane.height)?(a=a.inInlineMode||
+m(b.size.bottom,d.pane.height-f,d.pane.height)?J:T,new e([b,null,E,L,a])):null}function z(a){var b=a.mouse,d=a.view,f=a.triggerOffset,g=c(a);if(!g)return null;q(a,g);var f=Math.min(f,0|g.size.outerHeight/2),k=[],l,p;if(m(b.y,g.size.top-1,g.size.top+f))p=!1;else if(m(b.y,g.size.bottom-f,g.size.bottom+1))p=!0;else return null;if(u(g)||t(a,g,p)||g.getParent().is(W))return null;var v=h(a,g,!p);if(v){if(v&&v.type==CKEDITOR.NODE_TEXT)return null;if(n(v)){if(u(v)||!w(a,v)||v.getParent().is(W))return null;
+k=[v,g][p?"reverse":"concat"]().concat([S,L])}}else g.equals(a.editable[p?"getLast":"getFirst"](a.isRelevant))?(y(a),p&&m(b.y,g.size.bottom-f,d.pane.height)&&m(g.size.bottom,d.pane.height-f,d.pane.height)?l=J:m(b.y,0,g.size.top+f)&&(l=P)):l=T,k=[null,g][p?"reverse":"concat"]().concat([p?E:O,L,l,g.equals(a.editable[p?"getLast":"getFirst"](a.isRelevant))?p?J:P:T]);return 0 in k?new e(k):null}function A(a,b,c,d){for(var e=b.getDocumentPosition(),f={},g={},h={},k={},l=ea.length;l--;)f[ea[l]]=parseInt(b.getComputedStyle.call(b,
+"border-"+ea[l]+"-width"),10)||0,h[ea[l]]=parseInt(b.getComputedStyle.call(b,"padding-"+ea[l]),10)||0,g[ea[l]]=parseInt(b.getComputedStyle.call(b,"margin-"+ea[l]),10)||0;c&&!d||x(a,d);k.top=e.y-(c?0:a.view.scroll.y);k.left=e.x-(c?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+f.top+f.bottom);k.width=k.outerWidth-(h.left+h.right+f.left+f.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,
+left:b.$.scrollLeft});return B({border:f,padding:h,margin:g,ignoreScroll:c},k,!0)}function q(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-Q)return null;return B(b.size,A(a,b,c),{date:+new Date},!0)}function y(a,b){a.view.editable=A(a,a.editable,b,!0)}function x(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-Q)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();B(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-
+d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function C(a,b,c,d){for(var f=d,g=d,h=0,k=!1,l=!1,m=a.view.pane.height,p=a.mouse;p.y+h<m&&0<p.y-h;){k||(k=b(f,d));l||(l=b(g,d));!k&&0<p.y-h&&(f=c(a,{x:p.x,y:p.y-h}));!l&&p.y+h<m&&(g=c(a,{x:p.x,y:p.y+h}));if(k&&l)break;h+=2}return new e([f,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var f=a.config,l=f.magicline_triggerOffset||30,m={editor:a,
+enterMode:f.enterMode,triggerOffset:l,holdDistance:0|l*(f.magicline_holdDistance||.5),boxColor:f.magicline_color||"#ff0000",rtl:"rtl"==f.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(f.magicline_tabuList||[]),triggers:f.magicline_everywhere?K:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},q,t,w;m.isRelevant=function(a){return n(a)&&!g(m,a)&&!u(a)};a.on("contentDom",function(){var l=a.editable(),n=a.document,u=a.window;B(m,{editable:l,inInlineMode:l.isInline(),doc:n,win:u,
+hotNode:null},!0);m.boundary=m.inInlineMode?m.editable:m.doc.getDocumentElement();l.is(H.$inline)||(m.inInlineMode&&!r(l)&&l.setStyles({position:"relative",top:null,left:null}),k.call(this,m),x(m),l.attachListener(a,"beforeUndoImage",function(){m.line.detach()}),l.attachListener(a,"beforeGetData",function(){m.line.wrap.getParent()&&(m.line.detach(),a.once("getData",function(){m.line.attach()},null,null,1E3))},null,null,0),l.attachListener(m.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(b){if("wysiwyg"==
+a.mode)if(m.inInlineMode){var c=b.data.$.clientX;b=b.data.$.clientY;x(m);y(m,!0);var d=m.view.editable,e=m.view.scroll;c>d.left-e.x&&c<d.right-e.x&&b>d.top-e.y&&b<d.bottom-e.y||(clearTimeout(w),w=null,m.line.detach())}else clearTimeout(w),w=null,m.line.detach()}),l.attachListener(l,"keyup",function(){m.hiddenMode=0}),l.attachListener(l,"keydown",function(b){if("wysiwyg"==a.mode)switch(b.data.getKeystroke()){case 2228240:case 16:m.hiddenMode=1,m.line.detach()}}),l.attachListener(m.inInlineMode?l:n,
+"mousemove",function(b){t=!0;if("wysiwyg"==a.mode&&!a.readOnly&&!w){var c={x:b.data.$.clientX,y:b.data.$.clientY};w=setTimeout(function(){m.mouse=c;w=m.trigger=null;x(m);t&&!m.hiddenMode&&a.focusManager.hasFocus&&!m.line.mouseNear()&&(m.element=Y(m,!0))&&((m.trigger=v(m)||z(m)||aa(m))&&!p(m,m.trigger.upper||m.trigger.lower)?m.line.attach().place():(m.trigger=null,m.line.detach()),t=!1)},30)}}),l.attachListener(u,"scroll",function(){"wysiwyg"==a.mode&&(m.line.detach(),F.webkit&&(m.hiddenMode=1,clearTimeout(q),
+q=setTimeout(function(){m.mouseDown||(m.hiddenMode=0)},50)))}),l.attachListener(I?n:u,"mousedown",function(){"wysiwyg"==a.mode&&(m.line.detach(),m.hiddenMode=1,m.mouseDown=1)}),l.attachListener(I?n:u,"mouseup",function(){m.hiddenMode=0;m.mouseDown=0}),a.addCommand("accessPreviousSpace",b(m)),a.addCommand("accessNextSpace",b(m,!0)),a.setKeystroke([[f.magicline_keystrokePrevious,"accessPreviousSpace"],[f.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var b,c,d,e;for(e in{p:1,
+br:1,div:1})for(b=a.document.getElementsByTag(e),d=b.count();d--;)if((c=b.getItem(d)).data("cke-magicline-hot")){m.hotNode=c;m.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),this.backdoor={accessFocusSpace:d,boxTrigger:e,isLine:g,getAscendantTrigger:c,getNonEmptyNeighbour:h,getSize:A,that:m,triggerEdge:z,triggerEditable:v,triggerExpand:aa})},this)}});var B=CKEDITOR.tools.extend,D=CKEDITOR.dom.element,G=D.createFromHtml,F=CKEDITOR.env,I=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
+H=CKEDITOR.dtd,N={},O=128,E=64,S=32,L=16,P=4,J=2,T=1,V=" ",W=H.$listItem,X=H.$tableContent,M=B({},H.$nonEditable,H.$empty),K=H.$block,Q=100,U="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",R=U+"border-color:transparent;display:block;border-style:solid;",ba="\x3cspan\x3e"+V+"\x3c/span\x3e";N[CKEDITOR.ENTER_BR]="br";N[CKEDITOR.ENTER_P]="p";N[CKEDITOR.ENTER_DIV]="div";e.prototype={set:function(a,b,c){this.properties=
+a+b+(c||T);return this},is:function(a){return(this.properties&a)==a}};var Y=function(){function a(b,c){var d=b.$.elementFromPoint(c.x,c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,d){if(!b.mouse)return null;var e=b.doc,f=b.line.wrap;d=d||b.mouse;var h=a(e,d);c&&g(b,h)&&(f.hide(),h=a(e,d),f.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||F.ie&&9>F.version&&!b.boundary.equals(h)&&!b.boundary.contains(h)?null:h}}(),ca=CKEDITOR.dom.walker.whitespaces(),da=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),
+aa=function(){function b(d){var e=d.element,g,h,k;if(!n(e)||e.contains(d.editable)||e.isReadOnly())return null;k=C(d,function(a,b){return!b.equals(a)},function(a,b){return Y(a,!0,b)},e);g=k.upper;h=k.lower;if(a(d,g,h))return k.set(S,8);if(g&&e.contains(g))for(;!g.getParent().equals(e);)g=g.getParent();else g=e.getFirst(function(a){return c(d,a)});if(h&&e.contains(h))for(;!h.getParent().equals(e);)h=h.getParent();else h=e.getLast(function(a){return c(d,a)});if(!g||!h)return null;q(d,g);q(d,h);if(!m(d.mouse.y,
+g.size.top,h.size.bottom))return null;for(var e=Number.MAX_VALUE,l,p,v,t;h&&!h.equals(g)&&(p=g.getNext(d.isRelevant));)l=Math.abs(f(d,g,p)-d.mouse.y),l<e&&(e=l,v=g,t=p),g=p,q(d,g);if(!v||!t||!m(d.mouse.y,v.size.top,t.size.bottom))return null;k.upper=v;k.lower=t;return k.set(S,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||da(b)||u(b)||g(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=b(c),e;if(e=d){e=d.upper;var f=d.lower;e=!e||!f||u(f)||u(e)||f.equals(e)||
+e.equals(f)||f.contains(e)||e.contains(f)?!1:w(c,e)&&w(c,f)&&a(c,e,f)?!0:!1}return e?d:null}}(),ea=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function a(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var c=[],e=["style","className"],d=0;d<e.length;d++){var b=a.$.elements.namedItem(e[d]);b&&(b=new CKEDITOR.dom.element(b),c.push([b,
+b.nextSibling]),b.remove())}return c}function e(a,c){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<c.length)for(var e=c.length-1;0<=e;e--){var d=c[e][0],b=c[e][1];b?d.insertBefore(b):d.appendTo(a)}}function c(c,f){var h=a(c),d={},b=c.$;f||(d["class"]=b.className||"",b.className="");d.inline=b.style.cssText||"";f||(b.style.cssText="position: static; overflow: visible");e(h);return d}function f(c,f){var h=a(c),d=c.$;"class"in f&&(d.className=f["class"]);"inline"in f&&(d.style.cssText=
+f.inline);e(h)}function h(a){if(!a.editable().isInline()){var c=CKEDITOR.instances,e;for(e in c){var d=c[e];"wysiwyg"!=d.mode||d.readOnly||(d=d.document.getBody(),d.setAttribute("contentEditable",!1),d.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var c=b.getViewPaneSize();a.resize(c.width,c.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var k=a.lang,d=CKEDITOR.document,b=d.getWindow(),
+g,n,u,r=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var w=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),p=a.ui.space("contents");if("wysiwyg"==a.mode){var t=a.getSelection();g=t&&t.getRanges();n=b.getScrollPosition()}else{var v=a.editable().$;g=!CKEDITOR.env.ie&&[v.selectionStart,v.selectionEnd];n=[v.scrollLeft,v.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){b.on("resize",
+e);u=b.getScrollPosition();for(t=a.container;t=t.getParent();)t.setCustomData("maximize_saved_styles",c(t)),t.setStyle("z-index",a.config.baseFloatZIndex-5);p.setCustomData("maximize_saved_styles",c(p,!0));w.setCustomData("maximize_saved_styles",c(w,!0));p={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};d.getDocumentElement().setStyles(p);!CKEDITOR.env.gecko&&d.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||d.getBody().setStyles(p);CKEDITOR.env.ie?
+setTimeout(function(){b.$.scrollTo(0,0)},0):b.$.scrollTo(0,0);w.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");w.$.offsetLeft;w.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});w.addClass("cke_maximized");e();p=w.getDocumentPosition();w.setStyles({left:-1*p.x+"px",top:-1*p.y+"px"});CKEDITOR.env.gecko&&h(a)}else if(this.state==CKEDITOR.TRISTATE_ON){b.removeListener("resize",e);for(var t=[p,w],z=0;z<t.length;z++)f(t[z],t[z].getCustomData("maximize_saved_styles")),
+t[z].removeCustomData("maximize_saved_styles");for(t=a.container;t=t.getParent();)f(t,t.getCustomData("maximize_saved_styles")),t.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){b.$.scrollTo(u.x,u.y)},0):b.$.scrollTo(u.x,u.y);w.removeClass("cke_maximized");CKEDITOR.env.webkit&&(w.setStyle("display","inline"),setTimeout(function(){w.setStyle("display","block")},0));a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:p.$.offsetHeight,outerWidth:a.container.$.offsetWidth})}this.toggleState();
+if(t=this.uiItems[0])p=this.state==CKEDITOR.TRISTATE_OFF?k.maximize.maximize:k.maximize.minimize,t=CKEDITOR.document.getById(t._.id),t.getChild(1).setHtml(p),t.setAttribute("title",p),t.setAttribute("href",'javascript:void("'+p+'");');"wysiwyg"==a.mode?g?(CKEDITOR.env.gecko&&h(a),a.getSelection().selectRanges(g),(v=a.getSelection().getStartElement())&&v.scrollIntoView(!0)):b.$.scrollTo(n.x,n.y):(g&&(v.selectionStart=g[0],v.selectionEnd=g[1]),v.scrollLeft=n[0],v.scrollTop=n[1]);g=n=null;r=this.state;
+a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:k.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:r)},null,null,100)}}})}(),function(){function a(a,c,f){var h=CKEDITOR.cleanWord;h?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||c+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!h}CKEDITOR.plugins.add("pastefromword",
+{requires:"clipboard",init:function(e){var c=0,f=this.path;e.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a,e){c=1;a.execCommand("paste",{type:"html",notification:e&&"undefined"!==typeof e.notification?e.notification:!0})}});e.ui.addButton&&e.ui.addButton("PasteFromWord",{label:e.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});e.on("paste",function(h){var m=h.data,l=(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?m.dataTransfer.getData("text/html",
+!0):null)||m.dataValue,k={dataValue:l},d=/(class=\"?Mso|style=(?:\"|\')[^\"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,d=/<meta\s*name=(?:\"|\')?generator(?:\"|\')?\s*content=(?:\"|\')?microsoft/gi.test(l)||d.test(l);if(l&&(c||d)&&(!1!==e.fire("pasteFromWord",k)||c)){m.dontFilter=!0;var b=a(e,f,function(){if(b)e.fire("paste",m);else if(!e.config.pasteFromWordPromptCleanup||c||confirm(e.lang.pastefromword.confirmCleanup))k.dataValue=CKEDITOR.cleanWord(k.dataValue,e),e.fire("afterPasteFromWord",k),
+m.dataValue=k.dataValue;c=0});b&&h.cancel()}},null,null,3)}})}(),function(){var a={canUndo:!1,async:!0,exec:function(a,c){var f=a.lang,h=CKEDITOR.tools.keystrokeToString(f.common.keyboard,a.getCommandKeystroke(CKEDITOR.env.ie?a.commands.paste:this)),m=c&&"undefined"!==typeof c.notification?c.notification:!c||!c.from||"keystrokeHandler"===c.from&&CKEDITOR.env.ie,f=m&&"string"===typeof m?m:f.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e");
+a.execCommand("paste",{type:"text",notification:m?f:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(e){var c=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+86;e.addCommand("pastetext",a);e.setKeystroke(c,"pastetext");e.ui.addButton&&e.ui.addButton("PasteText",{label:e.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(e.config.forcePasteAsPlainText)e.on("beforePaste",function(a){"html"!=a.data.type&&(a.data.type=
+"text")});e.on("pasteState",function(a){e.getCommand("pastetext").setState(a.data)})}})}(),CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var e=a._.removeFormatRegex||(a._.removeFormatRegex=new RegExp("^(?:"+
+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),c=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,h=a.getSelection().getRanges(),m=h.createIterator(),l=function(a){return a.type==CKEDITOR.NODE_ELEMENT},k;k=m.getNextRange();){k.collapsed||k.enlarge(CKEDITOR.ENLARGE_ELEMENT);var d=k.createBookmark(),b=d.startNode,g=d.endNode,n=function(b){for(var c=a.elementPath(b),d=c.elements,g=1,h;(h=d[g])&&!h.equals(c.block)&&
+!h.equals(c.blockLimit);g++)e.test(h.getName())&&f(a,h)&&b.breakParent(h)};n(b);if(g)for(n(g),b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(g);)if(b.isReadOnly()){if(b.getPosition(g)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(l)}else n=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==b.getName()&&b.data("cke-realelement")||!f(a,b)||(e.test(b.getName())?b.remove(1):(b.removeAttributes(c),a.fire("removeFormatCleanup",b))),b=n;k.moveToBookmark(d)}a.forceNextSelectionCheck();a.getSelection().selectRanges(h)}}},
+filter:function(a,e){for(var c=a._.removeFormatFilters||[],f=0;f<c.length;f++)if(!1===c[f](e))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",function(){function a(a,
+f,h){var m,l;if(h="string"==typeof h?CKEDITOR.document.getById(h):new CKEDITOR.dom.element(h))if(m=a.fire("uiSpace",{space:f,html:""}).html)a.on("uiSpace",function(a){a.data.space==f&&a.cancel()},null,null,1),l=h.append(CKEDITOR.dom.element.createFromHtml(e.output({id:a.id,name:a.name,langDir:a.lang.dir,langCode:a.langCode,space:f,spaceId:a.ui.spaceId(f),content:m}))),h.getCustomData("cke_hasshared")?l.hide():h.setCustomData("cke_hasshared",1),l.unselectable(),l.on("mousedown",function(a){a=a.data;
+a.getTarget().hasAscendant("a",1)||a.preventDefault()}),a.focusManager.add(l,1),a.on("focus",function(){for(var a=0,c,b=h.getChildren();c=b.getItem(a);a++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(l)&&c.hasClass("cke_shared")&&c.hide();l.show()}),a.on("destroy",function(){l.remove()})}var e=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+
+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');CKEDITOR.plugins.add("sharedspace",{init:function(c){c.on("loaded",function(){var e=c.config.sharedSpaces;if(e)for(var h in e)a(c,h,e[h])},null,null,9)}})}(),function(){var a={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},
+refresh:function(a){if(a.document){var c=this.state!=CKEDITOR.TRISTATE_ON||a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!a.focusManager.hasFocus?"removeClass":"attachClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),c,f,h,m,l=CKEDITOR.getUrl(this.path),k=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),d=k?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",b,g;for(c=f=h=m="";b=
+a.pop();)g=a.length?",":"",c+=".cke_show_blocks "+b+d+g,h+=".cke_show_blocks.cke_contents_ltr "+b+d+g,m+=".cke_show_blocks.cke_contents_rtl "+b+d+g,f+=".cke_show_blocks "+b+d+"{background-image:url("+CKEDITOR.getUrl(l+"images/block_"+b+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(f,h+"{background-position:top left;padding-left:8px}",m+"{background-position:top right;padding-right:8px}"));k||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},
 init:function(e){function c(){f.refresh(e)}if(!e.blockless){var f=e.addCommand("showblocks",a);f.canUndo=!1;e.config.startupOutlineBlocks&&f.setState(CKEDITOR.TRISTATE_ON);e.ui.addButton&&e.ui.addButton("ShowBlocks",{label:e.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});e.on("mode",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&&f.refresh(e)});e.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e.on("focus",c),e.on("blur",c));e.on("contentDom",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&&
 f.refresh(e)})}}})}(),function(){var a={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[c]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g,
 "cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(e){var c=e.addCommand("showborders",a);c.canUndo=!1;!1!==e.config.startupShowBorders&&c.setState(CKEDITOR.TRISTATE_ON);e.on("mode",function(){c.state!=CKEDITOR.TRISTATE_DISABLED&&c.refresh(e)},null,null,100);e.on("contentDom",function(){c.state!=CKEDITOR.TRISTATE_DISABLED&&c.refresh(e)});e.on("removeFormatCleanup",function(a){a=a.data;e.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&a.is("table")&&(!a.hasAttribute("border")||
@@ -1021,7 +1020,7 @@ requires:"dialog",init:function(a){var e=this;CKEDITOR.dialog.add("specialchar",
 function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(a){var e=a.config,c=a.lang.stylescombo,f={},h=[],m=[];a.on("stylesSet",function(c){if(c=c.data.styles){for(var k,d,b,g=0,n=c.length;g<n;g++)(k=c[g],a.blockless&&k.element in CKEDITOR.dtd.$block||"string"==typeof k.type&&!CKEDITOR.style.customHandlers[k.type]||(d=k.name,k=new CKEDITOR.style(k),a.filter.customConfig&&!a.filter.check(k)))||(k._name=d,k._.enterMode=e.enterMode,k._.type=b=k.assignedTo||k.type,k._.weight=
 g+1E3*(b==CKEDITOR.STYLE_OBJECT?1:b==CKEDITOR.STYLE_BLOCK?2:3),f[d]=k,h.push(k),m.push(k));h.sort(function(a,b){return a._.weight-b._.weight})}});a.ui.addRichCombo("Styles",{label:c.label,title:c.panelTitle,toolbar:"styles,10",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(e.contentsCss),multiSelect:!0,attributes:{"aria-label":c.panelTitle}},init:function(){var a,e,d,b,f,m;f=0;for(m=h.length;f<m;f++)a=h[f],e=a._name,b=a._.type,b!=d&&(this.startGroup(c["panelTitle"+String(b)]),
 d=b),this.add(e,a.type==CKEDITOR.STYLE_OBJECT?e:a.buildPreview(),e);this.commit()},onClick:function(c){a.focus();a.fire("saveSnapshot");c=f[c];var e=a.elementPath();if(c.group&&c.removeStylesFromSameGroup(a))a.applyStyle(c);else a[c.checkActive(e,a)?"removeStyle":"applyStyle"](c);a.fire("saveSnapshot")},onRender:function(){a.on("selectionChange",function(c){var e=this.getValue();c=c.data.path.elements;for(var d=0,b=c.length,g;d<b;d++){g=c[d];for(var h in f)if(f[h].checkElementRemovable(g,!0,a)){h!=
-e&&this.setValue(h);return}}this.setValue("")},this)},onOpen:function(){var e=a.getSelection().getSelectedElement()||a.editable(),e=a.elementPath(e),h=[0,0,0,0];this.showAll();this.unmarkAll();for(var d in f){var b=f[d],g=b._.type;b.checkApplicable(e,a,a.activeFilter)?h[g]++:this.hideItem(d);b.checkActive(e,a)&&this.mark(d)}h[CKEDITOR.STYLE_BLOCK]||this.hideGroup(c["panelTitle"+String(CKEDITOR.STYLE_BLOCK)]);h[CKEDITOR.STYLE_INLINE]||this.hideGroup(c["panelTitle"+String(CKEDITOR.STYLE_INLINE)]);h[CKEDITOR.STYLE_OBJECT]||
+e&&this.setValue(h);return}}this.setValue("")},this)},onOpen:function(){var e=a.getSelection().getSelectedElement(),e=a.elementPath(e),h=[0,0,0,0];this.showAll();this.unmarkAll();for(var d in f){var b=f[d],g=b._.type;b.checkApplicable(e,a,a.activeFilter)?h[g]++:this.hideItem(d);b.checkActive(e,a)&&this.mark(d)}h[CKEDITOR.STYLE_BLOCK]||this.hideGroup(c["panelTitle"+String(CKEDITOR.STYLE_BLOCK)]);h[CKEDITOR.STYLE_INLINE]||this.hideGroup(c["panelTitle"+String(CKEDITOR.STYLE_INLINE)]);h[CKEDITOR.STYLE_OBJECT]||
 this.hideGroup(c["panelTitle"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var c=a.elementPath();if(c){for(var e in f)if(f[e].checkApplicable(c,a,a.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};h=[]}})}})}(),function(){function a(a){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(c){if(c.editable().hasFocus){var e=c.getSelection(),f;if(f=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=c.createRange(),
 d=CKEDITOR.tools.tryThese(function(){var b=f.getParent().$.cells[f.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b=f.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(d||a)if(d)d=new CKEDITOR.dom.element(d),e.moveToElementEditStart(d),e.checkStartOfBlock()&&e.checkEndOfBlock()||e.selectNodeContents(d);else return!0;else{for(var b=f.getAscendant("table").$,d=f.getParent().$.cells,b=new CKEDITOR.dom.element(b.insertRow(-1),
 c.document),g=0,n=d.length;g<n;g++)b.append((new CKEDITOR.dom.element(d[g],c.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(b)}e.select(!0);return!0}}return!1}}}var e={editorFocus:!1,modes:{wysiwyg:1,source:1}},c={exec:function(a){a.container.focusNext(!0,a.tabIndex)}},f={exec:function(a){a.container.focusPrevious(!0,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(h){for(var m=!1!==h.config.enableTabKeyTools,l=h.config.tabSpaces||0,k="";l--;)k+=" ";if(k)h.on("key",function(a){9==
@@ -1031,45 +1030,45 @@ c)for(k=this.getNextSourceNode(a,CKEDITOR.NODE_ELEMENT);k;){if(k.isVisible()&&0=
 k>l)&&(m=d,l=k)}}m&&m.focus()},CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,c){this.setState(c.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+
 (a.plugins.dialogadvtab?"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(a){a.styles&&(a.styles.border&&a.styles.border.match(/solid/)&&(a.attributes.border=1),"collapse"==a.styles["border-collapse"]&&(a.attributes.cellspacing=0))}}]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",
 e({exec:function(a){var c=a.elementPath().contains("table",1);if(c){var e=c.getParent(),l=a.editable();1!=e.getChildCount()||e.is("td","th")||e.equals(l)||(c=e);a=a.createRange();a.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:c.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:c.menu,
-command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}),function(){function a(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){0<e.length||a.type!=CKEDITOR.NODE_ELEMENT||
-!u.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(f,a,"selected_cell",!0),e.push(a))}var e=[],f={};if(!a)return e;for(var g=a.getRanges(),h=0;h<g.length;h++){var k=g[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&e.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(f,
-l,"selected_cell",!0),e.push(l))}}CKEDITOR.dom.element.clearAllMarkers(f);return e}function e(b,c){for(var d=w(b)?b:a(b),e=d[0],f=e.getAscendant("table"),e=e.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(f.$.rows[k]),h=c?h:k,g=c?g:d,d=CKEDITOR.tools.buildTableMap(f),f=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,e=e.createElement("tr"),k=0;f[k]&&k<d;k++){var l;1<f[k].rowSpan&&h&&f[k]==h[k]?(l=f[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(f[k])).clone(),
-l.removeAttribute("rowSpan"),l.appendBogus(),e.append(l),l=l.$);k+=l.colSpan-1}c?e.insertBefore(g):e.insertAfter(g);return e}function c(b){if(b instanceof CKEDITOR.dom.selection){var d=b.getRanges(),e=a(b),f=e[0].getAscendant("table"),g=CKEDITOR.tools.buildTableMap(f),h=e[0].getParent().$.rowIndex,e=e[e.length-1],k=e.getParent().$.rowIndex+e.$.rowSpan-1,e=[];b.reset();for(b=h;b<=k;b++){for(var l=g[b],m=new CKEDITOR.dom.element(f.$.rows[b]),n=0;n<l.length;n++){var t=new CKEDITOR.dom.element(l[n]),
-u=t.getParent().$.rowIndex;1==t.$.rowSpan?t.remove():(--t.$.rowSpan,u==b&&(u=g[b+1],u[n-1]?t.insertAfter(new CKEDITOR.dom.element(u[n-1])):(new CKEDITOR.dom.element(f.$.rows[b+1])).append(t,1)));n+=t.$.colSpan-1}e.push(m)}g=f.$.rows;d[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(g[k+1]||(0<h?g[h-1]:null)||f.$.parentNode);for(b=e.length;0<=b;b--)c(e[b]);return f.$.parentNode?h:(d[0].select(),null)}b instanceof CKEDITOR.dom.element&&(f=b.getAscendant("table"),1==f.$.rows.length?
-f.remove():b.remove());return null}function f(a,b){for(var c=a.getParent().$.cells,d=0,e=0;e<c.length;e++){var f=c[e],d=d+(b?1:f.colSpan);if(f==a.$)break}return d-1}function h(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var e=f(a[d],b);if(b?e<c:e>c)c=e}return c}function m(b,c){for(var d=w(b)?b:a(b),e=d[0].getAscendant("table"),f=h(d,1),d=h(d),g=c?f:d,k=CKEDITOR.tools.buildTableMap(e),e=[],f=[],d=[],l=k.length,m=0;m<l;m++)e.push(k[m][g]),f.push(c?k[m][g-1]:k[m][g+1]);for(m=0;m<l;m++)e[m]&&(1<e[m].colSpan&&
-f[m]==e[m]?(k=e[m],k.colSpan+=1):(g=new CKEDITOR.dom.element(e[m]),k=g.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[c?"insertBefore":"insertAfter"].call(k,g),d.push(k),k=k.$),m+=k.rowSpan-1);return d}function l(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function k(b){if(b instanceof CKEDITOR.dom.selection){var c=b.getRanges(),e=a(b),f=e[0]&&e[0].getAscendant("table"),g;a:{var h=0;g=e.length-1;for(var l=
-{},m,n;m=e[h++];)CKEDITOR.dom.element.setMarker(l,m,"delete_cell",!0);for(h=0;m=e[h++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);g=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);h=e[0].getParent();(h=h.getPrevious())?g=h.getLast():(h=e[g].getParent(),g=(h=h.getNext())?h.getChild(0):null)}b.reset();for(b=e.length-1;0<=b;b--)k(e[b]);g?d(g,!0):f&&(c[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),
-c[0].select(),f.remove())}else b instanceof CKEDITOR.dom.element&&(c=b.getParent(),1==c.getChildCount()?c.remove():b.remove())}function d(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function b(a,b,c){a=a[b];if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==
-c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function g(c,d,e){var f=a(c),g;if((d?1!=f.length:2>f.length)||(g=c.getCommonAncestor())&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("table"))return!1;var h;c=f[0];g=c.getAscendant("table");var k=CKEDITOR.tools.buildTableMap(g),l=k.length,m=k[0].length,n=c.getParent().$.rowIndex,t=b(k,n,c);if(d){var u;try{var w=parseInt(c.getAttribute("rowspan"),10)||1;h=parseInt(c.getAttribute("colspan"),10)||1;u=k["up"==d?n-w:"down"==d?n+w:n]["left"==d?t-h:"right"==
-d?t+h:t]}catch(I){return!1}if(!u||c.$==u)return!1;f["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(u))}d=c.getDocument();var H=n,w=u=0,N=!e&&new CKEDITOR.dom.documentFragment(d),O=0;for(d=0;d<f.length;d++){h=f[d];var E=h.getParent(),S=h.getFirst(),L=h.$.colSpan,P=h.$.rowSpan,E=E.$.rowIndex,J=b(k,E,h),O=O+L*P,w=Math.max(w,J-t+L);u=Math.max(u,E-n+P);e||(L=h,(P=L.getBogus())&&P.remove(),L.trim(),h.getChildren().count()&&(E==H||!S||S.isBlockBoundary&&S.isBlockBoundary({br:1})||(H=N.getLast(CKEDITOR.dom.walker.whitespaces(!0)),
-!H||H.is&&H.is("br")||N.append("br")),h.moveChildren(N)),d?h.remove():h.setHtml(""));H=E}if(e)return u*w==O;N.moveChildren(c);c.appendBogus();w>=m?c.removeAttribute("rowSpan"):c.$.rowSpan=u;u>=l?c.removeAttribute("colSpan"):c.$.colSpan=w;e=new CKEDITOR.dom.nodeList(g.$.rows);f=e.count();for(d=f-1;0<=d;d--)g=e.getItem(d),g.$.cells.length||(g.remove(),f++);return c}function n(c,d){var e=a(c);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(g),
-k=f.$.rowIndex,l=b(h,k,e),m=e.$.rowSpan,n;if(1<m){n=Math.ceil(m/2);for(var m=Math.floor(m/2),f=k+n,g=new CKEDITOR.dom.element(g.$.rows[f]),h=b(h,f),t,f=e.clone(),k=0;k<h.length;k++)if(t=h[k],t.parentNode==g.$&&k>l){f.insertBefore(new CKEDITOR.dom.element(t));break}else t=null;t||g.append(f)}else for(m=n=1,g=f.clone(),g.insertAfter(f),g.append(f=e.clone()),t=b(h,k),l=0;l<t.length;l++)t[l].rowSpan++;f.appendBogus();e.$.rowSpan=n;f.$.rowSpan=m;1==n&&e.removeAttribute("rowSpan");1==m&&f.removeAttribute("rowSpan");
-return f}function t(c,d){var e=a(c);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(g),h=b(g,f.$.rowIndex,e),k=e.$.colSpan;if(1<k)f=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=f=1,l=[],m=0;m<g.length;m++){var n=g[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(g=0;g<l.length;g++)l[g].colSpan++}g=e.clone();g.insertAfter(e);g.appendBogus();e.$.colSpan=f;g.$.colSpan=k;1==f&&e.removeAttribute("colSpan");1==k&&g.removeAttribute("colSpan");
-return g}var u=/^(?:td|th)$/,w=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(b){function f(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function h(a,c){var d=b.addCommand(a,c);b.addFeature(d)}var u=b.lang.table,w=CKEDITOR.tools.style.parse;h("cellProperties",new CKEDITOR.dialogCommand("cellProperties",f({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",
+command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}),function(){function a(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){0<f.length||a.type!=CKEDITOR.NODE_ELEMENT||
+!r.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(g,a,"selected_cell",!0),f.push(a))}if(a){for(var e=a.getRanges(),f=[],g={},h=0;h<e.length;h++){var k=e[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&f.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(g,
+l,"selected_cell",!0),f.push(l))}}CKEDITOR.dom.element.clearAllMarkers(g);return f}}function e(b,c){for(var d=w(b)?b:a(b),e=d[0],f=e.getAscendant("table"),e=e.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(f.$.rows[k]),h=c?h:k,g=c?g:d,d=CKEDITOR.tools.buildTableMap(f),f=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,e=e.createElement("tr"),k=0;f[k]&&k<d;k++){var l;1<f[k].rowSpan&&h&&f[k]==h[k]?(l=f[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(f[k])).clone(),
+l.removeAttribute("rowSpan"),l.appendBogus(),e.append(l),l=l.$);k+=l.colSpan-1}c?e.insertBefore(g):e.insertAfter(g)}function c(b){if(b instanceof CKEDITOR.dom.selection){var d=b.getRanges(),e=a(b),f=e[0].getAscendant("table"),g=CKEDITOR.tools.buildTableMap(f),h=e[0].getParent().$.rowIndex,e=e[e.length-1],k=e.getParent().$.rowIndex+e.$.rowSpan-1,e=[];b.reset();for(b=h;b<=k;b++){for(var l=g[b],m=new CKEDITOR.dom.element(f.$.rows[b]),n=0;n<l.length;n++){var r=new CKEDITOR.dom.element(l[n]),u=r.getParent().$.rowIndex;
+1==r.$.rowSpan?r.remove():(--r.$.rowSpan,u==b&&(u=g[b+1],u[n-1]?r.insertAfter(new CKEDITOR.dom.element(u[n-1])):(new CKEDITOR.dom.element(f.$.rows[b+1])).append(r,1)));n+=r.$.colSpan-1}e.push(m)}g=f.$.rows;d[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(g[k+1]||(0<h?g[h-1]:null)||f.$.parentNode);for(b=e.length;0<=b;b--)c(e[b]);return f.$.parentNode?h:(d[0].select(),null)}b instanceof CKEDITOR.dom.element&&(f=b.getAscendant("table"),1==f.$.rows.length?f.remove():b.remove());
+return null}function f(a,b){for(var c=a.getParent().$.cells,d=0,e=0;e<c.length;e++){var f=c[e],d=d+(b?1:f.colSpan);if(f==a.$)break}return d-1}function h(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var e=f(a[d],b);if(b?e<c:e>c)c=e}return c}function m(b,c){for(var d=w(b)?b:a(b),e=d[0].getAscendant("table"),f=h(d,1),d=h(d),g=c?f:d,k=CKEDITOR.tools.buildTableMap(e),e=[],f=[],d=k.length,l=0;l<d;l++)e.push(k[l][g]),f.push(c?k[l][g-1]:k[l][g+1]);for(l=0;l<d;l++)e[l]&&(1<e[l].colSpan&&f[l]==e[l]?(k=e[l],
+k.colSpan+=1):(g=new CKEDITOR.dom.element(e[l]),k=g.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[c?"insertBefore":"insertAfter"].call(k,g),k=k.$),l+=k.rowSpan-1)}function l(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function k(b){if(b instanceof CKEDITOR.dom.selection){var c=b.getRanges(),e=a(b),f=e[0]&&e[0].getAscendant("table"),g;a:{var h=0;g=e.length-1;for(var l={},m,n;m=e[h++];)CKEDITOR.dom.element.setMarker(l,
+m,"delete_cell",!0);for(h=0;m=e[h++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);g=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);h=e[0].getParent();(h=h.getPrevious())?g=h.getLast():(h=e[g].getParent(),g=(h=h.getNext())?h.getChild(0):null)}b.reset();for(b=e.length-1;0<=b;b--)k(e[b]);g?d(g,!0):f&&(c[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),c[0].select(),f.remove())}else b instanceof
+CKEDITOR.dom.element&&(c=b.getParent(),1==c.getChildCount()?c.remove():b.remove())}function d(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function b(a,b,c){a=a[b];if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?
+-1:null}function g(c,d,e){var f=a(c),g;if((d?1!=f.length:2>f.length)||(g=c.getCommonAncestor())&&g.type==CKEDITOR.NODE_ELEMENT&&g.is("table"))return!1;var h;c=f[0];g=c.getAscendant("table");var k=CKEDITOR.tools.buildTableMap(g),l=k.length,m=k[0].length,n=c.getParent().$.rowIndex,r=b(k,n,c);if(d){var u;try{var w=parseInt(c.getAttribute("rowspan"),10)||1;h=parseInt(c.getAttribute("colspan"),10)||1;u=k["up"==d?n-w:"down"==d?n+w:n]["left"==d?r-h:"right"==d?r+h:r]}catch(I){return!1}if(!u||c.$==u)return!1;
+f["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(u))}d=c.getDocument();var H=n,w=u=0,N=!e&&new CKEDITOR.dom.documentFragment(d),O=0;for(d=0;d<f.length;d++){h=f[d];var E=h.getParent(),S=h.getFirst(),L=h.$.colSpan,P=h.$.rowSpan,E=E.$.rowIndex,J=b(k,E,h),O=O+L*P,w=Math.max(w,J-r+L);u=Math.max(u,E-n+P);e||(L=h,(P=L.getBogus())&&P.remove(),L.trim(),h.getChildren().count()&&(E==H||!S||S.isBlockBoundary&&S.isBlockBoundary({br:1})||(H=N.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!H||H.is&&
+H.is("br")||N.append("br")),h.moveChildren(N)),d?h.remove():h.setHtml(""));H=E}if(e)return u*w==O;N.moveChildren(c);c.appendBogus();w>=m?c.removeAttribute("rowSpan"):c.$.rowSpan=u;u>=l?c.removeAttribute("colSpan"):c.$.colSpan=w;e=new CKEDITOR.dom.nodeList(g.$.rows);f=e.count();for(d=f-1;0<=d;d--)g=e.getItem(d),g.$.cells.length||(g.remove(),f++);return c}function n(c,d){var e=a(c);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(g),
+k=f.$.rowIndex,l=b(h,k,e),m=e.$.rowSpan,n;if(1<m){n=Math.ceil(m/2);for(var m=Math.floor(m/2),f=k+n,g=new CKEDITOR.dom.element(g.$.rows[f]),h=b(h,f),r,f=e.clone(),k=0;k<h.length;k++)if(r=h[k],r.parentNode==g.$&&k>l){f.insertBefore(new CKEDITOR.dom.element(r));break}else r=null;r||g.append(f)}else for(m=n=1,g=f.clone(),g.insertAfter(f),g.append(f=e.clone()),r=b(h,k),l=0;l<r.length;l++)r[l].rowSpan++;f.appendBogus();e.$.rowSpan=n;f.$.rowSpan=m;1==n&&e.removeAttribute("rowSpan");1==m&&f.removeAttribute("rowSpan");
+return f}function u(c,d){var e=a(c);if(1<e.length)return!1;if(d)return!0;var e=e[0],f=e.getParent(),g=f.getAscendant("table"),g=CKEDITOR.tools.buildTableMap(g),h=b(g,f.$.rowIndex,e),k=e.$.colSpan;if(1<k)f=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=f=1,l=[],m=0;m<g.length;m++){var n=g[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(g=0;g<l.length;g++)l[g].colSpan++}g=e.clone();g.insertAfter(e);g.appendBogus();e.$.colSpan=f;g.$.colSpan=k;1==f&&e.removeAttribute("colSpan");1==k&&g.removeAttribute("colSpan");
+return g}var r=/^(?:td|th)$/,w=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(b){function f(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function h(a,c){var d=b.addCommand(a,c);b.addFeature(d)}var r=b.lang.table,w=CKEDITOR.tools.style.parse;h("cellProperties",new CKEDITOR.dialogCommand("cellProperties",f({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",
 requiredContent:"table",contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&w.background(a.styles.background).color},right:function(a){a.styles["background-color"]=w.background(a.styles.background).color}},{element:"td",check:"td{vertical-align}",left:function(a){return a.attributes&&a.attributes.valign},right:function(a){a.styles["vertical-align"]=a.attributes.valign;delete a.attributes.valign}}],[{element:"tr",check:"td{height}",left:function(a){return a.styles&&
 a.styles.height},right:function(a){CKEDITOR.tools.array.forEach(a.children,function(b){b.name in{td:1,th:1}&&(b.attributes["cke-row-height"]=a.styles.height)});delete a.styles.height}}],[{element:"td",check:"td{height}",left:function(a){return(a=a.attributes)&&a["cke-row-height"]},right:function(a){a.styles.height=a.attributes["cke-row-height"];delete a.attributes["cke-row-height"]}}]]})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");h("rowDelete",f({requiredContent:"table",
 exec:function(a){a=a.getSelection();(a=c(a))&&d(a)}}));h("rowInsertBefore",f({requiredContent:"table",exec:function(b){b=b.getSelection();b=a(b);e(b,!0)}}));h("rowInsertAfter",f({requiredContent:"table",exec:function(b){b=b.getSelection();b=a(b);e(b)}}));h("columnDelete",f({requiredContent:"table",exec:function(b){var c=b.getSelection();b=c.getRanges();var e=a(c),f=e[0],g=e[e.length-1],e=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(e),k,l,m=[];c.reset();for(var n=0,c=h.length;n<c;n++)for(var p=
-0,u=h[n].length;p<u;p++)h[n][p]==f.$&&(k=p),h[n][p]==g.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)g=h[p],f=new CKEDITOR.dom.element(e.$.rows[p]),g=new CKEDITOR.dom.element(g[n]),g.$&&(1==g.$.colSpan?g.remove():--g.$.colSpan,p+=g.$.rowSpan-1,f.$.cells.length||m.push(f));l=e.$.rows[0]&&e.$.rows[0].cells;k=new CKEDITOR.dom.element(l[k]||(k?l[k-1]:e.$.parentNode));m.length==c&&(b[0].moveToPosition(e,CKEDITOR.POSITION_AFTER_END),b[0].select(),e.remove());k&&d(k,!0)}}));h("columnInsertBefore",f({requiredContent:"table",
+0,r=h[n].length;p<r;p++)h[n][p]==f.$&&(k=p),h[n][p]==g.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)g=h[p],f=new CKEDITOR.dom.element(e.$.rows[p]),g=new CKEDITOR.dom.element(g[n]),g.$&&(1==g.$.colSpan?g.remove():--g.$.colSpan,p+=g.$.rowSpan-1,f.$.cells.length||m.push(f));l=e.$.rows[0]&&e.$.rows[0].cells;k=new CKEDITOR.dom.element(l[k]||(k?l[k-1]:e.$.parentNode));m.length==c&&(b[0].moveToPosition(e,CKEDITOR.POSITION_AFTER_END),b[0].select(),e.remove());k&&d(k,!0)}}));h("columnInsertBefore",f({requiredContent:"table",
 exec:function(b){b=b.getSelection();b=a(b);m(b,!0)}}));h("columnInsertAfter",f({requiredContent:"table",exec:function(b){b=b.getSelection();b=a(b);m(b)}}));h("cellDelete",f({requiredContent:"table",exec:function(a){a=a.getSelection();k(a)}}));h("cellMerge",f({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a,b){b.cell=g(a.getSelection());d(b.cell,!0)}}));h("cellMergeRight",f({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a,b){b.cell=
-g(a.getSelection(),"right");d(b.cell,!0)}}));h("cellMergeDown",f({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=g(a.getSelection(),"down");d(b.cell,!0)}}));h("cellVerticalSplit",f({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){d(t(a.getSelection()))}}));h("cellHorizontalSplit",f({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){d(n(a.getSelection()))}}));h("cellInsertBefore",f({requiredContent:"table",
-exec:function(a){a=a.getSelection();l(a,!0)}}));h("cellInsertAfter",f({requiredContent:"table",exec:function(a){a=a.getSelection();l(a)}}));b.addMenuItems&&b.addMenuItems({tablecell:{label:u.cell.menu,group:"tablecell",order:1,getItems:function(){var c=b.getSelection(),d=a(c);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:g(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:g(c,
-"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:g(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:t(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:n(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:u.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:u.cell.insertAfter,
-group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:u.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:u.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:u.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:u.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:u.cell.splitHorizontal,group:"tablecell",
-command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:u.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:u.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:u.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:u.row.insertBefore,
-group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:u.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:u.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:u.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:u.column.insertBefore,
-group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:u.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:u.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});b.contextMenu&&b.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:f,
+g(a.getSelection(),"right");d(b.cell,!0)}}));h("cellMergeDown",f({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=g(a.getSelection(),"down");d(b.cell,!0)}}));h("cellVerticalSplit",f({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){d(u(a.getSelection()))}}));h("cellHorizontalSplit",f({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){d(n(a.getSelection()))}}));h("cellInsertBefore",f({requiredContent:"table",
+exec:function(a){a=a.getSelection();l(a,!0)}}));h("cellInsertAfter",f({requiredContent:"table",exec:function(a){a=a.getSelection();l(a)}}));b.addMenuItems&&b.addMenuItems({tablecell:{label:r.cell.menu,group:"tablecell",order:1,getItems:function(){var c=b.getSelection(),d=a(c);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:g(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:g(c,
+"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:g(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:u(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:n(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:r.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:r.cell.insertAfter,
+group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:r.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:r.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:r.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:r.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:r.cell.splitHorizontal,group:"tablecell",
+command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:r.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:r.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:r.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:r.row.insertBefore,
+group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:r.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:r.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:r.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:r.column.insertBefore,
+group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:r.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:r.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});b.contextMenu&&b.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:f,
 insertRow:e,insertColumn:m,getSelectedCells:a};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(a,e,c,f,h){a=a.$.rows;c=c||0;f="number"===typeof f?f:a.length-1;h="number"===typeof h?h:-1;var m=-1,l=[];for(e=e||0;e<=f;e++){m++;!l[m]&&(l[m]=[]);for(var k=-1,d=c;d<=(-1===h?a[e].cells.length-1:h);d++){var b=a[e].cells[d];if(!b)break;for(k++;l[m][k];)k++;for(var g=isNaN(b.colSpan)?1:b.colSpan,b=isNaN(b.rowSpan)?1:b.rowSpan,n=0;n<b&&!(e+n>f);n++){l[m+
-n]||(l[m+n]=[]);for(var t=0;t<g;t++)l[m+n][k+t]=a[e].cells[d]}k+=g-1;if(-1!==h&&k>=h)break}}return l},function(){function a(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function e(a,c){var d=a.getComputedStyle("border-"+c+"-width"),e={thin:"0px",medium:"1px",thick:"2px"};0>d.indexOf("px")&&(d=d in e&&"none"!=a.getComputedStyle("border-style")?e[d]:0);return parseInt(d,10)}function c(a){a=a.$.rows;for(var c=0,d,e,f,h=0,k=a.length;h<k;h++)f=a[h],d=f.cells.length,
-d>c&&(c=d,e=f);return e}function f(a){function d(a){a&&(a=new CKEDITOR.dom.element(a),k+=a.$.offsetHeight,l||(l=a.getDocumentPosition()))}var f=[],h=-1,k=0,l=null,m="rtl"==a.getComputedStyle("direction"),r=c(a);d(a.$.tHead);d(a.$.tBodies[0]);d(a.$.tFoot);if(r)for(var v=0,A=r.cells.length;v<A;v++){var B=new CKEDITOR.dom.element(r.cells[v]),q=r.cells[v+1]&&new CKEDITOR.dom.element(r.cells[v+1]),h=h+(B.$.colSpan||1),z,y,x=B.getDocumentPosition().x;m?y=x+e(B,"left"):z=x+B.$.offsetWidth-e(B,"right");q?
-(x=q.getDocumentPosition().x,m?z=x+q.$.offsetWidth-e(q,"right"):y=x+e(q,"left")):(x=a.getDocumentPosition().x,m?z=x:y=x+a.$.offsetWidth);B=Math.max(y-z,3);f.push({table:a,index:h,x:z,y:l.y,width:B,height:k,rtl:m})}return f}function h(a){(a.data||a).preventDefault()}function m(b){function c(){A=0;v.setOpacity(0);q&&f();var a=p.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);r.removeListener("dragstart",h)}function f(){for(var c=p.rtl,d=c?x.length:y.length,g=0,h=0;h<d;h++){var l=
-y[h],m=x[h],n=p.table;CKEDITOR.tools.setTimeout(function(a,e,f,h,l,m){a&&a.setStyle("width",k(Math.max(e+m,1)));f&&f.setStyle("width",k(Math.max(h-m,1)));l&&n.setStyle("width",k(l+m*(c?-1:1)));++g==d&&b.fire("saveSnapshot")},0,this,[l,l&&a(l),m,m&&a(m),(!l||!m)&&a(n)+e(n,"left")+e(n,"right"),q])}}function l(c){h(c);b.fire("saveSnapshot");c=p.index;for(var d=CKEDITOR.tools.buildTableMap(p.table),e=[],f=[],g=Number.MAX_VALUE,k=g,n=p.rtl,t=0,z=d.length;t<z;t++){var P=d[t],J=P[c+(n?1:0)],P=P[c+(n?0:1)],
-J=J&&new CKEDITOR.dom.element(J),P=P&&new CKEDITOR.dom.element(P);J&&P&&J.equals(P)||(J&&(g=Math.min(g,a(J))),P&&(k=Math.min(k,a(P))),e.push(J),f.push(P))}y=e;x=f;D=p.x-g;C=p.x+k;v.setOpacity(.5);B=parseInt(v.getStyle("left"),10);q=0;A=1;v.on("mousemove",w);r.on("dragstart",h);r.on("mouseup",m,this)}function m(a){a.removeListener();c()}function w(a){z(a.data.getPageOffset().x)}var p,r,v,A,B,q,z,y,x,D,C;r=b.document;v=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"\x3e\x3c/div\x3e',
-r);b.on("destroy",function(){v.remove()});d||r.getDocumentElement().append(v);this.attachTo=function(a){A||(d&&(r.getBody().append(v),q=0),p=a,v.setStyles({width:k(a.width),height:k(a.height),left:k(a.x),top:k(a.y)}),d&&v.setOpacity(.25),v.on("mousedown",l,this),r.getBody().setStyle("cursor","col-resize"),v.show())};z=this.move=function(a){if(!p)return 0;if(!A&&(a<p.x||a>p.x+p.width))return p=null,A=q=0,r.removeListener("mouseup",m),v.removeListener("mousedown",l),v.removeListener("mousemove",w),
-r.getBody().setStyle("cursor","auto"),d?v.remove():v.hide(),0;a-=Math.round(v.$.offsetWidth/2);if(A){if(a==D||a==C)return 1;a=Math.max(a,D);a=Math.min(a,C);q=a-B}v.setStyle("left",k(a));return 1}}function l(a){var c=a.data.getTarget();if("mouseout"==a.name){if(!c.is("table"))return;for(var d=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);d&&d.$&&!d.equals(c)&&!d.is("body");)d=d.getParent();if(!d||d.equals(c))return}c.getAscendant("table",1).removeCustomData("_cke_table_pillars");
+n]||(l[m+n]=[]);for(var u=0;u<g;u++)l[m+n][k+u]=a[e].cells[d]}k+=g-1;if(-1!==h&&k>=h)break}}return l},function(){function a(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function e(a,c){var d=a.getComputedStyle("border-"+c+"-width"),e={thin:"0px",medium:"1px",thick:"2px"};0>d.indexOf("px")&&(d=d in e&&"none"!=a.getComputedStyle("border-style")?e[d]:0);return parseInt(d,10)}function c(a){a=a.$.rows;for(var c=0,d,e,f,h=0,k=a.length;h<k;h++)f=a[h],d=f.cells.length,
+d>c&&(c=d,e=f);return e}function f(a){function d(a){a&&(a=new CKEDITOR.dom.element(a),k+=a.$.offsetHeight,l||(l=a.getDocumentPosition()))}var f=[],h=-1,k=0,l=null,m="rtl"==a.getComputedStyle("direction"),t=c(a);d(a.$.tHead);d(a.$.tBodies[0]);d(a.$.tFoot);if(t)for(var v=0,z=t.cells.length;v<z;v++){var A=new CKEDITOR.dom.element(t.cells[v]),q=t.cells[v+1]&&new CKEDITOR.dom.element(t.cells[v+1]),h=h+(A.$.colSpan||1),y,x,C=A.getDocumentPosition().x;m?x=C+e(A,"left"):y=C+A.$.offsetWidth-e(A,"right");q?
+(C=q.getDocumentPosition().x,m?y=C+q.$.offsetWidth-e(q,"right"):x=C+e(q,"left")):(C=a.getDocumentPosition().x,m?y=C:x=C+a.$.offsetWidth);A=Math.max(x-y,3);f.push({table:a,index:h,x:y,y:l.y,width:A,height:k,rtl:m})}return f}function h(a){(a.data||a).preventDefault()}function m(b){function c(){z=0;v.setOpacity(0);q&&f();var a=p.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);t.removeListener("dragstart",h)}function f(){for(var c=p.rtl,d=c?C.length:x.length,g=0,h=0;h<d;h++){var l=
+x[h],m=C[h],n=p.table;CKEDITOR.tools.setTimeout(function(a,e,f,h,l,m){a&&a.setStyle("width",k(Math.max(e+m,1)));f&&f.setStyle("width",k(Math.max(h-m,1)));l&&n.setStyle("width",k(l+m*(c?-1:1)));++g==d&&b.fire("saveSnapshot")},0,this,[l,l&&a(l),m,m&&a(m),(!l||!m)&&a(n)+e(n,"left")+e(n,"right"),q])}}function l(c){h(c);b.fire("saveSnapshot");c=p.index;for(var d=CKEDITOR.tools.buildTableMap(p.table),e=[],f=[],g=Number.MAX_VALUE,k=g,n=p.rtl,u=0,y=d.length;u<y;u++){var P=d[u],J=P[c+(n?1:0)],P=P[c+(n?0:1)],
+J=J&&new CKEDITOR.dom.element(J),P=P&&new CKEDITOR.dom.element(P);J&&P&&J.equals(P)||(J&&(g=Math.min(g,a(J))),P&&(k=Math.min(k,a(P))),e.push(J),f.push(P))}x=e;C=f;B=p.x-g;D=p.x+k;v.setOpacity(.5);A=parseInt(v.getStyle("left"),10);q=0;z=1;v.on("mousemove",w);t.on("dragstart",h);t.on("mouseup",m,this)}function m(a){a.removeListener();c()}function w(a){y(a.data.getPageOffset().x)}var p,t,v,z,A,q,y,x,C,B,D;t=b.document;v=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"\x3e\x3c/div\x3e',
+t);b.on("destroy",function(){v.remove()});d||t.getDocumentElement().append(v);this.attachTo=function(a){z||(d&&(t.getBody().append(v),q=0),p=a,v.setStyles({width:k(a.width),height:k(a.height),left:k(a.x),top:k(a.y)}),d&&v.setOpacity(.25),v.on("mousedown",l,this),t.getBody().setStyle("cursor","col-resize"),v.show())};y=this.move=function(a){if(!p)return 0;if(!z&&(a<p.x||a>p.x+p.width))return p=null,z=q=0,t.removeListener("mouseup",m),v.removeListener("mousedown",l),v.removeListener("mousemove",w),
+t.getBody().setStyle("cursor","auto"),d?v.remove():v.hide(),0;a-=Math.round(v.$.offsetWidth/2);if(z){if(a==B||a==D)return 1;a=Math.max(a,B);a=Math.min(a,D);q=a-A}v.setStyle("left",k(a));return 1}}function l(a){var c=a.data.getTarget();if("mouseout"==a.name){if(!c.is("table"))return;for(var d=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);d&&d.$&&!d.equals(c)&&!d.is("body");)d=d.getParent();if(!d||d.equals(c))return}c.getAscendant("table",1).removeCustomData("_cke_table_pillars");
 a.removeListener()}var k=CKEDITOR.tools.cssLength,d=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(a){a.on("contentDom",function(){var c,d=a.editable();d.attachListener(d.isInline()?d:a.document,"mousemove",function(d){d=d.data;var e=d.getTarget();if(e.type==CKEDITOR.NODE_ELEMENT){var k=d.getPageOffset().x;if(c&&c.move(k))h(d);else if(e.is("table")||e.getAscendant({thead:1,tbody:1,tfoot:1},1))if(e=e.getAscendant("table",
-1),a.editable().contains(e)){(d=e.getCustomData("_cke_table_pillars"))||(e.setCustomData("_cke_table_pillars",d=f(e)),e.on("mouseout",l),e.on("mousedown",l));a:{for(var e=0,n=d.length;e<n;e++){var r=d[e];if(k>=r.x&&k<=r.x+r.width){k=r;break a}}k=null}k&&(!c&&(c=new m(a)),c.attachTo(k))}}})})}})}(),"use strict",function(){var a=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],e={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(e){function d(a){f.enabled&&!1!==a.data.command.canUndo&&
-f.save()}function b(){f.enabled=e.readOnly?!1:"wysiwyg"==e.mode;f.onChange()}var f=e.undoManager=new c(e),h=f.editingHandler=new m(f),l=e.addCommand("undo",{exec:function(){f.undo()&&(e.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),u=e.addCommand("redo",{exec:function(){f.redo()&&(e.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});e.setKeystroke([[a[0],"undo"],[a[1],"redo"],[a[2],"redo"]]);f.onChange=function(){l.setState(f.undoable()?CKEDITOR.TRISTATE_OFF:
-CKEDITOR.TRISTATE_DISABLED);u.setState(f.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};e.on("beforeCommandExec",d);e.on("afterCommandExec",d);e.on("saveSnapshot",function(a){f.save(a.data&&a.data.contentOnly)});e.on("contentDom",h.attachListeners,h);e.on("instanceReady",function(){e.fire("saveSnapshot")});e.on("beforeModeUnload",function(){"wysiwyg"==e.mode&&f.save(!0)});e.on("mode",b);e.on("readOnly",b);e.ui.addButton&&(e.ui.addButton("Undo",{label:e.lang.undo.undo,command:"undo",
+1),a.editable().contains(e)){(d=e.getCustomData("_cke_table_pillars"))||(e.setCustomData("_cke_table_pillars",d=f(e)),e.on("mouseout",l),e.on("mousedown",l));a:{for(var e=0,n=d.length;e<n;e++){var t=d[e];if(k>=t.x&&k<=t.x+t.width){k=t;break a}}k=null}k&&(!c&&(c=new m(a)),c.attachTo(k))}}})})}})}(),"use strict",function(){var a=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],e={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(e){function d(a){f.enabled&&!1!==a.data.command.canUndo&&
+f.save()}function b(){f.enabled=e.readOnly?!1:"wysiwyg"==e.mode;f.onChange()}var f=e.undoManager=new c(e),h=f.editingHandler=new m(f),l=e.addCommand("undo",{exec:function(){f.undo()&&(e.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),r=e.addCommand("redo",{exec:function(){f.redo()&&(e.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});e.setKeystroke([[a[0],"undo"],[a[1],"redo"],[a[2],"redo"]]);f.onChange=function(){l.setState(f.undoable()?CKEDITOR.TRISTATE_OFF:
+CKEDITOR.TRISTATE_DISABLED);r.setState(f.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};e.on("beforeCommandExec",d);e.on("afterCommandExec",d);e.on("saveSnapshot",function(a){f.save(a.data&&a.data.contentOnly)});e.on("contentDom",h.attachListeners,h);e.on("instanceReady",function(){e.fire("saveSnapshot")});e.on("beforeModeUnload",function(){"wysiwyg"==e.mode&&f.save(!0)});e.on("mode",b);e.on("readOnly",b);e.ui.addButton&&(e.ui.addButton("Undo",{label:e.lang.undo.undo,command:"undo",
 toolbar:"undo,10"}),e.ui.addButton("Redo",{label:e.lang.undo.redo,command:"redo",toolbar:"undo,20"}));e.resetUndo=function(){f.reset();e.fire("saveSnapshot")};e.on("updateSnapshot",function(){f.currentImage&&f.update()});e.on("lockSnapshot",function(a){a=a.data;f.lock(a&&a.dontUpdate,a&&a.forceUpdate)});e.on("unlockSnapshot",f.unlock,f)}});CKEDITOR.plugins.undo={};var c=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||
 20;this.strokesLimit=25;this.editor=a;this.reset()};c.prototype={type:function(a,d){var b=c.getKeyGroup(a),e=this.strokesRecorded[b]+1;d=d||e>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());d?(e=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[b]=e;this.previousKeyGroup=b},keyGroupChanged:function(a){return c.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;
 this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,c,b){var e=this.editor;if(this.locked||"ready"!=e.status||"wysiwyg"!=e.mode)return!1;var h=e.editable();if(!h||"ready"!=h.status)return!1;h=this.snapshots;c||(c=new f(e));if(!1===c.contents)return!1;if(this.currentImage)if(c.equalsContent(this.currentImage)){if(a||
@@ -1094,15 +1093,15 @@ a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(k,"blur",functio
 11>CKEDITOR.env.version&&a.config.disableObjectResizing&&c(a)}function c(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var c=[],e;for(e in CKEDITOR.dtd.$removeEmpty)c.push("html.CSS1Compat "+e+"[contenteditable\x3dfalse]");a.push(c.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));
 a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var f;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(c){function e(b){b&&b.removeListener();a.editable(new f(a,d.$.contentWindow.document.body));a.setData(a.getData(1),c)}var k="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+
 ")();":"")+"document.close();",k=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(k)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+k+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame").addClass("cke_reset");k=a.ui.space("contents");k.append(d);var b=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(b)d.on("load",e);var g=a.title,
-n=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&n&&(g+=", "+n),d.setAttribute("title",g));if(n){var g=CKEDITOR.tools.getNextId(),t=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");k.append(t,1);d.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();t&&t.remove()});d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!b&&e();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=
+n=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&n&&(g+=", "+n),d.setAttribute("title",g));if(n){var g=CKEDITOR.tools.getNextId(),u=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");k.append(u,1);d.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();u&&u.remove()});d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!b&&e();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=
 function(a){var c=this.config,e=c.contentsCss;CKEDITOR.tools.isArray(e)||(c.contentsCss=e?[e]:[]);c.contentsCss.push(a)};f=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(c){CKEDITOR.tools.setTimeout(a,0,this,c)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,e){var f=this.editor;if(e)this.setHtml(a),this.fixInitialSelection(),f.fire("dataReady");
 else{this._.isLoadingData=!0;f._.dataStore={id:1};var k=f.config,d=k.fullPage,b=k.docType,g=CKEDITOR.tools.buildStyleHtml(c()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');d||(g+=CKEDITOR.tools.buildStyleHtml(f.config.contentsCss));var n=k.baseHref?'\x3cbase href\x3d"'+k.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";d&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){f.docType=b=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){f.xmlDeclaration=a;return""}));a=f.dataProcessor.toHtml(a);d?(/<body[\s|>]/.test(a)||
 (a="\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),n&&(a=a.replace(/<head[^>]*?>/,"$\x26"+n)),a=a.replace(/<\/head\s*>/,g+"$\x26"),a=b+a):a=k.docType+'\x3chtml dir\x3d"'+k.contentsLangDirection+'" lang\x3d"'+(k.contentsLanguage||f.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+
 this._.docTitle+"\x3c/title\x3e"+n+g+"\x3c/head\x3e\x3cbody"+(k.bodyId?' id\x3d"'+k.bodyId+'"':"")+(k.bodyClass?' class\x3d"'+k.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));k='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+
 this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(k+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e');n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(k+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');
-a=a.replace(/(?=\s*<\/(:?head)>)/,k);this.clearCustomData();this.clearListeners();f.fire("contentDomUnload");var t=this.getDocument();try{t.write(a)}catch(u){setTimeout(function(){t.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var c=a.config,e=c.fullPage,f=e&&a.docType,d=e&&a.xmlDeclaration,b=this.getDocument(),e=e?b.getDocumentElement().getOuterHtml():b.getBody().getHtml();CKEDITOR.env.gecko&&c.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,
+a=a.replace(/(?=\s*<\/(:?head)>)/,k);this.clearCustomData();this.clearListeners();f.fire("contentDomUnload");var u=this.getDocument();try{u.write(a)}catch(r){setTimeout(function(){u.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var c=a.config,e=c.fullPage,f=e&&a.docType,d=e&&a.xmlDeclaration,b=this.getDocument(),e=e?b.getDocumentElement().getOuterHtml():b.getBody().getHtml();CKEDITOR.env.gecko&&c.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,
 ""));e=a.dataProcessor.toDataFormat(e);d&&(e=d+"\n"+e);f&&(e=f+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:f.baseProto.focus.call(this)},detach:function(){var a=this.editor,c=a.document,e;try{e=a.window.getFrame()}catch(k){}f.baseProto.detach.call(this);this.clearCustomData();c.getDocumentElement().clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);e&&e.getParent()?(e.clearCustomData(),(a=e.removeCustomData("onResize"))&&a.removeListener(),
-e.remove()):CKEDITOR.warn("editor-destroy-iframe")}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles=!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,notification,button,toolbar,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea",
+e.remove()):CKEDITOR.warn("editor-destroy-iframe")}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles=!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,button,toolbar,notification,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea",
 CKEDITOR.config.skin="moono-lisa",function(){var a=function(a,c){var f=CKEDITOR.getUrl("plugins/"+c);a=a.split(",");for(var h=0;h<a.length;h++)CKEDITOR.skin.icons[a[h]]={path:f,offset:-a[++h],bgsize:a[++h]}};CKEDITOR.env.hidpi?a("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,justifyblock,480,,justifycenter,504,,justifyleft,528,,justifyright,552,,language,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,maximize,696,,pastefromword-rtl,720,,pastefromword,744,,pastetext-rtl,768,,pastetext,792,,removeformat,816,,showblocks-rtl,840,,showblocks,864,,source-rtl,888,,source,912,,sourcedialog-rtl,936,,sourcedialog,960,,specialchar,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,simplebox,2256,auto",
 "icons_hidpi.png"):a("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,horizontalrule,336,auto,image,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,justifyblock,480,auto,justifycenter,504,auto,justifyleft,528,auto,justifyright,552,auto,language,576,auto,bulletedlist-rtl,600,auto,bulletedlist,624,auto,numberedlist-rtl,648,auto,numberedlist,672,auto,maximize,696,auto,pastefromword-rtl,720,auto,pastefromword,744,auto,pastetext-rtl,768,auto,pastetext,792,auto,removeformat,816,auto,showblocks-rtl,840,auto,showblocks,864,auto,source-rtl,888,auto,source,912,auto,sourcedialog-rtl,936,auto,sourcedialog,960,auto,specialchar,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,simplebox,1128,auto",
 "icons.png")}())})();
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ru.js b/core/assets/vendor/ckeditor/lang/ru.js
index 6cdd13a02e..79fe7ce59e 100644
--- a/core/assets/vendor/ckeditor/lang/ru.js
+++ b/core/assets/vendor/ckeditor/lang/ru.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-CKEDITOR.lang['ru']={"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по вертикали","splitVertical":"Разделить ячейку по горизонтали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"sourcearea":{"toolbar":"Источник"},"showblocks":{"toolbar":"Отображать блоки"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","pasteNotification":"Ваш браузер не поддерживает данный метод вставки. Для вставки нажмите %1"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"notification":{"closed":"Уведомление закрыто"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"language":{"button":"Установка языка","remove":"Удалить язык"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image2":{"alt":"Альтернативный текст","btnUpload":"Загрузить на сервер","captioned":"Отображать название","captionPlaceholder":"Название","infoTab":"Данные об изображении","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","pathName":"изображение","pathNameCaption":"название","resetSize":"Вернуть обычные размеры","resizer":"Нажмите и растяните","title":"Свойства изображения","uploadTab":"Загрузка файла","urlMissing":"Не указана ссылка на изображение.","altMissing":"Не задан альтернативный текст"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteNotification":"Ваш браузер не поддерживает данный метод вставки. Для вставки нажмите %1"},"button":{"selectedLabel":"%1 (Выбрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Комбинация клавиш"}};
\ No newline at end of file
+CKEDITOR.lang['ru']={"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по вертикали","splitVertical":"Разделить ячейку по горизонтали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"sourcearea":{"toolbar":"Источник"},"showblocks":{"toolbar":"Отображать блоки"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","pasteNotification":"Your browser does not allow you to paste plain text this way. Press %1 to paste."},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"notification":{"closed":"Уведомление закрыто"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"language":{"button":"Установка языка","remove":"Удалить язык"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image2":{"alt":"Альтернативный текст","btnUpload":"Загрузить на сервер","captioned":"Отображать название","captionPlaceholder":"Название","infoTab":"Данные об изображении","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","pathName":"изображение","pathNameCaption":"название","resetSize":"Вернуть обычные размеры","resizer":"Нажмите и растяните","title":"Свойства изображения","uploadTab":"Загрузка файла","urlMissing":"Не указана ссылка на изображение.","altMissing":"Не задан альтернативный текст"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteNotification":"Your browser doesn't allow you to paste this way. Press %1 to paste."},"button":{"selectedLabel":"%1 (Выбрано)"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Комбинация клавиш"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/zh-cn.js b/core/assets/vendor/ckeditor/lang/zh-cn.js
index e02131be29..b15c9278e4 100644
--- a/core/assets/vendor/ckeditor/lang/zh-cn.js
+++ b/core/assets/vendor/ckeditor/lang/zh-cn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-CKEDITOR.lang['zh-cn']={"widget":{"move":"点击并拖拽以移动","label":"%1 小部件"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcedialog":{"toolbar":"源码","title":"源码"},"sourcearea":{"toolbar":"源码"},"showblocks":{"toolbar":"显示区块"},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","pasteNotification":"您的浏览器不允许用此方式粘贴成纯文本，要粘贴请按 %1。"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"notification":{"closed":"通知已关闭"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"language":{"button":"设置语言","remove":"移除语言"},"justify":{"block":"两端对齐","center":"居中","left":"左对齐","right":"右对齐"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image2":{"alt":"替换文本","btnUpload":"上传到服务器","captioned":"带标题图像","captionPlaceholder":"标题","infoTab":"图像信息","lockRatio":"锁定比例","menu":"图像属性","pathName":"图像","pathNameCaption":"标题","resetSize":"原始尺寸","resizer":"点击并拖拽以改变尺寸","title":"图像属性","uploadTab":"上传","urlMissing":"缺少图像源文件地址","altMissing":"缺少替换文本"},"horizontalrule":{"toolbar":"插入水平线"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteNotification":"您的浏览器不允许用此方式粘贴，要粘贴请按 %1。"},"button":{"selectedLabel":"已选中 %1 项"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor","help":"访问 $1 以获取帮助。","moreInfo":"相关授权许可信息请访问我们的网站：","title":"关于 CKEditor","userGuide":"CKEditor 用户向导"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存，是否确认新建文档？","confirmCancel":"部分修改尚未保存，是否确认关闭对话框？","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignJustify":"两端对齐","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字，或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">，不可用</span>","keyboard":{"8":"退格键","13":"回车键","16":"Shift","17":"Ctrl","18":"Alt","32":"空格键","35":"行尾键","36":"行首键","46":"删除键","224":"Command"},"keyboardShortcut":"快捷键"}};
\ No newline at end of file
+CKEDITOR.lang['zh-cn']={"widget":{"move":"点击并拖拽以移动","label":"%1 小部件"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcedialog":{"toolbar":"源码","title":"源码"},"sourcearea":{"toolbar":"源码"},"showblocks":{"toolbar":"显示区块"},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","pasteNotification":"Your browser does not allow you to paste plain text this way. Press %1 to paste."},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"notification":{"closed":"通知已关闭"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"language":{"button":"设置语言","remove":"移除语言"},"justify":{"block":"两端对齐","center":"居中","left":"左对齐","right":"右对齐"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image2":{"alt":"替换文本","btnUpload":"上传到服务器","captioned":"带标题图像","captionPlaceholder":"标题","infoTab":"图像信息","lockRatio":"锁定比例","menu":"图像属性","pathName":"图像","pathNameCaption":"标题","resetSize":"原始尺寸","resizer":"点击并拖拽以改变尺寸","title":"图像属性","uploadTab":"上传","urlMissing":"缺少图像源文件地址","altMissing":"缺少替换文本"},"horizontalrule":{"toolbar":"插入水平线"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteNotification":"Your browser doesn't allow you to paste this way. Press %1 to paste."},"button":{"selectedLabel":"已选中 %1 项"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor","help":"访问 $1 以获取帮助。","moreInfo":"相关授权许可信息请访问我们的网站：","title":"关于 CKEditor","userGuide":"CKEditor 用户向导"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像按钮","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明 URL","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变大小","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存，是否确认新建文档？","confirmCancel":"部分修改尚未保存，是否确认关闭对话框？","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignJustify":"两端对齐","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1”字段的值必须为正数，可以包含或不包含一个有效的 HTML 长度单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”。","cssLengthTooltip":"输入一个表示像素值的数字，或加上一个有效的 CSS 长度单位(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">，不可用</span>","keyboard":{"8":"退格键","13":"回车键","16":"Shift","17":"Ctrl","18":"Alt","32":"空格键","35":"行尾键","36":"行首键","46":"删除键","224":"Command"},"keyboardShortcut":"快捷键"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
index 66891fc6c3..b7d4693618 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
@@ -3,11 +3,10 @@
  For licensing, see LICENSE.md or http://ckeditor.com/license
 */
 CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."},
-{name:"Editordialog",legend:"Drücke innerhalb eines Dialogs TAB, um zum nächsten Element zu springen. Drücke SHIFT+TAB, um zum vorigen Element zu springen, drücke ENTER um das Formular im Dialog abzusenden, drücke ESC, um den Dialog zu schließen. Hat der Dialog mehrere Tabs, dann kannst du durch ALT+F10 die Tab-Liste aufrufen or mittels TAB als Teil der Dialog-Tab-Reihenfolge. Ist die Tab-Liste fokussiert, dann mithilfe der Pfeiltasten (LINKS und RECHTS) zwischen den Tabs gewechselt werden."},{name:"Editor-Kontextmenü",
-legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},
-{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",
-legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "},
-{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"},{name:"Einfügen als unformatierter Text. ",legend:"Drücke ${pastetext}",legendEdge:"Drücke ${pastetext} und anschließend ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Feststell",
+{name:"Editordialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor-Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},
+{name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},
+{name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "},
+{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"},{name:"Einfügen als unformatierter Text. ",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Feststell",
 escape:"Escape",pageUp:"Bild auf",pageDown:"Bild ab",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8",
 numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich",
 closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
index 6381aaee06..8b0f6de5e3 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
@@ -6,6 +6,6 @@ CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",
 {name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка",
 legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]},
 {name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'},
-{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"},{name:"Вставить только текст",legend:"Нажмите ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",
+{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",
 pageDown:"Page Down",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка",divide:"Делить",
 f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
index 8180336f39..e1cefe4a78 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
@@ -6,6 +6,6 @@ CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",cont
 {name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL."},{name:"Editor för innehållsmeny",legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},
 {name:"Editor för list-box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen."},{name:"Editor för elementens sökväg",legend:"Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren."}]},
 {name:"Kommandon",items:[{name:"Ångra kommando",legend:"Tryck på ${undo}"},{name:"Gör om kommando",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},
-{name:"Tillgå nästa fokuskommandots utrymme",legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"},{name:"Klistra in som vanlig text",legend:"Tryck ${pastetext}",legendEdge:"Tryck ${pastetext}, följt av ${paste}"}]}],tab:"Tab",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",
+{name:"Tillgå nästa fokuskommandots utrymme",legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",
 pageDown:"Sida Ned",leftArrow:"Vänsterpil",upArrow:"Uppil",rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",
 f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
index 5c78983304..cc80af7a1c 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
@@ -4,6 +4,6 @@
 */
 CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 切换到工具栏，使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内，按 TAB 键移动到下一个字段，按 SHIFT + TAB 组合键移动到上一个字段，按 ENTER 键提交对话框，按 ESC 键取消对话框。对于有多选项卡的对话框，可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表，当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项；SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键，ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"},
 {name:"编辑器列表框",legend:"在列表框中，移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键，用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏，使用 TAB 键或右箭头键选择下一个元素，使用 SHIFT+TAB 组合键或左箭头键选择上一个元素，按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"},
-{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域，例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"},{name:"粘贴为纯文本",legend:"按 ${pastetext}",legendEdge:"按 ${pastetext}，然后再按 ${paste}"}]}],tab:"Tab 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键",insert:"插入键",
-leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键",semiColon:"分号键",equalSign:"等号键",
-comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"});
\ No newline at end of file
+{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域，例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",
+downArrow:"向下箭头键",insert:"插入键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键",
+semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
index d913933320..614f5c2cb7 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H7NE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H7NE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H7NE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H7NE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H7NE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H7NE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H7NE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H7NE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H7NE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H7NE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H7NE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H7NE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H7NE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H7NE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H7NE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H7NE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -2256px!important}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H6C8) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H6C8) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H6C8) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H6C8) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H6C8) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H6C8) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H6C8) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H6C8) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H6C8) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H6C8) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H6C8) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H6C8) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H6C8) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H6C8) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H6C8) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H6C8) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -2256px!important}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
index 3a00723761..2cbfb34b6e 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H7NE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H7NE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H7NE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H7NE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H7NE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H7NE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H7NE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H7NE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H7NE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H7NE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H7NE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H7NE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H7NE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H7NE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H7NE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H7NE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H6C8) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H6C8) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H6C8) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H6C8) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H6C8) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H6C8) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H6C8) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H6C8) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H6C8) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H6C8) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H6C8) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H6C8) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H6C8) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H6C8) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H6C8) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H6C8) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
index aa6d605f60..a85a81684c 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H7NE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H7NE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H7NE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H7NE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H7NE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H7NE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H7NE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H7NE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H7NE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H7NE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H7NE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H7NE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H7NE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H7NE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H7NE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H7NE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H6C8) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H6C8) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H6C8) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H6C8) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H6C8) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H6C8) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H6C8) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H6C8) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H6C8) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H6C8) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H6C8) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H6C8) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H6C8) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H6C8) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H6C8) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H6C8) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
index fe16499e99..c8c9a5af3f 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H7NE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H7NE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H7NE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H7NE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H7NE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H7NE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H7NE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H7NE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H7NE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H7NE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H7NE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H7NE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H7NE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H7NE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H7NE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H7NE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H6C8) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H6C8) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H6C8) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H6C8) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H6C8) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H6C8) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H6C8) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H6C8) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H6C8) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H6C8) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H6C8) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H6C8) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H6C8) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H6C8) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H6C8) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H6C8) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
index 353259014e..a8e910b23d 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H7NE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H7NE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H7NE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H7NE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H7NE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H7NE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H7NE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H7NE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H7NE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H7NE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H7NE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H7NE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H7NE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H7NE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H7NE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H7NE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H7NE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H7NE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H7NE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H7NE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H7NE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H7NE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H7NE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H7NE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H7NE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H7NE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H7NE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H7NE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H7NE) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #bcbcbc;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:4px 5px}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#484848}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#e5e5e5}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=H6C8) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=H6C8) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=H6C8) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=H6C8) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=H6C8) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=H6C8) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=H6C8) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=H6C8) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=H6C8) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=H6C8) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=H6C8) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=H6C8) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=H6C8) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=H6C8) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=H6C8) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=H6C8) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=H6C8) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=H6C8) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=H6C8) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=H6C8) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=H6C8) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=H6C8) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=H6C8) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=H6C8) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=H6C8) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=H6C8) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=H6C8) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=H6C8) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=H6C8) no-repeat 0 -2256px!important}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}
\ No newline at end of file
diff --git a/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.js b/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.js
deleted file mode 100644
index 742e9e9050..0000000000
--- a/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.js
+++ /dev/null
@@ -1,928 +0,0 @@
-  /*
- * jQuery Foundation Joyride Plugin 2.1
- * http://foundation.zurb.com
- * Copyright 2013, ZURB
- * Free to use under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
-*/
-
-/*jslint unparam: true, browser: true, indent: 2 */
-
-;(function ($, window, undefined) {
-  'use strict';
-
-  var defaults = {
-      'version'              : '2.1',
-      'tipLocation'          : 'bottom',  // 'top' or 'bottom' in relation to parent
-      'nubPosition'          : 'auto',    // override on a per tooltip bases
-      'scroll'               : true,      // whether to scroll to tips
-      'scrollSpeed'          : 300,       // Page scrolling speed in milliseconds
-      'timer'                : 0,         // 0 = no timer , all other numbers = timer in milliseconds
-      'autoStart'            : false,     // true or false - false tour starts when restart called
-      'startTimerOnClick'    : true,      // true or false - true requires clicking the first button start the timer
-      'startOffset'          : 0,         // the index of the tooltip you want to start on (index of the li)
-      'nextButton'           : true,      // true or false to control whether a next button is used
-      'tipAnimation'         : 'fade',    // 'pop' or 'fade' in each tip
-      'pauseAfter'           : [],        // array of indexes where to pause the tour after
-      'tipAnimationFadeSpeed': 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition
-      'cookieMonster'        : false,     // true or false to control whether cookies are used
-      'cookieName'           : 'joyride', // Name the cookie you'll use
-      'cookieDomain'         : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'
-      'cookiePath'           : false,     // Set to '/' if you want the cookie for the whole website
-      'localStorage'         : false,     // true or false to control whether localstorage is used
-      'localStorageKey'      : 'joyride', // Keyname in localstorage
-      'tipContainer'         : 'body',    // Where will the tip be attached
-      'modal'                : false,     // Whether to cover page with modal during the tour
-      'expose'               : false,     // Whether to expose the elements at each step in the tour (requires modal:true)
-      'postExposeCallback'   : $.noop,    // A method to call after an element has been exposed
-      'preRideCallback'      : $.noop,    // A method to call before the tour starts (passed index, tip, and cloned exposed element)
-      'postRideCallback'     : $.noop,    // A method to call once the tour closes (canceled or complete)
-      'preStepCallback'      : $.noop,    // A method to call before each step
-      'postStepCallback'     : $.noop,    // A method to call after each step
-      'template' : { // HTML segments for tip layout
-        'link'    : '<a href="#close" class="joyride-close-tip">X</a>',
-        'timer'   : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
-        'tip'     : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',
-        'wrapper' : '<div class="joyride-content-wrapper" role="dialog"></div>',
-        'button'  : '<a href="#" class="joyride-next-tip"></a>',
-        'modal'   : '<div class="joyride-modal-bg"></div>',
-        'expose'  : '<div class="joyride-expose-wrapper"></div>',
-        'exposeCover': '<div class="joyride-expose-cover"></div>'
-      }
-    },
-
-    Modernizr = Modernizr || false,
-
-    settings = {},
-
-    methods = {
-
-      init : function (opts) {
-        return this.each(function () {
-
-          if ($.isEmptyObject(settings)) {
-            settings = $.extend(true, defaults, opts);
-
-            // non configurable settings
-            settings.document = window.document;
-            settings.$document = $(settings.document);
-            settings.$window = $(window);
-            settings.$content_el = $(this);
-            settings.$body = $(settings.tipContainer);
-            settings.body_offset = $(settings.tipContainer).position();
-            settings.$tip_content = $('> li', settings.$content_el);
-            settings.paused = false;
-            settings.attempts = 0;
-
-            settings.tipLocationPatterns = {
-              top: ['bottom'],
-              bottom: [], // bottom should not need to be repositioned
-              left: ['right', 'top', 'bottom'],
-              right: ['left', 'top', 'bottom']
-            };
-
-            // are we using jQuery 1.7+
-            methods.jquery_check();
-
-            // can we create cookies?
-            if (!$.isFunction($.cookie)) {
-              settings.cookieMonster = false;
-            }
-
-            // generate the tips and insert into dom.
-            if ( (!settings.cookieMonster || !$.cookie(settings.cookieName) ) &&
-              (!settings.localStorage || !methods.support_localstorage() || !localStorage.getItem(settings.localStorageKey) ) ) {
-
-              settings.$tip_content.each(function (index) {
-                methods.create({$li : $(this), index : index});
-              });
-
-              // show first tip
-              if(settings.autoStart)
-              {
-                if (!settings.startTimerOnClick && settings.timer > 0) {
-                  methods.show('init');
-                  methods.startTimer();
-                } else {
-                  methods.show('init');
-                }
-              }
-
-            }
-
-            settings.$document.on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
-              e.preventDefault();
-
-              if (settings.$li.next().length < 1) {
-                methods.end();
-              } else if (settings.timer > 0) {
-                clearTimeout(settings.automate);
-                methods.hide();
-                methods.show();
-                methods.startTimer();
-              } else {
-                methods.hide();
-                methods.show();
-              }
-
-            });
-
-            settings.$document.on('click.joyride', '.joyride-close-tip', function (e) {
-              e.preventDefault();
-              methods.end(true /* isAborted */);
-            });
-
-            settings.$window.on('resize.joyride', function (e) {
-              if(settings.$li){
-              if(settings.exposed && settings.exposed.length>0){
-                var $els = $(settings.exposed);
-                $els.each(function(){
-                  var $this = $(this);
-                  methods.un_expose($this);
-                  methods.expose($this);
-                });
-              }
-              if (methods.is_phone()) {
-                methods.pos_phone();
-              } else {
-                methods.pos_default();
-              }
-              }
-            });
-          } else {
-            methods.restart();
-          }
-
-        });
-      },
-
-      // call this method when you want to resume the tour
-      resume : function () {
-        methods.set_li();
-        methods.show();
-      },
-
-      nextTip: function(){
-            if (settings.$li.next().length < 1) {
-            methods.end();
-            } else if (settings.timer > 0) {
-            clearTimeout(settings.automate);
-            methods.hide();
-            methods.show();
-            methods.startTimer();
-            } else {
-            methods.hide();
-            methods.show();
-            }
-      },
-
-      tip_template : function (opts) {
-        var $blank, content, $wrapper;
-
-        opts.tip_class = opts.tip_class || '';
-
-        $blank = $(settings.template.tip).addClass(opts.tip_class);
-        content = $.trim($(opts.li).html()) +
-          methods.button_text(opts.button_text) +
-          settings.template.link +
-          methods.timer_instance(opts.index);
-
-        $wrapper = $(settings.template.wrapper);
-        if (opts.li.attr('data-aria-labelledby')) {
-          $wrapper.attr('aria-labelledby', opts.li.attr('data-aria-labelledby'))
-        }
-        if (opts.li.attr('data-aria-describedby')) {
-          $wrapper.attr('aria-describedby', opts.li.attr('data-aria-describedby'))
-        }
-        $blank.append($wrapper);
-        $blank.first().attr('data-index', opts.index);
-        $('.joyride-content-wrapper', $blank).append(content);
-
-        return $blank[0];
-      },
-
-      timer_instance : function (index) {
-        var txt;
-
-        if ((index === 0 && settings.startTimerOnClick && settings.timer > 0) || settings.timer === 0) {
-          txt = '';
-        } else {
-          txt = methods.outerHTML($(settings.template.timer)[0]);
-        }
-        return txt;
-      },
-
-      button_text : function (txt) {
-        if (settings.nextButton) {
-          txt = $.trim(txt) || 'Next';
-          txt = methods.outerHTML($(settings.template.button).append(txt)[0]);
-        } else {
-          txt = '';
-        }
-        return txt;
-      },
-
-      create : function (opts) {
-        // backwards compatibility with data-text attribute
-        var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'),
-          tipClass = opts.$li.attr('class'),
-          $tip_content = $(methods.tip_template({
-            tip_class : tipClass,
-            index : opts.index,
-            button_text : buttonText,
-            li : opts.$li
-          }));
-
-        $(settings.tipContainer).append($tip_content);
-      },
-
-      show : function (init) {
-        var opts = {}, ii, opts_arr = [], opts_len = 0, p,
-            $timer = null;
-
-        // are we paused?
-        if (settings.$li === undefined || ($.inArray(settings.$li.index(), settings.pauseAfter) === -1)) {
-
-          // don't go to the next li if the tour was paused
-          if (settings.paused) {
-            settings.paused = false;
-          } else {
-            methods.set_li(init);
-          }
-
-          settings.attempts = 0;
-
-          if (settings.$li.length && settings.$target.length > 0) {
-            if(init){ //run when we first start
-                settings.preRideCallback(settings.$li.index(), settings.$next_tip );
-                if(settings.modal){
-                    methods.show_modal();
-                }
-            }
-            settings.preStepCallback(settings.$li.index(), settings.$next_tip );
-
-            // parse options
-            opts_arr = (settings.$li.data('options') || ':').split(';');
-            opts_len = opts_arr.length;
-            for (ii = opts_len - 1; ii >= 0; ii--) {
-              p = opts_arr[ii].split(':');
-
-              if (p.length === 2) {
-                opts[$.trim(p[0])] = $.trim(p[1]);
-              }
-            }
-            settings.tipSettings = $.extend({}, settings, opts);
-            settings.tipSettings.tipLocationPattern = settings.tipLocationPatterns[settings.tipSettings.tipLocation];
-
-            if(settings.modal && settings.expose){
-              methods.expose();
-            }
-
-            // scroll if not modal
-            if (!settings.$target.is("body") && settings.scroll) {
-              methods.scroll_to();
-            }
-
-            if (methods.is_phone()) {
-              methods.pos_phone(true);
-            } else {
-              methods.pos_default(true);
-            }
-
-            $timer = $('.joyride-timer-indicator', settings.$next_tip);
-
-            if (/pop/i.test(settings.tipAnimation)) {
-
-              $timer.outerWidth(0);
-
-              if (settings.timer > 0) {
-
-                settings.$next_tip.show();
-                $timer.animate({
-                  width: $('.joyride-timer-indicator-wrap', settings.$next_tip).outerWidth()
-                }, settings.timer);
-
-              } else {
-
-                settings.$next_tip.show();
-
-              }
-
-
-            } else if (/fade/i.test(settings.tipAnimation)) {
-
-              $timer.outerWidth(0);
-
-              if (settings.timer > 0) {
-
-                settings.$next_tip.fadeIn(settings.tipAnimationFadeSpeed);
-
-                settings.$next_tip.show();
-                $timer.animate({
-                  width: $('.joyride-timer-indicator-wrap', settings.$next_tip).outerWidth()
-                }, settings.timer);
-
-              } else {
-
-                settings.$next_tip.fadeIn(settings.tipAnimationFadeSpeed);
-
-              }
-            }
-
-            settings.$current_tip = settings.$next_tip;
-            // Focus next button for keyboard users.
-            $('.joyride-next-tip', settings.$current_tip).focus();
-            methods.tabbable(settings.$current_tip);
-          // skip non-existent targets
-          } else if (settings.$li && settings.$target.length < 1) {
-
-            methods.show();
-
-          } else {
-
-            methods.end();
-
-          }
-        } else {
-
-          settings.paused = true;
-
-        }
-
-      },
-
-      // detect phones with media queries if supported.
-      is_phone : function () {
-        if (Modernizr) {
-          return Modernizr.mq('only screen and (max-width: 767px)');
-        }
-
-        return (settings.$window.width() < 767) ? true : false;
-      },
-
-      support_localstorage : function () {
-        if (Modernizr) {
-          return Modernizr.localstorage;
-        } else {
-          return !!window.localStorage;
-        }
-      },
-
-      hide : function () {
-        if(settings.modal && settings.expose){
-          methods.un_expose();
-        }
-        if(!settings.modal){
-        $('.joyride-modal-bg').hide();
-        }
-        settings.$current_tip.hide();
-        settings.postStepCallback(settings.$li.index(), settings.$current_tip);
-      },
-
-      set_li : function (init) {
-        if (init) {
-          settings.$li = settings.$tip_content.eq(settings.startOffset);
-          methods.set_next_tip();
-          settings.$current_tip = settings.$next_tip;
-        } else {
-          settings.$li = settings.$li.next();
-          methods.set_next_tip();
-        }
-
-        methods.set_target();
-      },
-
-      set_next_tip : function () {
-        settings.$next_tip = $('.joyride-tip-guide[data-index=' + settings.$li.index() + ']');
-      },
-
-      set_target : function () {
-        var cl = settings.$li.attr('data-class'),
-            id = settings.$li.attr('data-id'),
-            $sel = function () {
-              if (id) {
-                return $(settings.document.getElementById(id));
-              } else if (cl) {
-                return $('.' + cl).filter(":visible").first();
-              } else {
-                return $('body');
-              }
-            };
-
-        settings.$target = $sel();
-      },
-
-      scroll_to : function () {
-        var window_half, tipOffset;
-
-        window_half = settings.$window.height() / 2;
-        tipOffset = Math.ceil(settings.$target.offset().top - window_half + settings.$next_tip.outerHeight());
-
-        $("html, body").stop().animate({
-          scrollTop: tipOffset
-        }, settings.scrollSpeed);
-      },
-
-      paused : function () {
-        if (($.inArray((settings.$li.index() + 1), settings.pauseAfter) === -1)) {
-          return true;
-        }
-
-        return false;
-      },
-
-      destroy : function () {
-        if(!$.isEmptyObject(settings)){
-        settings.$document.off('.joyride');
-        }
-
-        $(window).off('.joyride');
-        $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');
-        $('.joyride-tip-guide, .joyride-modal-bg').remove();
-        clearTimeout(settings.automate);
-        settings = {};
-      },
-
-      restart : function () {
-        if(!settings.autoStart)
-        {
-          if (!settings.startTimerOnClick && settings.timer > 0) {
-            methods.show('init');
-            methods.startTimer();
-          } else {
-            methods.show('init');
-          }
-          settings.autoStart = true;
-        }
-        else
-        {
-        methods.hide();
-        settings.$li = undefined;
-        methods.show('init');
-        }
-      },
-
-      pos_default : function (init) {
-        var half_fold = Math.ceil(settings.$window.height() / 2),
-            tip_position = settings.$next_tip.offset(),
-            $nub = $('.joyride-nub', settings.$next_tip),
-            nub_width = Math.ceil($nub.outerWidth() / 2),
-            nub_height = Math.ceil($nub.outerHeight() / 2),
-            toggle = init || false;
-
-        // tip must not be "display: none" to calculate position
-        if (toggle) {
-          settings.$next_tip.css('visibility', 'hidden');
-          settings.$next_tip.show();
-        }
-
-        if (!settings.$target.is("body")) {
-            var
-              topAdjustment = settings.tipSettings.tipAdjustmentY ? parseInt(settings.tipSettings.tipAdjustmentY) : 0,
-              leftAdjustment = settings.tipSettings.tipAdjustmentX ? parseInt(settings.tipSettings.tipAdjustmentX) : 0;
-
-            if (methods.bottom()) {
-              settings.$next_tip.css({
-                top: (settings.$target.offset().top + nub_height + settings.$target.outerHeight() + topAdjustment),
-                left: settings.$target.offset().left + leftAdjustment});
-
-              if (/right/i.test(settings.tipSettings.nubPosition)) {
-                settings.$next_tip.css('left', settings.$target.offset().left - settings.$next_tip.outerWidth() + settings.$target.outerWidth());
-              }
-
-              methods.nub_position($nub, settings.tipSettings.nubPosition, 'top');
-
-            } else if (methods.top()) {
-
-              settings.$next_tip.css({
-                top: (settings.$target.offset().top - settings.$next_tip.outerHeight() - nub_height + topAdjustment),
-                left: settings.$target.offset().left + leftAdjustment});
-
-              methods.nub_position($nub, settings.tipSettings.nubPosition, 'bottom');
-
-            } else if (methods.right()) {
-
-              settings.$next_tip.css({
-                top: settings.$target.offset().top + topAdjustment,
-                left: (settings.$target.outerWidth() + settings.$target.offset().left + nub_width) + leftAdjustment});
-
-              methods.nub_position($nub, settings.tipSettings.nubPosition, 'left');
-
-            } else if (methods.left()) {
-
-              settings.$next_tip.css({
-                top: settings.$target.offset().top + topAdjustment,
-                left: (settings.$target.offset().left - settings.$next_tip.outerWidth() - nub_width) + leftAdjustment});
-
-              methods.nub_position($nub, settings.tipSettings.nubPosition, 'right');
-
-            }
-
-            if (!methods.visible(methods.corners(settings.$next_tip)) && settings.attempts < settings.tipSettings.tipLocationPattern.length) {
-
-              $nub.removeClass('bottom')
-                .removeClass('top')
-                .removeClass('right')
-                .removeClass('left');
-
-              settings.tipSettings.tipLocation = settings.tipSettings.tipLocationPattern[settings.attempts];
-
-              settings.attempts++;
-
-              methods.pos_default(true);
-
-            }
-
-        } else if (settings.$li.length) {
-
-          methods.pos_modal($nub);
-
-        }
-
-        if (toggle) {
-          settings.$next_tip.hide();
-          settings.$next_tip.css('visibility', 'visible');
-        }
-
-      },
-
-      pos_phone : function (init) {
-        var tip_height = settings.$next_tip.outerHeight(),
-            tip_offset = settings.$next_tip.offset(),
-            target_height = settings.$target.outerHeight(),
-            $nub = $('.joyride-nub', settings.$next_tip),
-            nub_height = Math.ceil($nub.outerHeight() / 2),
-            toggle = init || false;
-
-        $nub.removeClass('bottom')
-          .removeClass('top')
-          .removeClass('right')
-          .removeClass('left');
-
-        if (toggle) {
-          settings.$next_tip.css('visibility', 'hidden');
-          settings.$next_tip.show();
-        }
-
-        if (!settings.$target.is("body")) {
-
-          if (methods.top()) {
-
-              settings.$next_tip.offset({top: settings.$target.offset().top - tip_height - nub_height});
-              $nub.addClass('bottom');
-
-          } else {
-
-            settings.$next_tip.offset({top: settings.$target.offset().top + target_height + nub_height});
-            $nub.addClass('top');
-
-          }
-
-        } else if (settings.$li.length) {
-
-          methods.pos_modal($nub);
-
-        }
-
-        if (toggle) {
-          settings.$next_tip.hide();
-          settings.$next_tip.css('visibility', 'visible');
-        }
-      },
-
-      pos_modal : function ($nub) {
-        methods.center();
-        $nub.hide();
-
-        methods.show_modal();
-
-      },
-
-      show_modal : function() {
-        if ($('.joyride-modal-bg').length < 1) {
-            $('body').append(settings.template.modal).show();
-        }
-
-        if (/pop/i.test(settings.tipAnimation)) {
-          $('.joyride-modal-bg').show();
-        } else {
-          $('.joyride-modal-bg').fadeIn(settings.tipAnimationFadeSpeed);
-        }
-      },
-
-      expose: function(){
-        var expose,
-          exposeCover,
-          el,
-          origCSS,
-          randId = 'expose-'+Math.floor(Math.random()*10000);
-        if (arguments.length>0 && arguments[0] instanceof $){
-          el = arguments[0];
-        } else if(settings.$target && !settings.$target.is("body")){
-          el = settings.$target;
-        }  else {
-          return false;
-        }
-        if(el.length < 1){
-          if(window.console){
-            console.error('element not valid', el);
-          }
-          return false;
-        }
-        expose = $(settings.template.expose);
-        settings.$body.append(expose);
-        expose.css({
-          top: el.offset().top,
-          left: el.offset().left,
-          width: el.outerWidth(true),
-          height: el.outerHeight(true)
-        });
-        exposeCover = $(settings.template.exposeCover);
-        origCSS = {
-                  zIndex: el.css('z-index'),
-                  position: el.css('position')
-                  };
-        el.css('z-index',expose.css('z-index')*1+1);
-        if(origCSS.position == 'static'){
-          el.css('position','relative');
-        }
-        el.data('expose-css',origCSS);
-        exposeCover.css({
-          top: el.offset().top,
-          left: el.offset().left,
-          width: el.outerWidth(true),
-          height: el.outerHeight(true)
-        });
-        settings.$body.append(exposeCover);
-        expose.addClass(randId);
-        exposeCover.addClass(randId);
-        if(settings.tipSettings['exposeClass']){
-          expose.addClass(settings.tipSettings['exposeClass']);
-          exposeCover.addClass(settings.tipSettings['exposeClass']);
-        }
-        el.data('expose', randId);
-        settings.postExposeCallback(settings.$li.index(), settings.$next_tip, el);
-        methods.add_exposed(el);
-      },
-
-      un_expose: function(){
-        var exposeId,
-          el,
-          expose ,
-          origCSS,
-          clearAll = false;
-        if (arguments.length>0 && arguments[0] instanceof $){
-          el = arguments[0];
-        } else if(settings.$target && !settings.$target.is("body")){
-          el = settings.$target;
-        }  else {
-          return false;
-        }
-        if(el.length < 1){
-          if(window.console){
-            console.error('element not valid', el);
-          }
-          return false;
-        }
-        exposeId = el.data('expose');
-        expose = $('.'+exposeId);
-        if(arguments.length>1){
-          clearAll = arguments[1];
-        }
-        if(clearAll === true){
-          $('.joyride-expose-wrapper,.joyride-expose-cover').remove();
-        } else {
-          expose.remove();
-        }
-        origCSS = el.data('expose-css');
-        if(origCSS.zIndex == 'auto'){
-          el.css('z-index', '');
-        } else {
-          el.css('z-index',origCSS.zIndex);
-        }
-        if(origCSS.position != el.css('position')){
-          if(origCSS.position == 'static'){// this is default, no need to set it.
-            el.css('position', '');
-          } else {
-            el.css('position',origCSS.position);
-          }
-        }
-        el.removeData('expose');
-        el.removeData('expose-z-index');
-        methods.remove_exposed(el);
-      },
-
-      add_exposed: function(el){
-        settings.exposed = settings.exposed || [];
-        if(el instanceof $){
-          settings.exposed.push(el[0]);
-        } else if(typeof el == 'string'){
-          settings.exposed.push(el);
-        }
-      },
-
-      remove_exposed: function(el){
-        var search;
-        if(el instanceof $){
-          search = el[0]
-        } else if (typeof el == 'string'){
-          search = el;
-        }
-        settings.exposed = settings.exposed || [];
-        for(var i=0; i<settings.exposed.length; i++){
-          if(settings.exposed[i] == search){
-            settings.exposed.splice(i,1);
-            return;
-          }
-        }
-      },
-
-      center : function () {
-        var $w = settings.$window;
-
-        settings.$next_tip.css({
-          top : ((($w.height() - settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),
-          left : ((($w.width() - settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())
-        });
-
-        return true;
-      },
-
-      bottom : function () {
-        return /bottom/i.test(settings.tipSettings.tipLocation);
-      },
-
-      top : function () {
-        return /top/i.test(settings.tipSettings.tipLocation);
-      },
-
-      right : function () {
-        return /right/i.test(settings.tipSettings.tipLocation);
-      },
-
-      left : function () {
-        return /left/i.test(settings.tipSettings.tipLocation);
-      },
-
-      corners : function (el) {
-        var w = settings.$window,
-            window_half = w.height() / 2,
-            tipOffset = Math.ceil(settings.$target.offset().top - window_half + settings.$next_tip.outerHeight()),//using this to calculate since scroll may not have finished yet.
-            right = w.width() + w.scrollLeft(),
-            offsetBottom =  w.height() + tipOffset,
-            bottom = w.height() + w.scrollTop(),
-            top = w.scrollTop();
-
-            if(tipOffset < top){
-              if (tipOffset <0 ){
-                top = 0;
-              } else {
-                top = tipOffset;
-              }
-            }
-
-            if(offsetBottom > bottom){
-              bottom = offsetBottom;
-            }
-
-        return [
-          el.offset().top < top,
-          right < el.offset().left + el.outerWidth(),
-          bottom < el.offset().top + el.outerHeight(),
-          w.scrollLeft() > el.offset().left
-        ];
-      },
-
-      visible : function (hidden_corners) {
-        var i = hidden_corners.length;
-
-        while (i--) {
-          if (hidden_corners[i]) return false;
-        }
-
-        return true;
-      },
-
-      nub_position : function (nub, pos, def) {
-        if (pos === 'auto') {
-          nub.addClass(def);
-        } else {
-          nub.addClass(pos);
-        }
-      },
-
-      startTimer : function () {
-        if (settings.$li.length) {
-          settings.automate = setTimeout(function () {
-            methods.hide();
-            methods.show();
-            methods.startTimer();
-          }, settings.timer);
-        } else {
-          clearTimeout(settings.automate);
-        }
-      },
-
-      end : function (isAborted) {
-        isAborted = isAborted || false;
-
-        // Unbind resize events.
-        if (isAborted) {
-          settings.$window.off('resize.joyride');
-        }
-
-        if (settings.cookieMonster) {
-          $.cookie(settings.cookieName, 'ridden', { expires: 365, domain: settings.cookieDomain, path: settings.cookiePath });
-        }
-
-        if (settings.localStorage) {
-          localStorage.setItem(settings.localStorageKey, true);
-        }
-
-        if (settings.timer > 0) {
-          clearTimeout(settings.automate);
-        }
-        if(settings.modal && settings.expose){
-          methods.un_expose();
-        }
-        if (settings.$current_tip) {
-          settings.$current_tip.hide();
-        }
-        if (settings.$li) {
-          settings.postStepCallback(settings.$li.index(), settings.$current_tip, isAborted);
-          settings.postRideCallback(settings.$li.index(), settings.$current_tip, isAborted);
-        }
-        $('.joyride-modal-bg').hide();
-      },
-
-      jquery_check : function () {
-        // define on() and off() for older jQuery
-        if (!$.isFunction($.fn.on)) {
-
-          $.fn.on = function (types, sel, fn) {
-
-            return this.delegate(sel, types, fn);
-
-          };
-
-          $.fn.off = function (types, sel, fn) {
-
-            return this.undelegate(sel, types, fn);
-
-          };
-
-          return false;
-        }
-
-        return true;
-      },
-
-      outerHTML : function (el) {
-        // support FireFox < 11
-        return el.outerHTML || new XMLSerializer().serializeToString(el);
-      },
-
-      version : function () {
-        return settings.version;
-      },
-
-      tabbable : function (el) {
-        $(el).on('keydown', function( event ) {
-          if (!event.isDefaultPrevented() && event.keyCode &&
-              // Escape key.
-              event.keyCode === 27 ) {
-            event.preventDefault();
-            methods.end(true /* isAborted */);
-            return;
-          }
-
-          // Prevent tabbing out of tour items.
-          if ( event.keyCode !== 9 ) {
-            return;
-          }
-          var tabbables = $(el).find(":tabbable"),
-            first = tabbables.filter(":first"),
-            last  = tabbables.filter(":last");
-          if ( event.target === last[0] && !event.shiftKey ) {
-            first.focus( 1 );
-            event.preventDefault();
-          } else if ( event.target === first[0] && event.shiftKey ) {
-            last.focus( 1 );
-            event.preventDefault();
-          }
-        });
-      }
-
-    };
-
-  $.fn.joyride = function (method) {
-    if (methods[method]) {
-      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
-    } else if (typeof method === 'object' || !method) {
-      return methods.init.apply(this, arguments);
-    } else {
-      $.error('Method ' +  method + ' does not exist on jQuery.joyride');
-    }
-  };
-
-}(jQuery, this));
diff --git a/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.min.js b/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.min.js
new file mode 100644
index 0000000000..e6d6961eb6
--- /dev/null
+++ b/core/assets/vendor/jquery-joyride/jquery.joyride-2.1.min.js
@@ -0,0 +1,2 @@
+/* jQuery Foundation Joyride Plugin 2.1 | Copyright 2012, ZURB | www.opensource.org/licenses/mit-license.php */
+(function(e,t,n){"use strict";var r={version:"2.0.3",tipLocation:"bottom",nubPosition:"auto",scroll:!0,scrollSpeed:300,timer:0,autoStart:!1,startTimerOnClick:!0,startOffset:0,nextButton:!0,tipAnimation:"fade",pauseAfter:[],tipAnimationFadeSpeed:300,cookieMonster:!1,cookieName:"joyride",cookieDomain:!1,cookiePath:!1,localStorage:!1,localStorageKey:"joyride",tipContainer:"body",modal:!1,expose:!1,postExposeCallback:e.noop,preRideCallback:e.noop,postRideCallback:e.noop,preStepCallback:e.noop,postStepCallback:e.noop,template:{link:'<a href="#close" class="joyride-close-tip">X</a>',timer:'<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',tip:'<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',wrapper:'<div class="joyride-content-wrapper" role="dialog"></div>',button:'<a href="#" class="joyride-next-tip"></a>',modal:'<div class="joyride-modal-bg"></div>',expose:'<div class="joyride-expose-wrapper"></div>',exposeCover:'<div class="joyride-expose-cover"></div>'}},i=i||!1,s={},o={init:function(n){return this.each(function(){e.isEmptyObject(s)?(s=e.extend(!0,r,n),s.document=t.document,s.$document=e(s.document),s.$window=e(t),s.$content_el=e(this),s.$body=e(s.tipContainer),s.body_offset=e(s.tipContainer).position(),s.$tip_content=e("> li",s.$content_el),s.paused=!1,s.attempts=0,s.tipLocationPatterns={top:["bottom"],bottom:[],left:["right","top","bottom"],right:["left","top","bottom"]},o.jquery_check(),e.isFunction(e.cookie)||(s.cookieMonster=!1),(!s.cookieMonster||!e.cookie(s.cookieName))&&(!s.localStorage||!o.support_localstorage()||!localStorage.getItem(s.localStorageKey))&&(s.$tip_content.each(function(t){o.create({$li:e(this),index:t})}),s.autoStart&&(!s.startTimerOnClick&&s.timer>0?(o.show("init"),o.startTimer()):o.show("init"))),s.$document.on("click.joyride",".joyride-next-tip, .joyride-modal-bg",function(e){e.preventDefault(),s.$li.next().length<1?o.end():s.timer>0?(clearTimeout(s.automate),o.hide(),o.show(),o.startTimer()):(o.hide(),o.show())}),s.$document.on("click.joyride",".joyride-close-tip",function(e){e.preventDefault(),o.end()}),s.$window.bind("resize.joyride",function(t){if(s.$li){if(s.exposed&&s.exposed.length>0){var n=e(s.exposed);n.each(function(){var t=e(this);o.un_expose(t),o.expose(t)})}o.is_phone()?o.pos_phone():o.pos_default()}})):o.restart()})},resume:function(){o.set_li(),o.show()},nextTip:function(){s.$li.next().length<1?o.end():s.timer>0?(clearTimeout(s.automate),o.hide(),o.show(),o.startTimer()):(o.hide(),o.show())},tip_template:function(t){var n,r,i;return t.tip_class=t.tip_class||"",n=e(s.template.tip).addClass(t.tip_class),r=e.trim(e(t.li).html())+o.button_text(t.button_text)+s.template.link+o.timer_instance(t.index),i=e(s.template.wrapper),t.li.attr("data-aria-labelledby")&&i.attr("aria-labelledby",t.li.attr("data-aria-labelledby")),t.li.attr("data-aria-describedby")&&i.attr("aria-describedby",t.li.attr("data-aria-describedby")),n.append(i),n.first().attr("data-index",t.index),e(".joyride-content-wrapper",n).append(r),n[0]},timer_instance:function(t){var n;return t===0&&s.startTimerOnClick&&s.timer>0||s.timer===0?n="":n=o.outerHTML(e(s.template.timer)[0]),n},button_text:function(t){return s.nextButton?(t=e.trim(t)||"Next",t=o.outerHTML(e(s.template.button).append(t)[0])):t="",t},create:function(t){var n=t.$li.attr("data-button")||t.$li.attr("data-text"),r=t.$li.attr("class"),i=e(o.tip_template({tip_class:r,index:t.index,button_text:n,li:t.$li}));e(s.tipContainer).append(i)},show:function(t){var r={},i,u=[],a=0,f,l=null;if(s.$li===n||e.inArray(s.$li.index(),s.pauseAfter)===-1){s.paused?s.paused=!1:o.set_li(t),s.attempts=0;if(s.$li.length&&s.$target.length>0){t&&(s.preRideCallback(s.$li.index(),s.$next_tip),s.modal&&o.show_modal()),s.preStepCallback(s.$li.index(),s.$next_tip),u=(s.$li.data("options")||":").split(";"),a=u.length;for(i=a-1;i>=0;i--)f=u[i].split(":"),f.length===2&&(r[e.trim(f[0])]=e.trim(f[1]));s.tipSettings=e.extend({},s,r),s.tipSettings.tipLocationPattern=s.tipLocationPatterns[s.tipSettings.tipLocation],s.modal&&s.expose&&o.expose(),!/body/i.test(s.$target.selector)&&s.scroll&&o.scroll_to(),o.is_phone()?o.pos_phone(!0):o.pos_default(!0),l=e(".joyride-timer-indicator",s.$next_tip),/pop/i.test(s.tipAnimation)?(l.outerWidth(0),s.timer>0?(s.$next_tip.show(),l.animate({width:e(".joyride-timer-indicator-wrap",s.$next_tip).outerWidth()},s.timer)):s.$next_tip.show()):/fade/i.test(s.tipAnimation)&&(l.outerWidth(0),s.timer>0?(s.$next_tip.fadeIn(s.tipAnimationFadeSpeed),s.$next_tip.show(),l.animate({width:e(".joyride-timer-indicator-wrap",s.$next_tip).outerWidth()},s.timer)):s.$next_tip.fadeIn(s.tipAnimationFadeSpeed)),s.$current_tip=s.$next_tip,e(".joyride-next-tip",s.$current_tip).focus(),o.tabbable(s.$current_tip)}else s.$li&&s.$target.length<1?o.show():o.end()}else s.paused=!0},is_phone:function(){return i?i.mq("only screen and (max-width: 767px)"):s.$window.width()<767?!0:!1},support_localstorage:function(){return i?i.localstorage:!!t.localStorage},hide:function(){s.modal&&s.expose&&o.un_expose(),s.modal||e(".joyride-modal-bg").hide(),s.$current_tip.hide(),s.postStepCallback(s.$li.index(),s.$current_tip)},set_li:function(e){e?(s.$li=s.$tip_content.eq(s.startOffset),o.set_next_tip(),s.$current_tip=s.$next_tip):(s.$li=s.$li.next(),o.set_next_tip()),o.set_target()},set_next_tip:function(){s.$next_tip=e(".joyride-tip-guide[data-index="+s.$li.index()+"]")},set_target:function(){var t=s.$li.attr("data-class"),n=s.$li.attr("data-id"),r=function(){return n?e(s.document.getElementById(n)):t?e("."+t).filter(":visible").first():e("body")};s.$target=r()},scroll_to:function(){var t,n;t=s.$window.height()/2,n=Math.ceil(s.$target.offset().top-t+s.$next_tip.outerHeight()),e("html, body").stop().animate({scrollTop:n},s.scrollSpeed)},paused:function(){return e.inArray(s.$li.index()+1,s.pauseAfter)===-1?!0:!1},destroy:function(){e.isEmptyObject(s)||s.$document.off(".joyride"),e(t).off(".joyride"),e(".joyride-close-tip, .joyride-next-tip, .joyride-modal-bg").off(".joyride"),e(".joyride-tip-guide, .joyride-modal-bg").remove(),clearTimeout(s.automate),s={}},restart:function(){s.autoStart?(o.hide(),s.$li=n,o.show("init")):(!s.startTimerOnClick&&s.timer>0?(o.show("init"),o.startTimer()):o.show("init"),s.autoStart=!0)},pos_default:function(t){var n=Math.ceil(s.$window.height()/2),r=s.$next_tip.offset(),i=e(".joyride-nub",s.$next_tip),u=Math.ceil(i.outerWidth()/2),a=Math.ceil(i.outerHeight()/2),f=t||!1;f&&(s.$next_tip.css("visibility","hidden"),s.$next_tip.show());if(!/body/i.test(s.$target.selector)){var l=s.tipSettings.tipAdjustmentY?parseInt(s.tipSettings.tipAdjustmentY):0,c=s.tipSettings.tipAdjustmentX?parseInt(s.tipSettings.tipAdjustmentX):0;o.bottom()?(s.$next_tip.css({top:s.$target.offset().top+a+s.$target.outerHeight()+l,left:s.$target.offset().left+c}),/right/i.test(s.tipSettings.nubPosition)&&s.$next_tip.css("left",s.$target.offset().left-s.$next_tip.outerWidth()+s.$target.outerWidth()),o.nub_position(i,s.tipSettings.nubPosition,"top")):o.top()?(s.$next_tip.css({top:s.$target.offset().top-s.$next_tip.outerHeight()-a+l,left:s.$target.offset().left+c}),o.nub_position(i,s.tipSettings.nubPosition,"bottom")):o.right()?(s.$next_tip.css({top:s.$target.offset().top+l,left:s.$target.outerWidth()+s.$target.offset().left+u+c}),o.nub_position(i,s.tipSettings.nubPosition,"left")):o.left()&&(s.$next_tip.css({top:s.$target.offset().top+l,left:s.$target.offset().left-s.$next_tip.outerWidth()-u+c}),o.nub_position(i,s.tipSettings.nubPosition,"right")),!o.visible(o.corners(s.$next_tip))&&s.attempts<s.tipSettings.tipLocationPattern.length&&(i.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),s.tipSettings.tipLocation=s.tipSettings.tipLocationPattern[s.attempts],s.attempts++,o.pos_default(!0))}else s.$li.length&&o.pos_modal(i);f&&(s.$next_tip.hide(),s.$next_tip.css("visibility","visible"))},pos_phone:function(t){var n=s.$next_tip.outerHeight(),r=s.$next_tip.offset(),i=s.$target.outerHeight(),u=e(".joyride-nub",s.$next_tip),a=Math.ceil(u.outerHeight()/2),f=t||!1;u.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),f&&(s.$next_tip.css("visibility","hidden"),s.$next_tip.show()),/body/i.test(s.$target.selector)?s.$li.length&&o.pos_modal(u):o.top()?(s.$next_tip.offset({top:s.$target.offset().top-n-a}),u.addClass("bottom")):(s.$next_tip.offset({top:s.$target.offset().top+i+a}),u.addClass("top")),f&&(s.$next_tip.hide(),s.$next_tip.css("visibility","visible"))},pos_modal:function(e){o.center(),e.hide(),o.show_modal()},show_modal:function(){e(".joyride-modal-bg").length<1&&e("body").append(s.template.modal).show(),/pop/i.test(s.tipAnimation)?e(".joyride-modal-bg").show():e(".joyride-modal-bg").fadeIn(s.tipAnimationFadeSpeed)},expose:function(){var n,r,i,u,a="expose-"+Math.floor(Math.random()*1e4);if(arguments.length>0&&arguments[0]instanceof e)i=arguments[0];else{if(!s.$target||!!/body/i.test(s.$target.selector))return!1;i=s.$target}if(i.length<1)return t.console&&console.error("element not valid",i),!1;n=e(s.template.expose),s.$body.append(n),n.css({top:i.offset().top,left:i.offset().left,width:i.outerWidth(!0),height:i.outerHeight(!0)}),r=e(s.template.exposeCover),u={zIndex:i.css("z-index"),position:i.css("position")},i.css("z-index",n.css("z-index")*1+1),u.position=="static"&&i.css("position","relative"),i.data("expose-css",u),r.css({top:i.offset().top,left:i.offset().left,width:i.outerWidth(!0),height:i.outerHeight(!0)}),s.$body.append(r),n.addClass(a),r.addClass(a),s.tipSettings.exposeClass&&(n.addClass(s.tipSettings.exposeClass),r.addClass(s.tipSettings.exposeClass)),i.data("expose",a),s.postExposeCallback(s.$li.index(),s.$next_tip,i),o.add_exposed(i)},un_expose:function(){var n,r,i,u,a=!1;if(arguments.length>0&&arguments[0]instanceof e)r=arguments[0];else{if(!s.$target||!!/body/i.test(s.$target.selector))return!1;r=s.$target}if(r.length<1)return t.console&&console.error("element not valid",r),!1;n=r.data("expose"),i=e("."+n),arguments.length>1&&(a=arguments[1]),a===!0?e(".joyride-expose-wrapper,.joyride-expose-cover").remove():i.remove(),u=r.data("expose-css"),u.zIndex=="auto"?r.css("z-index",""):r.css("z-index",u.zIndex),u.position!=r.css("position")&&(u.position=="static"?r.css("position",""):r.css("position",u.position)),r.removeData("expose"),r.removeData("expose-z-index"),o.remove_exposed(r)},add_exposed:function(t){s.exposed=s.exposed||[],t instanceof e?s.exposed.push(t[0]):typeof t=="string"&&s.exposed.push(t)},remove_exposed:function(t){var n;t instanceof e?n=t[0]:typeof t=="string"&&(n=t),s.exposed=s.exposed||[];for(var r=0;r<s.exposed.length;r++)if(s.exposed[r]==n){s.exposed.splice(r,1);return}},center:function(){var e=s.$window;return s.$next_tip.css({top:(e.height()-s.$next_tip.outerHeight())/2+e.scrollTop(),left:(e.width()-s.$next_tip.outerWidth())/2+e.scrollLeft()}),!0},bottom:function(){return/bottom/i.test(s.tipSettings.tipLocation)},top:function(){return/top/i.test(s.tipSettings.tipLocation)},right:function(){return/right/i.test(s.tipSettings.tipLocation)},left:function(){return/left/i.test(s.tipSettings.tipLocation)},corners:function(e){var t=s.$window,n=t.height()/2,r=Math.ceil(s.$target.offset().top-n+s.$next_tip.outerHeight()),i=t.width()+t.scrollLeft(),o=t.height()+r,u=t.height()+t.scrollTop(),a=t.scrollTop();return r<a&&(r<0?a=0:a=r),o>u&&(u=o),[e.offset().top<a,i<e.offset().left+e.outerWidth(),u<e.offset().top+e.outerHeight(),t.scrollLeft()>e.offset().left]},visible:function(e){var t=e.length;while(t--)if(e[t])return!1;return!0},nub_position:function(e,t,n){t==="auto"?e.addClass(n):e.addClass(t)},startTimer:function(){s.$li.length?s.automate=setTimeout(function(){o.hide(),o.show(),o.startTimer()},s.timer):clearTimeout(s.automate)},end:function(){s.cookieMonster&&e.cookie(s.cookieName,"ridden",{expires:365,domain:s.cookieDomain,path:s.cookiePath}),s.localStorage&&localStorage.setItem(s.localStorageKey,!0),s.timer>0&&clearTimeout(s.automate),s.modal&&s.expose&&o.un_expose(),s.$current_tip&&s.$current_tip.hide(),s.$li&&(s.postStepCallback(s.$li.index(),s.$current_tip),s.postRideCallback(s.$li.index(),s.$current_tip)),e(".joyride-modal-bg").hide()},jquery_check:function(){return e.isFunction(e.fn.on)?!0:(e.fn.on=function(e,t,n){return this.delegate(t,e,n)},e.fn.off=function(e,t,n){return this.undelegate(t,e,n)},!1)},outerHTML:function(e){return e.outerHTML||(new XMLSerializer).serializeToString(e)},version:function(){return s.version},tabbable:function(t){e(t).on("keydown",function(n){if(!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===27){n.preventDefault(),o.end();return}if(n.keyCode!==9)return;var r=e(t).find(":tabbable"),i=r.filter(":first"),s=r.filter(":last");n.target===s[0]&&!n.shiftKey?(i.focus(1),n.preventDefault()):n.target===i[0]&&n.shiftKey&&(s.focus(1),n.preventDefault())})}};e.fn.joyride=function(t){if(o[t])return o[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return o.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.joyride")}})(jQuery,this);
diff --git a/core/composer.json b/core/composer.json
index bda527f99d..57f34b1b83 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -123,6 +123,7 @@
         "drupal/migrate_drupal_ui": "self.version",
         "drupal/node": "self.version",
         "drupal/options": "self.version",
+        "drupal/outside_in": "self.version",
         "drupal/page_cache": "self.version",
         "drupal/path": "self.version",
         "drupal/quickedit": "self.version",
@@ -131,7 +132,6 @@
         "drupal/rest": "self.version",
         "drupal/search": "self.version",
         "drupal/serialization": "self.version",
-        "drupal/settings_tray": "self.version",
         "drupal/seven": "self.version",
         "drupal/shortcut": "self.version",
         "drupal/simpletest": "self.version",
diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 160b526ebd..92782406ca 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -780,24 +780,11 @@ text_format:
       # The text format should not be translated as part of the string
       # translation system, so this is not marked as translatable.
 
-# Base schema for all entity reference selection handler schemas.
+# Schema for the configuration of the Entity reference selection plugins.
+
 entity_reference_selection:
   type: mapping
-  label: 'Entity reference selection handler settings'
-  mapping:
-    target_type:
-      type: string
-      label: 'Type of item to reference'
-
-# Schema for all entity reference selection handlers that are not providing a
-# specific schema.
-entity_reference_selection.*:
-  type: entity_reference_selection
-
-# Schema for the entity reference 'default' selection handler settings.
-entity_reference_selection.default:
-  type: entity_reference_selection
-  label: 'Default selection handler settings'
+  label: 'Entity reference selection plugin configuration'
   mapping:
     target_bundles:
       type: sequence
@@ -805,7 +792,7 @@ entity_reference_selection.default:
       nullable: true
       sequence:
         type: string
-        label: 'Bundle'
+        label: 'Type'
     sort:
       type: mapping
       label: 'Sort settings'
@@ -823,7 +810,5 @@ entity_reference_selection.default:
       type: string
       label: 'Bundle assigned to the auto-created entities.'
 
-# Schema for all entity reference 'default:*' selection handlers that are not
-# providing a specific schema.
-entity_reference_selection.default:*:
-  type: entity_reference_selection.default
+entity_reference_selection.*:
+  type: entity_reference_selection
diff --git a/core/core.api.php b/core/core.api.php
index f537882a5a..161ddb9146 100644
--- a/core/core.api.php
+++ b/core/core.api.php
@@ -606,30 +606,6 @@
  *  $settings['cache']['default'] = 'cache.custom';
  * @endcode
  *
- * For cache bins that are stored in the database, the number of rows is limited
- * to 5000 by default. This can be changed for all database cache bins. For
- * example, to instead limit the number of rows to 50000:
- * @code
- * $settings['database_cache_max_rows']['default'] = 50000;
- * @endcode
- *
- * Or per bin (in this example we allow infinite entries):
- * @code
- * $settings['database_cache_max_rows']['bins']['dynamic_page_cache'] = -1;
- * @endcode
- *
- * For monitoring reasons it might be useful to figure out the amount of data
- * stored in tables. The following SQL snippet can be used for that:
- * @code
- * SELECT table_name AS `Table`, table_rows AS 'Num. of Rows',
- * ROUND(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM
- * information_schema.TABLES WHERE table_schema = '***DATABASE_NAME***' AND
- * table_name LIKE 'cache_%'  ORDER BY (data_length + index_length) DESC
- * LIMIT 10;
- * @encode
- *
- * @see \Drupal\Core\Cache\DatabaseBackend
- *
  * Finally, you can chain multiple cache backends together, see
  * \Drupal\Core\Cache\ChainedFastBackend and \Drupal\Core\Cache\BackendChain.
  *
diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 011c713cb7..85c956228e 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -24,10 +24,10 @@ classList:
 
 ckeditor:
   remote: https://github.com/ckeditor/ckeditor-dev
-  version: "4.7.2"
+  version: "4.7.1"
   license:
     name: GNU-GPL-2.0-or-later
-    url: https://github.com/ckeditor/ckeditor-dev/blob/4.7.2/LICENSE.md
+    url: https://github.com/ckeditor/ckeditor-dev/blob/4.7.1/LICENSE.md
     gpl-compatible: true
   js:
     assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true }
@@ -391,18 +391,13 @@ jquery.form:
 
 jquery.joyride:
   remote: https://github.com/zurb/joyride
-  # We rely on a fix (commit c2b3866) that occurred after 2.1.0 was released.
-  # @see https://www.drupal.org/node/2898808.
-  # @todo Update to 2.1.1 or later when that's released.
-  # Version is set at 2.1.0.1 allowing version_compare to consider this lower
-  # than 2.1.1 however greater than 2.1.0
-  version: "2.1.0.1"
+  version: "v2.1.0"
   license:
     name: MIT
     url: https://github.com/zurb/joyride/blob/v2.1.0/README.markdown
     gpl-compatible: true
   js:
-    assets/vendor/jquery-joyride/jquery.joyride-2.1.js: { }
+    assets/vendor/jquery-joyride/jquery.joyride-2.1.min.js: { minified: true }
   dependencies:
     - core/jquery
     - core/jquery.cookie
diff --git a/core/core.link_relation_types.yml b/core/core.link_relation_types.yml
index d4ffce3f2f..b2a09553a2 100644
--- a/core/core.link_relation_types.yml
+++ b/core/core.link_relation_types.yml
@@ -3,9 +3,6 @@
 add-form:
   uri: https://drupal.org/link-relations/add-form
   description: A form where a resource of this type can be created.
-add-page:
-  uri: https://drupal.org/link-relations/add-page
-  description: A page where a resource of this type and related types can be created.
 delete-form:
   uri: https://drupal.org/link-relations/delete-form
   description: A form where a resource of this type can be deleted.
diff --git a/core/core.services.yml b/core/core.services.yml
index 21a3e590ba..76088786cd 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -192,7 +192,7 @@ services:
       - [setContainer, ['@service_container']]
   cache.backend.database:
     class: Drupal\Core\Cache\DatabaseBackendFactory
-    arguments: ['@database', '@cache_tags.invalidator.checksum', '@settings']
+    arguments: ['@database', '@cache_tags.invalidator.checksum']
   cache.backend.apcu:
     class: Drupal\Core\Cache\ApcuBackendFactory
     arguments: ['@app.root', '@site.path', '@cache_tags.invalidator.checksum']
@@ -1152,7 +1152,7 @@ services:
     arguments: ['@state', '@current_user']
   maintenance_mode_subscriber:
     class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber
-    arguments: ['@maintenance_mode', '@config.factory', '@string_translation', '@url_generator', '@current_user', '@bare_html_page_renderer', '@messenger']
+    arguments: ['@maintenance_mode', '@config.factory', '@string_translation', '@url_generator', '@current_user', '@bare_html_page_renderer']
     tags:
       - { name: event_subscriber }
   path_subscriber:
@@ -1660,6 +1660,3 @@ services:
     class: Drupal\Core\EventSubscriber\RssResponseRelativeUrlFilter
     tags:
       - { name: event_subscriber }
-  messenger:
-    class: Drupal\Core\Messenger\LegacyMessenger
-    arguments: ['@page_cache_kill_switch']
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 5a1cfbe7c0..52f574212a 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -11,6 +11,8 @@
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
 use Drupal\Core\Logger\RfcLogLevel;
+use Drupal\Core\Render\Markup;
+use Drupal\Component\Render\MarkupInterface;
 use Drupal\Core\Test\TestDatabase;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Site\Settings;
@@ -457,10 +459,28 @@ function watchdog_exception($type, Exception $exception, $message = NULL, $varia
  * @see status-messages.html.twig
  */
 function drupal_set_message($message = NULL, $type = 'status', $repeat = FALSE) {
-  /* @var \Drupal\Core\Messenger\MessengerInterface $messenger */
-  $messenger = \Drupal::service('messenger');
-  $messenger->addMessage($message, $type, $repeat);
-  return $messenger->all();
+  if (isset($message)) {
+    if (!isset($_SESSION['messages'][$type])) {
+      $_SESSION['messages'][$type] = [];
+    }
+
+    // Convert strings which are safe to the simplest Markup objects.
+    if (!($message instanceof Markup) && $message instanceof MarkupInterface) {
+      $message = Markup::create((string) $message);
+    }
+
+    // Do not use strict type checking so that equivalent string and
+    // MarkupInterface objects are detected.
+    if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
+      $_SESSION['messages'][$type][] = $message;
+    }
+
+    // Mark this page as being uncacheable.
+    \Drupal::service('page_cache_kill_switch')->trigger();
+  }
+
+  // Messages not set when DB connection fails.
+  return isset($_SESSION['messages']) ? $_SESSION['messages'] : NULL;
 }
 
 /**
@@ -489,12 +509,10 @@ function drupal_set_message($message = NULL, $type = 'status', $repeat = FALSE)
  * @see status-messages.html.twig
  */
 function drupal_get_messages($type = NULL, $clear_queue = TRUE) {
-  /** @var \Drupal\Core\Messenger\MessengerInterface $messenger */
-  $messenger = \Drupal::hasService('messenger') ? \Drupal::service('messenger') : NULL;
-  if ($messenger && ($messages = $messenger->all())) {
+  if ($messages = drupal_set_message()) {
     if ($type) {
       if ($clear_queue) {
-        $messenger->deleteByType($type);
+        unset($_SESSION['messages'][$type]);
       }
       if (isset($messages[$type])) {
         return [$type => $messages[$type]];
@@ -502,7 +520,7 @@ function drupal_get_messages($type = NULL, $clear_queue = TRUE) {
     }
     else {
       if ($clear_queue) {
-        $messenger->deleteAll();
+        unset($_SESSION['messages']);
       }
       return $messages;
     }
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index 284d1835e9..40e290338d 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -164,8 +164,7 @@ function _drupal_log_error($error, $fatal = FALSE) {
   // installer.
   if (\Drupal::hasService('logger.factory')) {
     try {
-      // Provide the PHP backtrace to logger implementations.
-      \Drupal::logger('php')->log($error['severity_level'], '%type: @message in %function (line %line of %file) @backtrace_string.', $error + ['backtrace' => $backtrace]);
+      \Drupal::logger('php')->log($error['severity_level'], '%type: @message in %function (line %line of %file) @backtrace_string.', $error);
     }
     catch (\Exception $e) {
       // We can't log, for example because the database connection is not
diff --git a/core/includes/file.inc b/core/includes/file.inc
index 228515df6b..3fcb38a4e4 100644
--- a/core/includes/file.inc
+++ b/core/includes/file.inc
@@ -923,6 +923,7 @@ function file_unmanaged_delete_recursive($path, $callback = NULL) {
 }
 
 
+
 /**
  * Moves an uploaded file to a new location.
  *
diff --git a/core/includes/form.inc b/core/includes/form.inc
index d99dca282a..9d253351e2 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -787,8 +787,8 @@ function batch_set($batch_definition) {
  *   is omitted and no redirect response was returned by the 'finished'
  *   callback. Any query arguments will be automatically persisted.
  * @param \Drupal\Core\Url $url
- *   (optional) URL of the batch processing page. Should only be used for
- *   separate scripts like update.php.
+ *   (optional - should only be used for separate scripts like update.php)
+ *   URL of the batch processing page.
  * @param $redirect_callback
  *   (optional) Specify a function to be called to redirect to the progressive
  *   processing page.
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 0d6c25e6b1..cfc0497bbc 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -754,7 +754,8 @@ function install_tasks($install_state) {
       'run' => $install_state['settings_verified'] ? INSTALL_TASK_SKIP : INSTALL_TASK_RUN_IF_NOT_COMPLETED,
       'function' => 'Drupal\Core\Installer\Form\SiteSettingsForm',
     ],
-    'install_write_profile' => [],
+    'install_write_profile' => [
+    ],
     'install_verify_database_ready' => [
       'run' => $install_state['database_ready'] ? INSTALL_TASK_SKIP : INSTALL_TASK_RUN_IF_NOT_COMPLETED,
     ],
@@ -769,8 +770,10 @@ function install_tasks($install_state) {
       'display_name' => t('Install site'),
       'type' => 'batch',
     ],
-    'install_profile_themes' => [],
-    'install_install_profile' => [],
+    'install_profile_themes' => [
+    ],
+    'install_install_profile' => [
+    ],
     'install_import_translations' => [
       'display_name' => t('Set up translations'),
       'display' => $needs_translations,
@@ -810,7 +813,8 @@ function install_tasks($install_state) {
       'type' => 'batch',
       'run' => $needs_translations ? INSTALL_TASK_RUN_IF_NOT_COMPLETED : INSTALL_TASK_SKIP,
     ],
-    'install_finished' => [],
+    'install_finished' => [
+    ],
   ];
 
   // Allow the installation profile to modify the full list of tasks.
@@ -1806,11 +1810,10 @@ function _install_module_batch($module, $module_name, &$context) {
  * @param string $server_pattern
  *   Server access pattern (to replace language code, version number, etc. in).
  *
- * @return array|null
+ * @return array
  *   Requirements compliance array. If the translation was downloaded
  *   successfully then an empty array is returned. Otherwise the requirements
- *   error with detailed information. NULL if the file already exists for this
- *   language code.
+ *   error with detailed information.
  */
 function install_check_translations($langcode, $server_pattern) {
   $requirements = [];
diff --git a/core/includes/install.inc b/core/includes/install.inc
index 5c0abcab8e..c5b93b58a6 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -114,10 +114,9 @@ function drupal_install_profile_distribution_name() {
 /**
  * Loads the installation profile, extracting its defined version.
  *
- * @return string
- *   Distribution version defined in the profile's .info.yml file.
- *   Defaults to \Drupal::VERSION if no version is explicitly provided by the
- *   installation profile.
+ * @return string Distribution version defined in the profile's .info.yml file.
+ *   Defaults to \Drupal::VERSION if no version is explicitly provided
+ *   by the installation profile.
  *
  * @see install_profile_info()
  */
diff --git a/core/lib/Drupal/Component/Annotation/Reflection/MockFileFinder.php b/core/lib/Drupal/Component/Annotation/Reflection/MockFileFinder.php
index ecfefc371e..9f585f9119 100644
--- a/core/lib/Drupal/Component/Annotation/Reflection/MockFileFinder.php
+++ b/core/lib/Drupal/Component/Annotation/Reflection/MockFileFinder.php
@@ -30,7 +30,7 @@ public function findFile($class) {
   /**
    * Creates new mock file finder objects.
    */
-  public static function create($filename) {
+  static public function create($filename) {
     $object = new static();
     $object->filename = $filename;
     return $object;
diff --git a/core/lib/Drupal/Component/Annotation/composer.json b/core/lib/Drupal/Component/Annotation/composer.json
index e7a2847dcf..ff33d29b06 100644
--- a/core/lib/Drupal/Component/Annotation/composer.json
+++ b/core/lib/Drupal/Component/Annotation/composer.json
@@ -8,7 +8,7 @@
     "php": ">=5.5.9",
     "doctrine/common": "2.5.*",
     "doctrine/annotations": "1.2.*",
-    "drupal/core-file-cache": "^8.2",
+    "drupal/core-fileCache": "^8.2",
     "drupal/core-plugin": "^8.2",
     "drupal/core-utility": "^8.2"
   },
diff --git a/core/lib/Drupal/Component/Assertion/Inspector.php b/core/lib/Drupal/Component/Assertion/Inspector.php
index 17cd434cfe..9b04e33064 100644
--- a/core/lib/Drupal/Component/Assertion/Inspector.php
+++ b/core/lib/Drupal/Component/Assertion/Inspector.php
@@ -205,9 +205,9 @@ public static function assertAllStrictArrays($traversable) {
    * @return bool
    *   TRUE if $traversable can be traversed and all members have all keys.
    */
-  public static function assertAllHaveKey($traversable) {
+  public static function assertAllHaveKey() {
     $args = func_get_args();
-    unset($args[0]);
+    $traversable = array_shift($args);
 
     if (static::assertTraversable($traversable)) {
       foreach ($traversable as $member) {
@@ -396,9 +396,9 @@ public static function assertAllRegularExpressionMatch($pattern, $traversable) {
    *   TRUE if $traversable can be traversed and all members are objects with
    *   at least one of the listed classes or interfaces.
    */
-  public static function assertAllObjects($traversable) {
+  public static function assertAllObjects() {
     $args = func_get_args();
-    unset($args[0]);
+    $traversable = array_shift($args);
 
     if (static::assertTraversable($traversable)) {
       foreach ($traversable as $member) {
diff --git a/core/lib/Drupal/Component/Datetime/DateTimePlus.php b/core/lib/Drupal/Component/Datetime/DateTimePlus.php
index 961b3f7825..457b73e847 100644
--- a/core/lib/Drupal/Component/Datetime/DateTimePlus.php
+++ b/core/lib/Drupal/Component/Datetime/DateTimePlus.php
@@ -321,12 +321,12 @@ public function __call($method, $args) {
    * Returns the difference between two DateTimePlus objects.
    *
    * @param \Drupal\Component\Datetime\DateTimePlus|\DateTime $datetime2
-   *   The date to compare to.
+   *    The date to compare to.
    * @param bool $absolute
-   *   Should the interval be forced to be positive?
+   *    Should the interval be forced to be positive?
    *
    * @return \DateInterval
-   *   A DateInterval object representing the difference between the two dates.
+   *    A DateInterval object representing the difference between the two dates.
    *
    * @throws \BadMethodCallException
    *    If the input isn't a DateTime or DateTimePlus object.
@@ -432,6 +432,7 @@ protected function prepareFormat($format) {
   }
 
 
+
   /**
    * Examines getLastErrors() to see what errors to report.
    *
@@ -630,9 +631,8 @@ public static function datePad($value, $size = 2) {
    *   - timezone: (optional) String timezone name. Defaults to the timezone
    *     of the date object.
    *
-   * @return string|null
-   *   The formatted value of the date or NULL if there were construction
-   *   errors.
+   * @return string
+   *   The formatted value of the date.
    */
   public function format($format, $settings = []) {
 
@@ -658,15 +658,4 @@ public function format($format, $settings = []) {
     return $value;
   }
 
-  /**
-   * Sets the default time for an object built from date-only data.
-   *
-   * The default time for a date without time can be anything, so long as it is
-   * consistently applied. If we use noon, dates in most timezones will have the
-   * same value for in both the local timezone and UTC.
-   */
-  public function setDefaultDateTime() {
-    $this->dateTimeObject->setTime(12, 0, 0);
-  }
-
 }
diff --git a/core/lib/Drupal/Component/Diff/Diff.php b/core/lib/Drupal/Component/Diff/Diff.php
index 8135b15825..d9042bcca7 100644
--- a/core/lib/Drupal/Component/Diff/Diff.php
+++ b/core/lib/Drupal/Component/Diff/Diff.php
@@ -27,11 +27,9 @@ class Diff {
    * Constructor.
    * Computes diff between sequences of strings.
    *
-   * @param array $from_lines
-   *   An array of strings.
-   *   (Typically these are lines from a file.)
-   * @param array $to_lines
-   *   An array of strings.
+   * @param $from_lines array An array of strings.
+   *      (Typically these are lines from a file.)
+   * @param $to_lines array An array of strings.
    */
   public function __construct($from_lines, $to_lines) {
     $eng = new DiffEngine();
@@ -46,8 +44,8 @@ public function __construct($from_lines, $to_lines) {
    *
    *  $diff = new Diff($lines1, $lines2);
    *  $rev = $diff->reverse();
-   * @return object
-   *   A Diff object representing the inverse of the original diff.
+   * @return object A Diff object representing the inverse of the
+   *          original diff.
    */
   public function reverse() {
     $rev = $this;
diff --git a/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php b/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
index b56aa99aa7..7885c6f00e 100644
--- a/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
+++ b/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
@@ -195,7 +195,7 @@ protected function _diag($xoff, $xlim, $yoff, $ylim, $nchunks) {
       }
 
       $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
-      for (; $x < $x1; $x++) {
+      for ( ; $x < $x1; $x++) {
         $line = $flip ? $this->yv[$x] : $this->xv[$x];
         if (empty($ymatches[$line])) {
           continue;
@@ -302,7 +302,8 @@ protected function _compareseq($xoff, $xlim, $yoff, $ylim) {
       //$nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
       //$nchunks = max(2, min(8, (int)$nchunks));
       $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
-      list($lcs, $seps) = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
+      list($lcs, $seps)
+      = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
     }
 
     if ($lcs == 0) {
diff --git a/core/lib/Drupal/Component/Diff/MappedDiff.php b/core/lib/Drupal/Component/Diff/MappedDiff.php
index 466e8f09a6..d49cc0df62 100644
--- a/core/lib/Drupal/Component/Diff/MappedDiff.php
+++ b/core/lib/Drupal/Component/Diff/MappedDiff.php
@@ -19,17 +19,16 @@ class MappedDiff extends Diff {
    * case-insensitive diffs, or diffs which ignore
    * changes in white-space.
    *
-   * @param array $from_lines
-   *   An array of strings.
+   * @param $from_lines array An array of strings.
    *   (Typically these are lines from a file.)
-   * @param array $to_lines
-   *   An array of strings.
-   * @param array $mapped_from_lines
-   *   This array should have the same size number of elements as $from_lines.
-   *   The elements in $mapped_from_lines and $mapped_to_lines are what is
-   *   actually compared when computing the diff.
-   * @param array $mapped_to_lines
-   *   This array should have the same number of elements as $to_lines.
+   * @param $to_lines array An array of strings.
+   * @param $mapped_from_lines array This array should
+   *   have the same size number of elements as $from_lines.
+   *   The elements in $mapped_from_lines and
+   *   $mapped_to_lines are what is actually compared
+   *   when computing the diff.
+   * @param $mapped_to_lines array This array should
+   *   have the same number of elements as $to_lines.
    */
   public function __construct($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
 
diff --git a/core/lib/Drupal/Component/Diff/composer.json b/core/lib/Drupal/Component/Diff/composer.json
index 517f0d7b7d..cc584532b6 100644
--- a/core/lib/Drupal/Component/Diff/composer.json
+++ b/core/lib/Drupal/Component/Diff/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0+",
   "require": {
     "php": ">=5.5.9",
-    "drupal/core-utility": "^8.2"
+    "drupal/utility": "^8.2"
   },
   "autoload": {
     "psr-4": {
diff --git a/core/lib/Drupal/Component/Discovery/composer.json b/core/lib/Drupal/Component/Discovery/composer.json
index 7a267c29b5..588480e857 100644
--- a/core/lib/Drupal/Component/Discovery/composer.json
+++ b/core/lib/Drupal/Component/Discovery/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0+",
   "require": {
     "php": ">=5.5.9",
-    "drupal/core-file-cache": "^8.2",
+    "drupal/core-filecache": "^8.2",
     "drupal/core-serialization": "^8.2"
   },
   "autoload": {
diff --git a/core/lib/Drupal/Component/Gettext/PoItem.php b/core/lib/Drupal/Component/Gettext/PoItem.php
index c1c3877ed5..1f05bbd59d 100644
--- a/core/lib/Drupal/Component/Gettext/PoItem.php
+++ b/core/lib/Drupal/Component/Gettext/PoItem.php
@@ -104,7 +104,7 @@ public function getSource() {
    * Set the source string or the array of strings if the translation has
    * plurals.
    *
-   * @param string|array $source
+   * @param string or array $source
    */
   public function setSource($source) {
     $this->_source = $source;
@@ -124,7 +124,7 @@ public function getTranslation() {
    * Set the translation string or the array of strings if the translation has
    * plurals.
    *
-   * @param string|array $translation
+   * @param string or array $translation
    */
   public function setTranslation($translation) {
     $this->_translation = $translation;
diff --git a/core/lib/Drupal/Component/Gettext/PoStreamWriter.php b/core/lib/Drupal/Component/Gettext/PoStreamWriter.php
index 5419b210aa..f5ffc85f97 100644
--- a/core/lib/Drupal/Component/Gettext/PoStreamWriter.php
+++ b/core/lib/Drupal/Component/Gettext/PoStreamWriter.php
@@ -104,7 +104,7 @@ public function close() {
    *   If writing the data is not possible.
    */
   private function write($data) {
-    $result = fwrite($this->_fd, $data);
+    $result = fputs($this->_fd, $data);
     if ($result === FALSE) {
       throw new Exception('Unable to write data: ' . substr($data, 0, 20));
     }
diff --git a/core/lib/Drupal/Component/HttpFoundation/SecuredRedirectResponse.php b/core/lib/Drupal/Component/HttpFoundation/SecuredRedirectResponse.php
index 931f816062..58a5a57d79 100644
--- a/core/lib/Drupal/Component/HttpFoundation/SecuredRedirectResponse.php
+++ b/core/lib/Drupal/Component/HttpFoundation/SecuredRedirectResponse.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Component\HttpFoundation;
 
-use Symfony\Component\HttpFoundation\RedirectResponse;
+use \Symfony\Component\HttpFoundation\RedirectResponse;
 
 /**
  * Provides a common base class for safe redirects.
diff --git a/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php b/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
index fb9194c98a..735341d6b1 100644
--- a/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
+++ b/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
@@ -44,7 +44,7 @@ public function load($name);
    * @param string $name
    *   The virtual file name. Can be a relative path.
    * @param string $code
-   *   The PHP code to be saved.
+   *    The PHP code to be saved.
    *
    * @return bool
    *   TRUE if the save succeeded, FALSE if it failed.
diff --git a/core/lib/Drupal/Component/Plugin/ContextAwarePluginInterface.php b/core/lib/Drupal/Component/Plugin/ContextAwarePluginInterface.php
index 90ee661201..37d9078a05 100644
--- a/core/lib/Drupal/Component/Plugin/ContextAwarePluginInterface.php
+++ b/core/lib/Drupal/Component/Plugin/ContextAwarePluginInterface.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Component\Plugin;
 
-use Drupal\Component\Plugin\Context\ContextInterface;
+use \Drupal\Component\Plugin\Context\ContextInterface;
 
 /**
  * Interface for defining context aware plugins.
diff --git a/core/lib/Drupal/Component/Plugin/Exception/ContextException.php b/core/lib/Drupal/Component/Plugin/Exception/ContextException.php
index 2861a0bacf..949cb1a988 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/ContextException.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/ContextException.php
@@ -5,4 +5,4 @@
 /**
  * An exception class to be thrown for context plugin exceptions.
  */
-class ContextException extends \Exception implements ExceptionInterface {}
+class ContextException extends \Exception implements ExceptionInterface { }
diff --git a/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php b/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php
index 96f43dbeac..503ed96ecc 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php
@@ -5,4 +5,4 @@
 /**
  * Exception interface for all exceptions thrown by the Plugin component.
  */
-interface ExceptionInterface {}
+interface ExceptionInterface { }
diff --git a/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php b/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php
index 1543a6b04d..bf2b335fd3 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php
@@ -2,10 +2,10 @@
 
 namespace Drupal\Component\Plugin\Exception;
 
-use BadMethodCallException;
+use \BadMethodCallException;
 
 /**
  * Exception thrown when a decorator's _call() method is triggered, but the
  * decorated object does not contain the requested method.
  */
-class InvalidDecoratedMethod extends BadMethodCallException implements ExceptionInterface {}
+class InvalidDecoratedMethod extends BadMethodCallException implements ExceptionInterface { }
diff --git a/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php b/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php
index 54bed15b41..d559d712fc 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php
@@ -5,4 +5,4 @@
 /**
  * Exception to be thrown if a plugin tries to use an invalid deriver.
  */
-class InvalidDeriverException extends PluginException {}
+class InvalidDeriverException extends PluginException { }
diff --git a/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php b/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php
index 5a1c15234a..628269dfad 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php
@@ -8,4 +8,4 @@
  * Extended interface for exceptions thrown specifically by the Mapper subsystem
  * within the Plugin component.
  */
-interface MapperExceptionInterface extends ExceptionInterface {}
+interface MapperExceptionInterface extends ExceptionInterface { }
diff --git a/core/lib/Drupal/Component/Plugin/Exception/PluginException.php b/core/lib/Drupal/Component/Plugin/Exception/PluginException.php
index 0551125b66..49a12cabc6 100644
--- a/core/lib/Drupal/Component/Plugin/Exception/PluginException.php
+++ b/core/lib/Drupal/Component/Plugin/Exception/PluginException.php
@@ -6,4 +6,4 @@
  * Generic Plugin exception class to be thrown when no more specific class
  * is applicable.
  */
-class PluginException extends \Exception implements ExceptionInterface {}
+class PluginException extends \Exception implements ExceptionInterface { }
diff --git a/core/lib/Drupal/Component/Utility/NestedArray.php b/core/lib/Drupal/Component/Utility/NestedArray.php
index 36df7c7b1f..c11d6a6582 100644
--- a/core/lib/Drupal/Component/Utility/NestedArray.php
+++ b/core/lib/Drupal/Component/Utility/NestedArray.php
@@ -328,7 +328,7 @@ public static function mergeDeepArray(array $arrays, $preserve_integer_keys = FA
         // Renumber integer keys as array_merge_recursive() does unless
         // $preserve_integer_keys is set to TRUE. Note that PHP automatically
         // converts array keys that are integer strings (e.g., '1') to integers.
-        if (is_int($key) && !$preserve_integer_keys) {
+        if (is_integer($key) && !$preserve_integer_keys) {
           $result[] = $value;
         }
         // Recurse when both values are arrays.
diff --git a/core/lib/Drupal/Component/Utility/Number.php b/core/lib/Drupal/Component/Utility/Number.php
index 838c33c454..39143d93aa 100644
--- a/core/lib/Drupal/Component/Utility/Number.php
+++ b/core/lib/Drupal/Component/Utility/Number.php
@@ -50,7 +50,7 @@ public static function validStep($value, $step, $offset = 0.0) {
     // can't be represented with single precision floats are acceptable. The
     // fractional part of a float has 24 bits. That means remainders smaller than
     // $step * 2^-24 are acceptable.
-    $computed_acceptable_error = (double) ($step / pow(2.0, 24));
+    $computed_acceptable_error = (double)($step / pow(2.0, 24));
 
     return $computed_acceptable_error >= $remainder || $remainder >= ($step - $computed_acceptable_error);
   }
diff --git a/core/lib/Drupal/Component/Utility/Random.php b/core/lib/Drupal/Component/Utility/Random.php
index cf3483509d..3c98b83b63 100644
--- a/core/lib/Drupal/Component/Utility/Random.php
+++ b/core/lib/Drupal/Component/Utility/Random.php
@@ -143,9 +143,7 @@ public function word($length) {
 
     $vowels = ["a", "e", "i", "o", "u"];
     $cons = ["b", "c", "d", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "u", "v", "w", "tr",
-      "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", "st", "sp", "sw", "pr",
-      "sl", "cl", "sh",
-    ];
+      "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", "st", "sp", "sw", "pr", "sl", "cl", "sh"];
 
     $num_vowels = count($vowels);
     $num_cons = count($cons);
@@ -221,8 +219,7 @@ public function sentences($min_word_count, $capitalize = FALSE) {
       "utrum", "uxor", "valde", "valetudo", "validus", "vel", "velit",
       "veniam", "venio", "vereor", "vero", "verto", "vicis", "vindico",
       "virtus", "voco", "volutpat", "vulpes", "vulputate", "wisi", "ymo",
-      "zelus",
-    ];
+      "zelus"];
     $dictionary_flipped = array_flip($dictionary);
     $greeking = '';
 
diff --git a/core/lib/Drupal/Component/Utility/Timer.php b/core/lib/Drupal/Component/Utility/Timer.php
index 4fc36e43ae..b8dc026976 100644
--- a/core/lib/Drupal/Component/Utility/Timer.php
+++ b/core/lib/Drupal/Component/Utility/Timer.php
@@ -20,7 +20,7 @@ class Timer {
    * @param $name
    *   The name of the timer.
    */
-  public static function start($name) {
+  static public function start($name) {
     static::$timers[$name]['start'] = microtime(TRUE);
     static::$timers[$name]['count'] = isset(static::$timers[$name]['count']) ? ++static::$timers[$name]['count'] : 1;
   }
@@ -34,7 +34,7 @@ public static function start($name) {
    * @return int
    *   The current timer value in ms.
    */
-  public static function read($name) {
+  static public function read($name) {
     if (isset(static::$timers[$name]['start'])) {
       $stop = microtime(TRUE);
       $diff = round(($stop - static::$timers[$name]['start']) * 1000, 2);
@@ -57,7 +57,7 @@ public static function read($name) {
    *   A timer array. The array contains the number of times the timer has been
    *   started and stopped (count) and the accumulated timer value in ms (time).
    */
-  public static function stop($name) {
+  static public function stop($name) {
     if (isset(static::$timers[$name]['start'])) {
       $stop = microtime(TRUE);
       $diff = round(($stop - static::$timers[$name]['start']) * 1000, 2);
diff --git a/core/lib/Drupal/Component/Utility/UrlHelper.php b/core/lib/Drupal/Component/Utility/UrlHelper.php
index 372803590d..3127eaba64 100644
--- a/core/lib/Drupal/Component/Utility/UrlHelper.php
+++ b/core/lib/Drupal/Component/Utility/UrlHelper.php
@@ -148,11 +148,6 @@ public static function parse($url) {
     $scheme_delimiter_position = strpos($url, '://');
     $query_delimiter_position = strpos($url, '?');
     if ($scheme_delimiter_position !== FALSE && ($query_delimiter_position === FALSE || $scheme_delimiter_position < $query_delimiter_position)) {
-      // Split off the fragment, if any.
-      if (strpos($url, '#') !== FALSE) {
-        list($url, $options['fragment']) = explode('#', $url, 2);
-      }
-
       // Split off everything before the query string into 'path'.
       $parts = explode('?', $url);
 
@@ -163,7 +158,12 @@ public static function parse($url) {
       }
       // If there is a query string, transform it into keyed query parameters.
       if (isset($parts[1])) {
-        parse_str($parts[1], $options['query']);
+        $query_parts = explode('#', $parts[1]);
+        parse_str($query_parts[0], $options['query']);
+        // Take over the fragment, if there is any.
+        if (isset($query_parts[1])) {
+          $options['fragment'] = $query_parts[1];
+        }
       }
     }
     // Internal URLs.
diff --git a/core/lib/Drupal/Core/Access/AccessResult.php b/core/lib/Drupal/Core/Access/AccessResult.php
index f4962ec596..1cd6b8bacd 100644
--- a/core/lib/Drupal/Core/Access/AccessResult.php
+++ b/core/lib/Drupal/Core/Access/AccessResult.php
@@ -87,16 +87,13 @@ public static function allowedIf($condition) {
    *
    * @param bool $condition
    *   The condition to evaluate.
-   * @param string|null $reason
-   *   (optional) The reason why access is forbidden. Intended for developers,
-   *   hence not translatable
    *
    * @return \Drupal\Core\Access\AccessResult
    *   If $condition is TRUE, isForbidden() will be TRUE, otherwise isNeutral()
    *   will be TRUE.
    */
-  public static function forbiddenIf($condition, $reason = NULL) {
-    return $condition ? static::forbidden($reason) : static::neutral();
+  public static function forbiddenIf($condition) {
+    return $condition ? static::forbidden() : static::neutral();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Access/AccessResultForbidden.php b/core/lib/Drupal/Core/Access/AccessResultForbidden.php
index 3edae61af3..2dc913761c 100644
--- a/core/lib/Drupal/Core/Access/AccessResultForbidden.php
+++ b/core/lib/Drupal/Core/Access/AccessResultForbidden.php
@@ -18,7 +18,7 @@ class AccessResultForbidden extends AccessResult implements AccessResultReasonIn
    * Constructs a new AccessResultForbidden instance.
    *
    * @param null|string $reason
-   *   (optional) A message to provide details about this access result.
+   *   (optional) a message to provide details about this access result
    */
   public function __construct($reason = NULL) {
     $this->reason = $reason;
diff --git a/core/lib/Drupal/Core/Access/AccessResultNeutral.php b/core/lib/Drupal/Core/Access/AccessResultNeutral.php
index 5839eae7e1..2fb75eb501 100644
--- a/core/lib/Drupal/Core/Access/AccessResultNeutral.php
+++ b/core/lib/Drupal/Core/Access/AccessResultNeutral.php
@@ -18,7 +18,7 @@ class AccessResultNeutral extends AccessResult implements AccessResultReasonInte
    * Constructs a new AccessResultNeutral instance.
    *
    * @param null|string $reason
-   *   (optional) A message to provide details about this access result
+   *   (optional) a message to provide details about this access result
    */
   public function __construct($reason = NULL) {
     $this->reason = $reason;
diff --git a/core/lib/Drupal/Core/Batch/BatchStorage.php b/core/lib/Drupal/Core/Batch/BatchStorage.php
index c25ec7af1f..82f5b65767 100644
--- a/core/lib/Drupal/Core/Batch/BatchStorage.php
+++ b/core/lib/Drupal/Core/Batch/BatchStorage.php
@@ -200,8 +200,6 @@ protected function catchException(\Exception $e) {
 
   /**
    * Defines the schema for the batch table.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     return [
diff --git a/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php b/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php
index 995f4b72e0..2234ffd170 100644
--- a/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php
+++ b/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php
@@ -12,4 +12,4 @@
  *
  * @ingroup block_api
  */
-interface MessagesBlockPluginInterface extends BlockPluginInterface {}
+interface MessagesBlockPluginInterface extends BlockPluginInterface { }
diff --git a/core/lib/Drupal/Core/Cache/Cache.php b/core/lib/Drupal/Core/Cache/Cache.php
index 9257aab3f6..f02a4e7cd7 100644
--- a/core/lib/Drupal/Core/Cache/Cache.php
+++ b/core/lib/Drupal/Core/Cache/Cache.php
@@ -20,9 +20,9 @@ class Cache {
    * Merges arrays of cache contexts and removes duplicates.
    *
    * @param array $a
-   *   Cache contexts array to merge.
+   *    Cache contexts array to merge.
    * @param array $b
-   *   Cache contexts array to merge.
+   *    Cache contexts array to merge.
    *
    * @return string[]
    *   The merged array of cache contexts.
@@ -46,9 +46,9 @@ public static function mergeContexts(array $a = [], array $b = []) {
    * they're constituted from.
    *
    * @param array $a
-   *   Cache tags array to merge.
+   *    Cache tags array to merge.
    * @param array $b
-   *   Cache tags array to merge.
+   *    Cache tags array to merge.
    *
    * @return string[]
    *   The merged array of cache tags.
@@ -67,9 +67,9 @@ public static function mergeTags(array $a = [], array $b = []) {
    * Ensures infinite max-age (Cache::PERMANENT) is taken into account.
    *
    * @param int $a
-   *   Max age value to merge.
+   *    Max age value to merge.
    * @param int $b
-   *   Max age value to merge.
+   *    Max age value to merge.
    *
    * @return int
    *   The minimum max-age value.
diff --git a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
index 852305f8f1..a8ce88890a 100644
--- a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
+++ b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
@@ -91,7 +91,7 @@ public function getMultiple(&$cids, $allow_invalid = FALSE);
    *   identify objects used to build the cache item, which should trigger
    *   cache invalidation when updated. For example if a cached item represents
    *   a node, both the node ID and the author's user ID might be passed in as
-   *   tags. For example ['node:123', 'node:456', 'user:789'].
+   *   tags. For example array('node' => array(123), 'user' => array(92)).
    *
    * @see \Drupal\Core\Cache\CacheBackendInterface::get()
    * @see \Drupal\Core\Cache\CacheBackendInterface::getMultiple()
diff --git a/core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php b/core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php
index 71db8e64c7..0a9ac0a86e 100644
--- a/core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php
+++ b/core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php
@@ -25,28 +25,11 @@ public static function getLabel() {
    */
   public function getContext($header = NULL) {
     if ($header === NULL) {
-      $headers = $this->requestStack->getCurrentRequest()->headers->all();
-      // Order headers by name to have less cache variations.
-      ksort($headers);
-      $result = '';
-      foreach ($headers as $name => $value) {
-        if ($result) {
-          $result .= '&';
-        }
-        // Sort values to minimize cache variations.
-        sort($value);
-        $result .= $name . '=' . implode(',', $value);
-      }
-      return $result;
+      return $this->requestStack->getCurrentRequest()->headers->all();
     }
-    elseif ($this->requestStack->getCurrentRequest()->headers->has($header)) {
-      $value = $this->requestStack->getCurrentRequest()->headers->get($header);
-      if ($value !== '') {
-        return $value;
-      }
-      return '?valueless?';
+    else {
+      return $this->requestStack->getCurrentRequest()->headers->get($header);
     }
-    return '';
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
index 747186b9b7..d53c51c2fc 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
@@ -16,30 +16,6 @@
  */
 class DatabaseBackend implements CacheBackendInterface {
 
-  /**
-   * The default maximum number of rows that this cache bin table can store.
-   *
-   * This maximum is introduced to ensure that the database is not filled with
-   * hundred of thousand of cache entries with gigabytes in size.
-   *
-   * Read about how to change it in the @link cache Cache API topic. @endlink
-   */
-  const DEFAULT_MAX_ROWS = 5000;
-
-  /**
-   * -1 means infinite allows numbers of rows for the cache backend.
-   */
-  const MAXIMUM_NONE = -1;
-
-  /**
-   * The maximum number of rows that this cache bin table is allowed to store.
-   *
-   * @see ::MAXIMUM_NONE
-   *
-   * @var int
-   */
-  protected $maxRows;
-
   /**
    * @var string
    */
@@ -69,18 +45,14 @@ class DatabaseBackend implements CacheBackendInterface {
    *   The cache tags checksum provider.
    * @param string $bin
    *   The cache bin for which the object is created.
-   * @param int $max_rows
-   *   (optional) The maximum number of rows that are allowed in this cache bin
-   *   table.
    */
-  public function __construct(Connection $connection, CacheTagsChecksumInterface $checksum_provider, $bin, $max_rows = NULL) {
+  public function __construct(Connection $connection, CacheTagsChecksumInterface $checksum_provider, $bin) {
     // All cache tables should be prefixed with 'cache_'.
     $bin = 'cache_' . $bin;
 
     $this->bin = $bin;
     $this->connection = $connection;
     $this->checksumProvider = $checksum_provider;
-    $this->maxRows = $max_rows === NULL ? static::DEFAULT_MAX_ROWS : $max_rows;
   }
 
   /**
@@ -354,22 +326,6 @@ public function invalidateAll() {
    */
   public function garbageCollection() {
     try {
-      // Bounded size cache bin, using FIFO.
-      if ($this->maxRows !== static::MAXIMUM_NONE) {
-        $first_invalid_create_time = $this->connection->select($this->bin)
-          ->fields($this->bin, ['created'])
-          ->orderBy("{$this->bin}.created", 'DESC')
-          ->range($this->maxRows, $this->maxRows + 1)
-          ->execute()
-          ->fetchField();
-
-        if ($first_invalid_create_time) {
-          $this->connection->delete($this->bin)
-            ->condition('created', $first_invalid_create_time, '<=')
-            ->execute();
-        }
-      }
-
       $this->connection->delete($this->bin)
         ->condition('expire', Cache::PERMANENT, '<>')
         ->condition('expire', REQUEST_TIME, '<')
@@ -461,8 +417,6 @@ protected function normalizeCid($cid) {
 
   /**
    * Defines the schema for the {cache_*} bin tables.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     $schema = [
@@ -518,20 +472,10 @@ public function schemaDefinition() {
       ],
       'indexes' => [
         'expire' => ['expire'],
-        'created' => ['created'],
       ],
       'primary key' => ['cid'],
     ];
     return $schema;
   }
 
-  /**
-   * The maximum number of rows that this cache bin table is allowed to store.
-   *
-   * @return int
-   */
-  public function getMaxRows() {
-    return $this->maxRows;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php b/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php
index b86390e196..8aa018ec45 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php
@@ -3,7 +3,6 @@
 namespace Drupal\Core\Cache;
 
 use Drupal\Core\Database\Connection;
-use Drupal\Core\Site\Settings;
 
 class DatabaseBackendFactory implements CacheFactoryInterface {
 
@@ -21,13 +20,6 @@ class DatabaseBackendFactory implements CacheFactoryInterface {
    */
   protected $checksumProvider;
 
-  /**
-   * The settings array.
-   *
-   * @var \Drupal\Core\Site\Settings
-   */
-  protected $settings;
-
   /**
    * Constructs the DatabaseBackendFactory object.
    *
@@ -35,15 +27,10 @@ class DatabaseBackendFactory implements CacheFactoryInterface {
    *   Database connection
    * @param \Drupal\Core\Cache\CacheTagsChecksumInterface $checksum_provider
    *   The cache tags checksum provider.
-   * @param \Drupal\Core\Site\Settings $settings
-   *   (optional) The settings array.
-   *
-   * @throws \BadMethodCallException
    */
-  public function __construct(Connection $connection, CacheTagsChecksumInterface $checksum_provider, Settings $settings = NULL) {
+  public function __construct(Connection $connection, CacheTagsChecksumInterface $checksum_provider) {
     $this->connection = $connection;
     $this->checksumProvider = $checksum_provider;
-    $this->settings = $settings ?: Settings::getInstance();
   }
 
   /**
@@ -56,35 +43,7 @@ public function __construct(Connection $connection, CacheTagsChecksumInterface $
    *   The cache backend object for the specified cache bin.
    */
   public function get($bin) {
-    $max_rows = $this->getMaxRowsForBin($bin);
-    return new DatabaseBackend($this->connection, $this->checksumProvider, $bin, $max_rows);
-  }
-
-  /**
-   * Gets the max rows for the specified cache bin.
-   *
-   * @param string $bin
-   *   The cache bin for which the object is created.
-   *
-   * @return int
-   *   The maximum number of rows for the given bin. Defaults to
-   *   DatabaseBackend::DEFAULT_MAX_ROWS.
-   */
-  protected function getMaxRowsForBin($bin) {
-    $max_rows_settings = $this->settings->get('database_cache_max_rows');
-    // First, look for a cache bin specific setting.
-    if (isset($max_rows_settings['bins'][$bin])) {
-      $max_rows  = $max_rows_settings['bins'][$bin];
-    }
-    // Second, use configured default backend.
-    elseif (isset($max_rows_settings['default'])) {
-      $max_rows = $max_rows_settings['default'];
-    }
-    else {
-      // Fall back to the default max rows if nothing else is configured.
-      $max_rows = DatabaseBackend::DEFAULT_MAX_ROWS;
-    }
-    return $max_rows;
+    return new DatabaseBackend($this->connection, $this->checksumProvider, $bin);
   }
 
 }
diff --git a/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
index 0c4faee341..450b4411a1 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php
@@ -163,8 +163,6 @@ protected function ensureTableExists() {
 
   /**
    * Defines the schema for the {cachetags} table.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     $schema = [
diff --git a/core/lib/Drupal/Core/Command/DbDumpCommand.php b/core/lib/Drupal/Core/Command/DbDumpCommand.php
index aa81af041f..264bd3f2a1 100644
--- a/core/lib/Drupal/Core/Command/DbDumpCommand.php
+++ b/core/lib/Drupal/Core/Command/DbDumpCommand.php
@@ -69,7 +69,7 @@ protected function execute(InputInterface $input, OutputInterface $output) {
    *   The database connection to use.
    * @param array $schema_only
    *   Table patterns for which to only dump the schema, no data.
-   * @return string
+   * @return string The PHP script.
    *   The PHP script.
    */
   protected function generateScript(Connection $connection, array $schema_only = []) {
@@ -102,7 +102,7 @@ protected function generateScript(Connection $connection, array $schema_only = [
    *
    * @param \Drupal\Core\Database\Connection $connection
    *   The database connection to use.
-   * @return array
+   * @return array An array of table names.
    *   An array of table names.
    */
   protected function getTables(Connection $connection) {
diff --git a/core/lib/Drupal/Core/Config/ConfigBase.php b/core/lib/Drupal/Core/Config/ConfigBase.php
index 4f445ea21c..596ed92156 100644
--- a/core/lib/Drupal/Core/Config/ConfigBase.php
+++ b/core/lib/Drupal/Core/Config/ConfigBase.php
@@ -7,7 +7,7 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
 use Drupal\Core\Cache\RefinableCacheableDependencyTrait;
-use Drupal\Core\DependencyInjection\DependencySerializationTrait;
+use \Drupal\Core\DependencyInjection\DependencySerializationTrait;
 
 /**
  * Provides a base class for configuration objects with get/set support.
diff --git a/core/lib/Drupal/Core/Config/ConfigManager.php b/core/lib/Drupal/Core/Config/ConfigManager.php
index 7ec824b522..65da2e9136 100644
--- a/core/lib/Drupal/Core/Config/ConfigManager.php
+++ b/core/lib/Drupal/Core/Config/ConfigManager.php
@@ -452,9 +452,7 @@ protected function callOnDependencyRemoval(ConfigEntityInterface $entity, array
     // Key the entity arrays by config dependency name to make searching easy.
     foreach (['config', 'content'] as $dependency_type) {
       $affected_dependencies[$dependency_type] = array_combine(
-        array_map(function ($entity) {
-          return $entity->getConfigDependencyName();
-        }, $affected_dependencies[$dependency_type]),
+        array_map(function ($entity) { return $entity->getConfigDependencyName(); }, $affected_dependencies[$dependency_type]),
         $affected_dependencies[$dependency_type]
       );
     }
diff --git a/core/lib/Drupal/Core/Config/DatabaseStorage.php b/core/lib/Drupal/Core/Config/DatabaseStorage.php
index 8a749a38c7..1368dfff5d 100644
--- a/core/lib/Drupal/Core/Config/DatabaseStorage.php
+++ b/core/lib/Drupal/Core/Config/DatabaseStorage.php
@@ -180,8 +180,6 @@ protected function ensureTableExists()  {
 
   /**
    * Defines the schema for the configuration table.
-   *
-   * @internal
    */
   protected static function schemaDefinition() {
     $schema = [
@@ -320,8 +318,7 @@ public function getCollectionName() {
   public function getAllCollectionNames() {
     try {
       return $this->connection->query('SELECT DISTINCT collection FROM {' . $this->connection->escapeTable($this->table) . '} WHERE collection <> :collection ORDER by collection', [
-          ':collection' => StorageInterface::DEFAULT_COLLECTION,
-        ]
+        ':collection' => StorageInterface::DEFAULT_COLLECTION]
       )->fetchCol();
     }
     catch (\Exception $e) {
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
index e26a03ca85..38b7fa87a1 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
@@ -37,14 +37,14 @@ public function getDefaultOperations(EntityInterface $entity) {
         $operations['enable'] = [
           'title' => t('Enable'),
           'weight' => -10,
-          'url' => $this->ensureDestination($entity->toUrl('enable')),
+          'url' => $entity->urlInfo('enable'),
         ];
       }
       elseif ($entity->hasLinkTemplate('disable')) {
         $operations['disable'] = [
           'title' => t('Disable'),
           'weight' => 40,
-          'url' => $this->ensureDestination($entity->toUrl('disable')),
+          'url' => $entity->urlInfo('disable'),
         ];
       }
     }
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
index 62fb13efc0..11b66fc7a1 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
@@ -316,13 +316,6 @@ protected function has($id, EntityInterface $entity) {
     return !$config->isNew();
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function hasData() {
-    return (bool) $this->configFactory->listAll($this->getPrefix());
-  }
-
   /**
    * Gets entities from the static cache.
    *
diff --git a/core/lib/Drupal/Core/Config/Entity/Query/Condition.php b/core/lib/Drupal/Core/Config/Entity/Query/Condition.php
index 23971eafc2..6764d01ea6 100644
--- a/core/lib/Drupal/Core/Config/Entity/Query/Condition.php
+++ b/core/lib/Drupal/Core/Config/Entity/Query/Condition.php
@@ -154,13 +154,6 @@ protected function matchArray(array $condition, array $data, array $needs_matchi
    *   TRUE when matches else FALSE.
    */
   protected function match(array $condition, $value) {
-    // "IS NULL" and "IS NOT NULL" conditions can also deal with array values,
-    // so we return early for them to avoid problems.
-    if (in_array($condition['operator'], ['IS NULL', 'IS NOT NULL'], TRUE)) {
-      $should_be_set = $condition['operator'] === 'IS NOT NULL';
-      return $should_be_set === isset($value);
-    }
-
     if (isset($value)) {
       // We always want a case-insensitive match.
       if (!is_bool($value)) {
@@ -190,11 +183,15 @@ protected function match(array $condition, $value) {
           return strpos($value, $condition['value']) !== FALSE;
         case 'ENDS_WITH':
           return substr($value, -strlen($condition['value'])) === (string) $condition['value'];
+        case 'IS NOT NULL':
+          return TRUE;
+        case 'IS NULL':
+          return FALSE;
         default:
           throw new QueryException('Invalid condition operator.');
       }
     }
-    return FALSE;
+    return $condition['operator'] === 'IS NULL';
   }
 
 }
diff --git a/core/lib/Drupal/Core/Config/Schema/ArrayElement.php b/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
index b16cee0aea..b38a94b3c2 100644
--- a/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
+++ b/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
@@ -48,7 +48,7 @@ protected function parse() {
    *
    * @return \Drupal\Core\TypedData\DataDefinitionInterface
    */
-  abstract protected function getElementDefinition($key);
+  protected abstract function getElementDefinition($key);
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Config/StorageComparer.php b/core/lib/Drupal/Core/Config/StorageComparer.php
index 30958cee1e..55aeebc561 100644
--- a/core/lib/Drupal/Core/Config/StorageComparer.php
+++ b/core/lib/Drupal/Core/Config/StorageComparer.php
@@ -433,8 +433,8 @@ protected function getAndSortConfigData($collection) {
    *
    * @see \Drupal\Core\Config\StorageComparerInterface::extractRenameNames()
    */
-  protected function createRenameName($old_name, $new_name) {
-    return $old_name . '::' . $new_name;
+  protected function createRenameName($name1, $name2) {
+    return $name1 . '::' . $name2;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Cron.php b/core/lib/Drupal/Core/Cron.php
index d0a9b688df..a544ca8db0 100644
--- a/core/lib/Drupal/Core/Cron.php
+++ b/core/lib/Drupal/Core/Cron.php
@@ -81,7 +81,7 @@ class Cron implements CronInterface {
    * @param \Drupal\Core\State\StateInterface $state
    *   The state service.
    * @param \Drupal\Core\Session\AccountSwitcherInterface $account_switcher
-   *   The account switching service.
+   *    The account switching service.
    * @param \Psr\Log\LoggerInterface $logger
    *   A logger instance.
    * @param \Drupal\Core\Queue\QueueWorkerManagerInterface $queue_manager
diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php
index 3bc7447a6d..803689b2c4 100644
--- a/core/lib/Drupal/Core/Database/Connection.php
+++ b/core/lib/Drupal/Core/Database/Connection.php
@@ -187,7 +187,7 @@ public function __construct(\PDO $connection, array $connection_options) {
    * @return \PDO
    *   A \PDO object.
    */
-  public static function open(array &$connection_options = []) {}
+  public static function open(array &$connection_options = []) { }
 
   /**
    * Destroys this Connection object.
diff --git a/core/lib/Drupal/Core/Database/DatabaseException.php b/core/lib/Drupal/Core/Database/DatabaseException.php
index 7d5ae6391d..a9470b90e7 100644
--- a/core/lib/Drupal/Core/Database/DatabaseException.php
+++ b/core/lib/Drupal/Core/Database/DatabaseException.php
@@ -1,5 +1,4 @@
 <?php
-// @codingStandardsIgnoreFile
 
 namespace Drupal\Core\Database;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php b/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
index 0ff1155781..2b3717e660 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Query\Delete.
  */
-class Delete extends QueryDelete {}
+class Delete extends QueryDelete { }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php b/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
index 06557e69c1..490ef78cb7 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Query\Merge.
  */
-class Merge extends QueryMerge {}
+class Merge extends QueryMerge { }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
index 878607c55d..1911d6a881 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
@@ -226,9 +226,6 @@ protected function processField($field) {
     return $field;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function getFieldTypeMap() {
     // Put :normal last so it gets preserved by array_flip. This makes
     // it much easier for modules (such as schema.module) to map
@@ -369,9 +366,6 @@ protected function createKeySql($fields) {
     return implode(', ', $return);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function renameTable($table, $new_name) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name]));
@@ -384,9 +378,6 @@ public function renameTable($table, $new_name) {
     return $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO `' . $info['table'] . '`');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropTable($table) {
     if (!$this->tableExists($table)) {
       return FALSE;
@@ -396,9 +387,6 @@ public function dropTable($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addField($table, $field, $spec, $keys_new = []) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table]));
@@ -444,9 +432,6 @@ public function addField($table, $field, $spec, $keys_new = []) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropField($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       return FALSE;
@@ -456,9 +441,6 @@ public function dropField($table, $field) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetDefault($table, $field, $default) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
@@ -467,9 +449,6 @@ public function fieldSetDefault($table, $field, $default) {
     $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` SET DEFAULT ' . $this->escapeDefaultValue($default));
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetNoDefault($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
@@ -478,9 +457,6 @@ public function fieldSetNoDefault($table, $field) {
     $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` DROP DEFAULT');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function indexExists($table, $name) {
     // Returns one row for each column in the index. Result is string or FALSE.
     // Details at http://dev.mysql.com/doc/refman/5.0/en/show-index.html
@@ -488,9 +464,6 @@ public function indexExists($table, $name) {
     return isset($row['Key_name']);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addPrimaryKey($table, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table]));
@@ -502,9 +475,6 @@ public function addPrimaryKey($table, $fields) {
     $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . $this->createKeySql($fields) . ')');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropPrimaryKey($table) {
     if (!$this->indexExists($table, 'PRIMARY')) {
       return FALSE;
@@ -514,9 +484,6 @@ public function dropPrimaryKey($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addUniqueKey($table, $name, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name]));
@@ -528,9 +495,6 @@ public function addUniqueKey($table, $name, $fields) {
     $this->connection->query('ALTER TABLE {' . $table . '} ADD UNIQUE KEY `' . $name . '` (' . $this->createKeySql($fields) . ')');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropUniqueKey($table, $name) {
     if (!$this->indexExists($table, $name)) {
       return FALSE;
@@ -557,9 +521,6 @@ public function addIndex($table, $name, $fields, array $spec) {
     $this->connection->query('ALTER TABLE {' . $table . '} ADD INDEX `' . $name . '` (' . $this->createKeySql($indexes[$name]) . ')');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropIndex($table, $name) {
     if (!$this->indexExists($table, $name)) {
       return FALSE;
@@ -569,9 +530,6 @@ public function dropIndex($table, $name) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function changeField($table, $field, $field_new, $spec, $keys_new = []) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field]));
@@ -587,9 +545,6 @@ public function changeField($table, $field, $field_new, $spec, $keys_new = []) {
     $this->connection->query($sql);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function prepareComment($comment, $length = NULL) {
     // Truncate comment to maximum comment length.
     if (isset($length)) {
@@ -619,9 +574,6 @@ public function getComment($table, $column = NULL) {
     return preg_replace('/; InnoDB free:.*$/', '', $comment);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function tableExists($table) {
     // The information_schema table is very slow to query under MySQL 5.0.
     // Instead, we try to select from the table in question.  If it fails,
@@ -639,9 +591,6 @@ public function tableExists($table) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldExists($table, $column) {
     // The information_schema table is very slow to query under MySQL 5.0.
     // Instead, we try to select from the table and field in question. If it
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php b/core/lib/Drupal/Core/Database/Driver/mysql/Select.php
index 610a016ad3..7e1e0039fa 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Select.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Query\Select.
  */
-class Select extends QuerySelect {}
+class Select extends QuerySelect { }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php b/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
index 6713281f1d..3f7365a512 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Transaction.
  */
-class Transaction extends DatabaseTransaction {}
+class Transaction extends DatabaseTransaction { }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php b/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
index ce21021d23..0c32095ea5 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Query\Truncate.
  */
-class Truncate extends QueryTruncate {}
+class Truncate extends QueryTruncate { }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php b/core/lib/Drupal/Core/Database/Driver/mysql/Update.php
index 529a7db19b..e1f082125c 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Update.php
@@ -7,4 +7,4 @@
 /**
  * MySQL implementation of \Drupal\Core\Database\Query\Update.
  */
-class Update extends QueryUpdate {}
+class Update extends QueryUpdate { }
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
index e696f242fd..3769e54859 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
@@ -54,21 +54,20 @@ class Connection extends DatabaseConnection {
    * @see http://www.postgresql.org/docs/9.4/static/sql-keywords-appendix.html
    */
   protected $postgresqlReservedKeyWords = ['all', 'analyse', 'analyze', 'and',
-    'any', 'array', 'as', 'asc', 'asymmetric', 'authorization', 'binary', 'both',
-    'case', 'cast', 'check', 'collate', 'collation', 'column', 'concurrently',
-    'constraint', 'create', 'cross', 'current_catalog', 'current_date',
-    'current_role', 'current_schema', 'current_time', 'current_timestamp',
-    'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else',
-    'end', 'except', 'false', 'fetch', 'for', 'foreign', 'freeze', 'from', 'full',
-    'grant', 'group', 'having', 'ilike', 'in', 'initially', 'inner', 'intersect',
-    'into', 'is', 'isnull', 'join', 'lateral', 'leading', 'left', 'like', 'limit',
-    'localtime', 'localtimestamp', 'natural', 'not', 'notnull', 'null', 'offset',
-    'on', 'only', 'or', 'order', 'outer', 'over', 'overlaps', 'placing',
-    'primary', 'references', 'returning', 'right', 'select', 'session_user',
-    'similar', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true',
-    'union', 'unique', 'user', 'using', 'variadic', 'verbose', 'when', 'where',
-    'window', 'with',
-  ];
+  'any', 'array', 'as', 'asc', 'asymmetric', 'authorization', 'binary', 'both',
+  'case', 'cast', 'check', 'collate', 'collation', 'column', 'concurrently',
+  'constraint', 'create', 'cross', 'current_catalog', 'current_date',
+  'current_role', 'current_schema', 'current_time', 'current_timestamp',
+  'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else',
+  'end', 'except', 'false', 'fetch', 'for', 'foreign', 'freeze', 'from', 'full',
+  'grant', 'group', 'having', 'ilike', 'in', 'initially', 'inner', 'intersect',
+  'into', 'is', 'isnull', 'join', 'lateral', 'leading', 'left', 'like', 'limit',
+  'localtime', 'localtimestamp', 'natural', 'not', 'notnull', 'null', 'offset',
+  'on', 'only', 'or', 'order', 'outer', 'over', 'overlaps', 'placing',
+  'primary', 'references', 'returning', 'right', 'select', 'session_user',
+  'similar', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true',
+  'union', 'unique', 'user', 'using', 'variadic', 'verbose', 'when', 'where',
+  'window', 'with'];
 
   /**
    * Constructs a connection object.
@@ -112,7 +111,7 @@ public static function open(array &$connection_options = []) {
     // so backslashes in the password need to be doubled up.
     // The bug was reported against pdo_pgsql 1.0.2, backslashes in passwords
     // will break on this doubling up when the bug is fixed, so check the version
-    // elseif (phpversion('pdo_pgsql') < 'version_this_was_fixed_in') {
+    //elseif (phpversion('pdo_pgsql') < 'version_this_was_fixed_in') {
     else {
       $connection_options['password'] = str_replace('\\', '\\\\', $connection_options['password']);
     }
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
index 3acb482149..45c7a47ea6 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
@@ -66,7 +66,7 @@ public function execute() {
             // used twice. However, trying to insert a value into a serial
             // column should only be done in very rare cases and is not thread
             // safe by definition.
-            $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int) $serial_value]);
+            $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int)$serial_value]);
           }
         }
       }
@@ -128,9 +128,7 @@ public function __toString() {
     // Default fields are always placed first for consistency.
     $insert_fields = array_merge($this->defaultFields, $this->insertFields);
 
-    $insert_fields = array_map(function($f) {
-      return $this->connection->escapeField($f);
-    }, $insert_fields);
+    $insert_fields = array_map(function($f) { return $this->connection->escapeField($f); }, $insert_fields);
 
     // If we're selecting from a SelectQuery, finish building the query and
     // pass it back, as any remaining options are irrelevant.
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
index c9eb3f85a3..d2cb36b604 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
@@ -254,7 +254,7 @@ public function initializeDatabase() {
           \'SELECT random();\'
           LANGUAGE \'sql\'',
           [],
-          ['allow_delimiter_in_query' => TRUE ]
+          [ 'allow_delimiter_in_query' => TRUE ]
         );
       }
 
@@ -263,7 +263,7 @@ public function initializeDatabase() {
           \'SELECT array_to_string((string_to_array($1, $2)) [1:$3], $2);\'
           LANGUAGE \'sql\'',
           [],
-          ['allow_delimiter_in_query' => TRUE ]
+          [ 'allow_delimiter_in_query' => TRUE ]
         );
       }
       $connection->query('SELECT pg_advisory_unlock(1)');
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
index a795821c3c..7c1e1158ff 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
@@ -7,4 +7,4 @@
 /**
  * PostgreSQL implementation of \Drupal\Core\Database\Query\Merge.
  */
-class Merge extends QueryMerge {}
+class Merge extends QueryMerge { }
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php b/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php
index 95eff55c08..8cb2ce7760 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php
@@ -60,7 +60,7 @@ public function execute() {
             // used twice. However, trying to insert a value into a serial
             // column should only be done in very rare cases and is not thread
             // safe by definition.
-            $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int) $serial_value]);
+            $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int)$serial_value]);
           }
         }
       }
@@ -100,9 +100,7 @@ public function __toString() {
 
     // Default fields are always placed first for consistency.
     $insert_fields = array_merge($this->defaultFields, $this->insertFields);
-    $insert_fields = array_map(function($f) {
-      return $this->connection->escapeField($f);
-    }, $insert_fields);
+    $insert_fields = array_map(function($f) { return $this->connection->escapeField($f); }, $insert_fields);
 
     $query = $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') VALUES ';
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
index 9e5e1d9f84..4586d01058 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -297,9 +297,9 @@ protected function createTableSql($name, $table) {
    * function it has to be processed by _db_process_field().
    *
    * @param $name
-   *   Name of the field.
+   *    Name of the field.
    * @param $spec
-   *   The field specification, as per the schema data structure format.
+   *    The field specification, as per the schema data structure format.
    */
   protected function createFieldSql($name, $spec) {
     // The PostgreSQL server converts names into lowercase, unless quoted.
@@ -383,7 +383,8 @@ protected function processField($field) {
   }
 
   /**
-   * {@inheritdoc}
+   * This maps a generic data type in combination with its data size
+   * to the engine-specific data type.
    */
   public function getFieldTypeMap() {
     // Put :normal last so it gets preserved by array_flip. This makes
@@ -470,9 +471,6 @@ public function tableExists($table) {
     return (bool) $this->connection->query("SELECT 1 FROM pg_tables WHERE schemaname = :schema AND tablename = :table", [':schema' => $prefixInfo['schema'], ':table' => $prefixInfo['table']])->fetchField();
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function renameTable($table, $new_name) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name]));
@@ -527,9 +525,6 @@ public function renameTable($table, $new_name) {
     $this->resetTableInformation($table);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropTable($table) {
     if (!$this->tableExists($table)) {
       return FALSE;
@@ -540,9 +535,6 @@ public function dropTable($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addField($table, $field, $spec, $new_keys = []) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table]));
@@ -591,9 +583,6 @@ public function addField($table, $field, $spec, $new_keys = []) {
     $this->resetTableInformation($table);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropField($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       return FALSE;
@@ -604,9 +593,6 @@ public function dropField($table, $field) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetDefault($table, $field, $default) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
@@ -617,9 +603,6 @@ public function fieldSetDefault($table, $field, $default) {
     $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" SET DEFAULT ' . $default);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetNoDefault($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
@@ -628,9 +611,6 @@ public function fieldSetNoDefault($table, $field) {
     $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" DROP DEFAULT');
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function indexExists($table, $name) {
     // Details http://www.postgresql.org/docs/9.1/interactive/view-pg-indexes.html
     $index_name = $this->ensureIdentifiersLength($table, $name, 'idx');
@@ -671,9 +651,6 @@ public function constraintExists($table, $name) {
     return (bool) $this->connection->query("SELECT 1 FROM pg_constraint WHERE conname = '$constraint_name'")->fetchField();
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addPrimaryKey($table, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table]));
@@ -686,9 +663,6 @@ public function addPrimaryKey($table, $fields) {
     $this->resetTableInformation($table);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropPrimaryKey($table) {
     if (!$this->constraintExists($table, 'pkey')) {
       return FALSE;
@@ -699,9 +673,6 @@ public function dropPrimaryKey($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addUniqueKey($table, $name, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name]));
@@ -714,9 +685,6 @@ public function addUniqueKey($table, $name, $fields) {
     $this->resetTableInformation($table);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropUniqueKey($table, $name) {
     if (!$this->constraintExists($table, $name . '__key')) {
       return FALSE;
@@ -742,9 +710,6 @@ public function addIndex($table, $name, $fields, array $spec) {
     $this->resetTableInformation($table);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropIndex($table, $name) {
     if (!$this->indexExists($table, $name)) {
       return FALSE;
@@ -755,9 +720,6 @@ public function dropIndex($table, $name) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function changeField($table, $field, $field_new, $spec, $new_keys = []) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field]));
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
index 138cbe6791..1440c0eead 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
@@ -7,4 +7,4 @@
 /**
  * PostgreSQL implementation of \Drupal\Core\Database\Transaction.
  */
-class Transaction extends DatabaseTransaction {}
+class Transaction extends DatabaseTransaction { }
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
index c009fb8105..8417d1628d 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
@@ -7,4 +7,4 @@
 /**
  * SQLite implementation of \Drupal\Core\Database\Query\Delete.
  */
-class Delete extends QueryDelete {}
+class Delete extends QueryDelete { }
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
index fddee0053b..d8a0b2c842 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
@@ -7,4 +7,4 @@
 /**
  * SQLite implementation of \Drupal\Core\Database\Query\Merge.
  */
-class Merge extends QueryMerge {}
+class Merge extends QueryMerge { }
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
index 27b6a58fbb..90c4848350 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
@@ -22,9 +22,6 @@ class Schema extends DatabaseSchema {
    */
   protected $defaultSchema = 'main';
 
-  /**
-   * {@inheritdoc}
-   */
   public function tableExists($table) {
     $info = $this->getPrefixInfo($table);
 
@@ -32,9 +29,6 @@ public function tableExists($table) {
     return (bool) $this->connection->query('SELECT 1 FROM ' . $info['schema'] . '.sqlite_master WHERE type = :type AND name = :name', [':type' => 'table', ':name' => $info['table']])->fetchField();
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldExists($table, $column) {
     $schema = $this->introspectSchema($table);
     return !empty($schema['fields'][$column]);
@@ -155,9 +149,9 @@ protected function processField($field) {
    * to be processed by db_processField().
    *
    * @param $name
-   *   Name of the field.
+   *    Name of the field.
    * @param $spec
-   *   The field specification, as per the schema data structure format.
+   *    The field specification, as per the schema data structure format.
    */
   protected function createFieldSql($name, $spec) {
     if (!empty($spec['auto_increment'])) {
@@ -207,7 +201,8 @@ protected function createFieldSql($name, $spec) {
   }
 
   /**
-   * {@inheritdoc}
+   * This maps a generic data type in combination with its data size
+   * to the engine-specific data type.
    */
   public function getFieldTypeMap() {
     // Put :normal last so it gets preserved by array_flip. This makes
@@ -252,9 +247,6 @@ public function getFieldTypeMap() {
     return $map;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function renameTable($table, $new_name) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name]));
@@ -292,9 +284,6 @@ public function renameTable($table, $new_name) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropTable($table) {
     if (!$this->tableExists($table)) {
       return FALSE;
@@ -304,9 +293,6 @@ public function dropTable($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addField($table, $field, $specification, $keys_new = []) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table]));
@@ -514,9 +500,6 @@ protected function introspectSchema($table) {
     return $schema;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropField($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       return FALSE;
@@ -548,9 +531,6 @@ public function dropField($table, $field) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function changeField($table, $field, $field_new, $spec, $keys_new = []) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field]));
@@ -634,18 +614,12 @@ public function addIndex($table, $name, $fields, array $spec) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function indexExists($table, $name) {
     $info = $this->getPrefixInfo($table);
 
     return $this->connection->query('PRAGMA ' . $info['schema'] . '.index_info(' . $info['table'] . '_' . $name . ')')->fetchField() != '';
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropIndex($table, $name) {
     if (!$this->indexExists($table, $name)) {
       return FALSE;
@@ -657,9 +631,6 @@ public function dropIndex($table, $name) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addUniqueKey($table, $name, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name]));
@@ -675,9 +646,6 @@ public function addUniqueKey($table, $name, $fields) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropUniqueKey($table, $name) {
     if (!$this->indexExists($table, $name)) {
       return FALSE;
@@ -689,9 +657,6 @@ public function dropUniqueKey($table, $name) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function addPrimaryKey($table, $fields) {
     if (!$this->tableExists($table)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table]));
@@ -708,9 +673,6 @@ public function addPrimaryKey($table, $fields) {
     $this->alterTable($table, $old_schema, $new_schema);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function dropPrimaryKey($table) {
     $old_schema = $this->introspectSchema($table);
     $new_schema = $old_schema;
@@ -724,9 +686,6 @@ public function dropPrimaryKey($table) {
     return TRUE;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetDefault($table, $field, $default) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
@@ -739,9 +698,6 @@ public function fieldSetDefault($table, $field, $default) {
     $this->alterTable($table, $old_schema, $new_schema);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function fieldSetNoDefault($table, $field) {
     if (!$this->fieldExists($table, $field)) {
       throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field]));
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
index aa1355147c..acef12296d 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
@@ -7,4 +7,4 @@
 /**
  * SQLite implementation of \Drupal\Core\Database\Transaction.
  */
-class Transaction extends DatabaseTransaction {}
+class Transaction extends DatabaseTransaction { }
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
index 66a7294d49..970552d7ac 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
@@ -7,4 +7,4 @@
 /**
  * SQLite implementation of \Drupal\Core\Database\Query\Update.
  */
-class Update extends QueryUpdate {}
+class Update extends QueryUpdate { }
diff --git a/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php b/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php
index 6c6b87cf1c..753010eee2 100644
--- a/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php
+++ b/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php
@@ -8,4 +8,4 @@
  * This exception is thrown e.g. when trying to insert a row that would violate
  * a unique key constraint.
  */
-class IntegrityConstraintViolationException extends \RuntimeException implements DatabaseException {}
+class IntegrityConstraintViolationException extends \RuntimeException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/InvalidQueryException.php b/core/lib/Drupal/Core/Database/InvalidQueryException.php
index 73e5c8129f..e669d7948f 100644
--- a/core/lib/Drupal/Core/Database/InvalidQueryException.php
+++ b/core/lib/Drupal/Core/Database/InvalidQueryException.php
@@ -8,4 +8,4 @@
  * This exception is thrown e.g. when trying to have an IN condition with an
  * empty array.
  */
-class InvalidQueryException extends \InvalidArgumentException implements DatabaseException {}
+class InvalidQueryException extends \InvalidArgumentException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/Query/Select.php b/core/lib/Drupal/Core/Database/Query/Select.php
index 80533fdfef..b3426e6d4d 100644
--- a/core/lib/Drupal/Core/Database/Query/Select.php
+++ b/core/lib/Drupal/Core/Database/Query/Select.php
@@ -128,7 +128,7 @@ class Select extends Query implements SelectInterface {
    * @param array $options
    *   Array of query options.
    */
-  public function __construct($table, $alias, Connection $connection, $options = []) {
+  public function __construct($table, $alias = NULL, Connection $connection, $options = []) {
     $options['return'] = Database::RETURN_STATEMENT;
     parent::__construct($connection, $options);
     $conjunction = isset($options['conjunction']) ? $options['conjunction'] : 'AND';
@@ -156,14 +156,14 @@ public function hasTag($tag) {
    * {@inheritdoc}
    */
   public function hasAllTags() {
-    return !(boolean) array_diff(func_get_args(), array_keys($this->alterTags));
+    return !(boolean)array_diff(func_get_args(), array_keys($this->alterTags));
   }
 
   /**
    * {@inheritdoc}
    */
   public function hasAnyTag() {
-    return (boolean) array_intersect(func_get_args(), array_keys($this->alterTags));
+    return (boolean)array_intersect(func_get_args(), array_keys($this->alterTags));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Database/SchemaException.php b/core/lib/Drupal/Core/Database/SchemaException.php
index 3181d82637..1106a6a4a9 100644
--- a/core/lib/Drupal/Core/Database/SchemaException.php
+++ b/core/lib/Drupal/Core/Database/SchemaException.php
@@ -5,4 +5,4 @@
 /**
  * Base exception for Schema-related errors.
  */
-class SchemaException extends \RuntimeException implements DatabaseException {}
+class SchemaException extends \RuntimeException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php b/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php
index f12eb04377..b2af58413a 100644
--- a/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php
+++ b/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php
@@ -9,4 +9,4 @@
  * modify a database table, field, or index that does not currently exist in
  * the database schema.
  */
-class SchemaObjectDoesNotExistException extends SchemaException implements DatabaseException {}
+class SchemaObjectDoesNotExistException extends SchemaException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php b/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php
index 76444e1032..3390b17590 100644
--- a/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php
+++ b/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php
@@ -9,4 +9,4 @@
  * create a new database table, field, or index that already exists in the
  * database schema.
  */
-class SchemaObjectExistsException extends SchemaException implements DatabaseException {}
+class SchemaObjectExistsException extends SchemaException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/StatementInterface.php b/core/lib/Drupal/Core/Database/StatementInterface.php
index a97043af62..a34bf617fa 100644
--- a/core/lib/Drupal/Core/Database/StatementInterface.php
+++ b/core/lib/Drupal/Core/Database/StatementInterface.php
@@ -37,7 +37,7 @@
    * "the access type must be omitted" if it is protected; i.e., conflicting
    * statements). The access type has to be protected.
    */
-  // protected function __construct(Connection $dbh);
+  //protected function __construct(Connection $dbh);
 
   /**
    * Executes a prepared statement
diff --git a/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php b/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php
index f1dbf95654..9f7526fc5f 100644
--- a/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php
+++ b/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php
@@ -5,4 +5,4 @@
 /**
  * Exception thrown when a commit() function fails.
  */
-class TransactionCommitFailedException extends TransactionException implements DatabaseException {}
+class TransactionCommitFailedException extends TransactionException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/TransactionException.php b/core/lib/Drupal/Core/Database/TransactionException.php
index c0380da549..3b35a31349 100644
--- a/core/lib/Drupal/Core/Database/TransactionException.php
+++ b/core/lib/Drupal/Core/Database/TransactionException.php
@@ -5,4 +5,4 @@
 /**
  * Exception thrown by an error in a database transaction.
  */
-class TransactionException extends \RuntimeException implements DatabaseException {}
+class TransactionException extends \RuntimeException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php b/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php
index f1a4cbf9b7..1b4710eb5e 100644
--- a/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php
+++ b/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php
@@ -8,4 +8,4 @@
  * This exception will be thrown when the PDO connection commit() is called.
  * Code should never call this method directly.
  */
-class TransactionExplicitCommitNotAllowedException extends TransactionException implements DatabaseException {}
+class TransactionExplicitCommitNotAllowedException extends TransactionException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php b/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php
index 8265620b25..dbbfc065eb 100644
--- a/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php
+++ b/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php
@@ -5,4 +5,4 @@
 /**
  * Exception thrown when a savepoint or transaction name occurs twice.
  */
-class TransactionNameNonUniqueException extends TransactionException implements DatabaseException {}
+class TransactionNameNonUniqueException extends TransactionException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/TransactionNoActiveException.php b/core/lib/Drupal/Core/Database/TransactionNoActiveException.php
index b868a3d155..883ce9762c 100644
--- a/core/lib/Drupal/Core/Database/TransactionNoActiveException.php
+++ b/core/lib/Drupal/Core/Database/TransactionNoActiveException.php
@@ -5,4 +5,4 @@
 /**
  * Exception for when popTransaction() is called with no active transaction.
  */
-class TransactionNoActiveException extends TransactionException implements DatabaseException {}
+class TransactionNoActiveException extends TransactionException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php b/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php
index d7b07df3ea..7084eda0e0 100644
--- a/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php
+++ b/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php
@@ -5,4 +5,4 @@
 /**
  * Exception thrown when a rollBack() resulted in other active transactions being rolled-back.
  */
-class TransactionOutOfOrderException extends TransactionException implements DatabaseException {}
+class TransactionOutOfOrderException extends TransactionException implements DatabaseException { }
diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index e238ff5969..d00547535b 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -45,7 +45,6 @@ public function getInfo() {
       ],
       '#process' => [
         [$class, 'processDatetime'],
-        [$class, 'processAjaxForm'],
         [$class, 'processGroup'],
       ],
       '#pre_render' => [
@@ -312,25 +311,6 @@ public static function processDatetime(&$element, FormStateInterface $form_state
     return $element;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public static function processAjaxForm(&$element, FormStateInterface $form_state, &$complete_form) {
-    $element = parent::processAjaxForm($element, $form_state, $complete_form);
-
-    // Copy the #ajax settings to the child elements.
-    if (isset($element['#ajax'])) {
-      if (isset($element['date'])) {
-        $element['date']['#ajax'] = $element['#ajax'];
-      }
-      if (isset($element['time'])) {
-        $element['time']['#ajax'] = $element['#ajax'];
-      }
-    }
-
-    return $element;
-  }
-
   /**
    * Validation callback for a datetime element.
    *
diff --git a/core/lib/Drupal/Core/Diff/DiffFormatter.php b/core/lib/Drupal/Core/Diff/DiffFormatter.php
index 0c17ce2e02..a613711f59 100644
--- a/core/lib/Drupal/Core/Diff/DiffFormatter.php
+++ b/core/lib/Drupal/Core/Diff/DiffFormatter.php
@@ -192,7 +192,7 @@ protected function _changed($orig, $closing) {
     // Notice that WordLevelDiff returns HTML-escaped output. Hence, we will be
     // calling addedLine/deletedLine without HTML-escaping.
     while ($line = array_shift($del)) {
-      $aline = array_shift($add );
+      $aline = array_shift( $add );
       $this->rows[] = array_merge($this->deletedLine($line), isset($aline) ? $this->addedLine($aline) : $this->emptyLine());
     }
 
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 217d4dc781..260e4772f3 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -7,7 +7,6 @@
 use Drupal\Component\FileCache\FileCacheFactory;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\UrlHelper;
-use Drupal\Core\Cache\DatabaseBackend;
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
 use Drupal\Core\Config\NullStorage;
 use Drupal\Core\Database\Database;
@@ -78,7 +77,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
       ],
       'cache.container' => [
         'class' => 'Drupal\Core\Cache\DatabaseBackend',
-        'arguments' => ['@database', '@cache_tags_provider.container', 'container', DatabaseBackend::MAXIMUM_NONE],
+        'arguments' => ['@database', '@cache_tags_provider.container', 'container'],
       ],
       'cache_tags_provider.container' => [
         'class' => 'Drupal\Core\Cache\DatabaseCacheTagsChecksum',
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 8818f6291c..c5421ed2f6 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -916,9 +916,7 @@ public function getTranslationStatus($langcode) {
    * {@inheritdoc}
    */
   public function getTranslationLanguages($include_default = TRUE) {
-    $translations = array_filter($this->translations, function($translation) {
-      return $translation['status'];
-    });
+    $translations = array_filter($this->translations, function($translation) { return $translation['status']; });
     unset($translations[LanguageInterface::LANGCODE_DEFAULT]);
 
     if ($include_default) {
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityForm.php b/core/lib/Drupal/Core/Entity/ContentEntityForm.php
index 92bbbae42f..02eee80f1c 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityForm.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityForm.php
@@ -127,15 +127,6 @@ public function form(array $form, FormStateInterface $form_state) {
       $this->addRevisionableFormFields($form);
     }
 
-    $form['footer'] = [
-      '#type' => 'container',
-      '#weight' => 99,
-      '#attributes' => [
-        'class' => ['entity-content-form-footer']
-      ],
-      '#optional' => TRUE,
-    ];
-
     return $form;
   }
 
@@ -188,29 +179,10 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
 
     $violations = $entity->validate();
 
-    // Remove violations of inaccessible fields.
-    $violations->filterByFieldAccess($this->currentUser());
-
-    // In case a field-level submit button is clicked, for example the 'Add
-    // another item' button for multi-value fields or the 'Upload' button for a
-    // File or an Image field, make sure that we only keep violations for that
-    // specific field.
-    $edited_fields = [];
-    if ($limit_validation_errors = $form_state->getLimitValidationErrors()) {
-      foreach ($limit_validation_errors as $section) {
-        $field_name = reset($section);
-        if ($entity->hasField($field_name)) {
-          $edited_fields[] = $field_name;
-        }
-      }
-      $edited_fields = array_unique($edited_fields);
-    }
-    else {
-      $edited_fields = $this->getEditedFieldNames($form_state);
-    }
-
-    // Remove violations for fields that are not edited.
-    $violations->filterByFields(array_diff(array_keys($entity->getFieldDefinitions()), $edited_fields));
+    // Remove violations of inaccessible fields and not edited fields.
+    $violations
+      ->filterByFieldAccess($this->currentUser())
+      ->filterByFields(array_diff(array_keys($entity->getFieldDefinitions()), $this->getEditedFieldNames($form_state)));
 
     $this->flagViolations($violations, $form, $form_state);
 
@@ -409,7 +381,6 @@ public function updateChangedTime(EntityInterface $entity) {
    *   An associative array containing the structure of the form.
    */
   protected function addRevisionableFormFields(array &$form) {
-    /** @var ContentEntityTypeInterface $entity_type */
     $entity_type = $this->entity->getEntityType();
 
     $new_revision_default = $this->getNewRevisionDefault();
@@ -440,10 +411,9 @@ protected function addRevisionableFormFields(array &$form) {
       '#access' => !$this->entity->isNew() && $this->entity->get($entity_type->getKey('revision'))->access('update'),
       '#group' => 'revision_information',
     ];
-    // Get log message field's key from definition.
-    $log_message_field = $entity_type->getRevisionMetadataKey('revision_log_message');
-    if ($log_message_field && isset($form[$log_message_field])) {
-      $form[$log_message_field] += [
+
+    if (isset($form['revision_log'])) {
+      $form['revision_log'] += [
         '#group' => 'revision_information',
         '#states' => [
           'visible' => [
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
index e92930ab62..9d6b8d64f5 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
@@ -62,6 +62,16 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
     );
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function hasData() {
+    return (bool) $this->getQuery()
+      ->accessCheck(FALSE)
+      ->range(0, 1)
+      ->execute();
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -79,40 +89,6 @@ protected function doCreate(array $values) {
     return $entity;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function createWithSampleValues($bundle = FALSE, array $values = []) {
-    // ID and revision should never have sample values generated for them.
-    $forbidden_keys = [
-      $this->entityType->getKey('id'),
-    ];
-    if ($revision_key = $this->entityType->getKey('revision')) {
-      $forbidden_keys[] = $revision_key;
-    }
-    if ($bundle_key = $this->entityType->getKey('bundle')) {
-      if (!$bundle) {
-        throw new EntityStorageException("No entity bundle was specified");
-      }
-      if (!array_key_exists($bundle, $this->entityManager->getBundleInfo($this->entityTypeId))) {
-        throw new EntityStorageException(sprintf("Missing entity bundle. The \"%s\" bundle does not exist", $bundle));
-      }
-      $values[$bundle_key] = $bundle;
-      // Bundle is already set
-      $forbidden_keys[] = $bundle_key;
-    }
-    // Forbid sample generation on any keys whose values were submitted.
-    $forbidden_keys = array_merge($forbidden_keys, array_keys($values));
-    /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
-    $entity = $this->create($values);
-    foreach ($entity as $field_name => $value) {
-      if (!in_array($field_name, $forbidden_keys, TRUE)) {
-        $entity->get($field_name)->generateSampleItems();
-      }
-    }
-    return $entity;
-  }
-
   /**
    * Initializes field values.
    *
@@ -153,12 +129,8 @@ protected function initFieldValues(ContentEntityInterface $entity, array $values
    */
   public function createTranslation(ContentEntityInterface $entity, $langcode, array $values = []) {
     $translation = $entity->getTranslation($langcode);
-    $definitions = array_filter($translation->getFieldDefinitions(), function(FieldDefinitionInterface $definition) {
-      return $definition->isTranslatable();
-    });
-    $field_names = array_map(function(FieldDefinitionInterface $definition) {
-      return $definition->getName();
-    }, $definitions);
+    $definitions = array_filter($translation->getFieldDefinitions(), function(FieldDefinitionInterface $definition) { return $definition->isTranslatable(); });
+    $field_names = array_map(function(FieldDefinitionInterface $definition) { return $definition->getName(); }, $definitions);
     $values[$this->langcodeKey] = $langcode;
     $values[$this->getEntityType()->getKey('default_langcode')] = FALSE;
     $this->initFieldValues($translation, $values, $field_names);
@@ -169,32 +141,32 @@ public function createTranslation(ContentEntityInterface $entity, $langcode, arr
   /**
    * {@inheritdoc}
    */
-  public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) {}
+  public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {}
+  public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {}
+  public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onFieldDefinitionCreate(FieldDefinitionInterface $field_definition) {}
+  public function onFieldDefinitionCreate(FieldDefinitionInterface $field_definition) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onFieldDefinitionUpdate(FieldDefinitionInterface $field_definition, FieldDefinitionInterface $original) {}
+  public function onFieldDefinitionUpdate(FieldDefinitionInterface $field_definition, FieldDefinitionInterface $original) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definition) {}
+  public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definition) { }
 
   /**
    * {@inheritdoc}
@@ -238,7 +210,7 @@ public function purgeFieldData(FieldDefinitionInterface $field_definition, $batc
   /**
    * {@inheritdoc}
    */
-  public function finalizePurge(FieldStorageDefinitionInterface $storage_definition) {}
+  public function finalizePurge(FieldStorageDefinitionInterface $storage_definition) { }
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php
index eb979c7fd6..47e058d8e1 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php
@@ -23,21 +23,4 @@
    */
   public function createTranslation(ContentEntityInterface $entity, $langcode, array $values = []);
 
-
-  /**
-   * Creates an entity with sample field values.
-   *
-   * @param string|bool $bundle
-   *   (optional) The entity bundle.
-   * @param array $values
-   *   (optional) Any default values to use during generation.
-   *
-   * @return \Drupal\Core\Entity\FieldableEntityInterface
-   *   A fieldable content entity.
-   *
-   * @throws \Drupal\Core\Entity\EntityStorageException
-   *   Thrown if the bundle does not exist or was needed but not specified.
-   */
-  public function createWithSampleValues($bundle = FALSE, array $values = []);
-
 }
diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityController.php b/core/lib/Drupal/Core/Entity/Controller/EntityController.php
index 46cc730b9e..776368e016 100644
--- a/core/lib/Drupal/Core/Entity/Controller/EntityController.php
+++ b/core/lib/Drupal/Core/Entity/Controller/EntityController.php
@@ -177,7 +177,7 @@ public function addPage($entity_type_id) {
    *   The entity type ID.
    *
    * @return string
-   *   The title for the entity add page.
+   *    The title for the entity add page.
    */
   public function addTitle($entity_type_id) {
     $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
@@ -195,7 +195,7 @@ public function addTitle($entity_type_id) {
    *   The name of the route parameter that holds the bundle.
    *
    * @return string
-   *   The title for the entity add page, if the bundle was found.
+   *    The title for the entity add page, if the bundle was found.
    */
   public function addBundleTitle(RouteMatchInterface $route_match, $entity_type_id, $bundle_parameter) {
     $bundles = $this->entityTypeBundleInfo->getBundleInfo($entity_type_id);
diff --git a/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php b/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php
index 04d1b1e05c..feed5653bb 100644
--- a/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php
+++ b/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php
@@ -18,6 +18,14 @@
  */
 interface DynamicallyFieldableEntityStorageInterface extends FieldableEntityStorageInterface, FieldStorageDefinitionListenerInterface, FieldDefinitionListenerInterface {
 
+  /**
+   * Determines if the storage contains any data.
+   *
+   * @return bool
+   *   TRUE if the storage contains data, FALSE if not.
+   */
+  public function hasData();
+
   /**
    * Purges a batch of field data.
    *
diff --git a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
index 466032d96a..89f99a049f 100644
--- a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
+++ b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
@@ -152,9 +152,10 @@ public static function validateEntityAutocomplete(array &$element, FormStateInte
     $value = NULL;
 
     if (!empty($element['#value'])) {
-      $options = $element['#selection_settings'] + [
+      $options = [
         'target_type' => $element['#target_type'],
         'handler' => $element['#selection_handler'],
+        'handler_settings' => $element['#selection_settings'],
       ];
       /** @var /Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface $handler */
       $handler = \Drupal::service('plugin.manager.entity_reference_selection')->getInstance($options);
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 4fe37866f1..95e85e21a4 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -88,15 +88,6 @@ protected function entityTypeManager() {
     return \Drupal::entityTypeManager();
   }
 
-  /**
-   * Gets the entity type bundle info service.
-   *
-   * @return \Drupal\Core\Entity\EntityTypeBundleInfoInterface
-   */
-  protected function entityTypeBundleInfo() {
-    return \Drupal::service('entity_type.bundle.info');
-  }
-
   /**
    * Gets the language manager.
    *
@@ -207,7 +198,7 @@ public function toUrl($rel = 'canonical', array $options = []) {
       $bundle = $this->bundle();
       // A bundle-specific callback takes precedence over the generic one for
       // the entity type.
-      $bundles = $this->entityTypeBundleInfo()->getBundleInfo($this->getEntityTypeId());
+      $bundles = $this->entityManager()->getBundleInfo($this->getEntityTypeId());
       if (isset($bundles[$bundle]['uri_callback'])) {
         $uri_callback = $bundles[$bundle]['uri_callback'];
       }
@@ -353,11 +344,11 @@ public function uriRelationships() {
    */
   public function access($operation, AccountInterface $account = NULL, $return_as_object = FALSE) {
     if ($operation == 'create') {
-      return $this->entityTypeManager()
+      return $this->entityManager()
         ->getAccessControlHandler($this->entityTypeId)
         ->createAccess($this->bundle(), $account, [], $return_as_object);
     }
-    return $this->entityTypeManager()
+    return $this->entityManager()
       ->getAccessControlHandler($this->entityTypeId)
       ->access($this, $operation, $account, $return_as_object);
   }
@@ -383,8 +374,7 @@ public function language() {
    * {@inheritdoc}
    */
   public function save() {
-    $storage = $this->entityTypeManager()->getStorage($this->entityTypeId);
-    return $storage->save($this);
+    return $this->entityManager()->getStorage($this->entityTypeId)->save($this);
   }
 
   /**
@@ -392,7 +382,7 @@ public function save() {
    */
   public function delete() {
     if (!$this->isNew()) {
-      $this->entityTypeManager()->getStorage($this->entityTypeId)->delete([$this->id() => $this]);
+      $this->entityManager()->getStorage($this->entityTypeId)->delete([$this->id() => $this]);
     }
   }
 
@@ -417,7 +407,7 @@ public function createDuplicate() {
    * {@inheritdoc}
    */
   public function getEntityType() {
-    return $this->entityTypeManager()->getDefinition($this->getEntityTypeId());
+    return $this->entityManager()->getDefinition($this->getEntityTypeId());
   }
 
   /**
@@ -518,30 +508,24 @@ public function getCacheMaxAge() {
    * {@inheritdoc}
    */
   public static function load($id) {
-    $entity_type_repository = \Drupal::service('entity_type.repository');
-    $entity_type_manager = \Drupal::entityTypeManager();
-    $storage = $entity_type_manager->getStorage($entity_type_repository->getEntityTypeFromClass(get_called_class()));
-    return $storage->load($id);
+    $entity_manager = \Drupal::entityManager();
+    return $entity_manager->getStorage($entity_manager->getEntityTypeFromClass(get_called_class()))->load($id);
   }
 
   /**
    * {@inheritdoc}
    */
   public static function loadMultiple(array $ids = NULL) {
-    $entity_type_repository = \Drupal::service('entity_type.repository');
-    $entity_type_manager = \Drupal::entityTypeManager();
-    $storage = $entity_type_manager->getStorage($entity_type_repository->getEntityTypeFromClass(get_called_class()));
-    return $storage->loadMultiple($ids);
+    $entity_manager = \Drupal::entityManager();
+    return $entity_manager->getStorage($entity_manager->getEntityTypeFromClass(get_called_class()))->loadMultiple($ids);
   }
 
   /**
    * {@inheritdoc}
    */
   public static function create(array $values = []) {
-    $entity_type_repository = \Drupal::service('entity_type.repository');
-    $entity_type_manager = \Drupal::entityTypeManager();
-    $storage = $entity_type_manager->getStorage($entity_type_repository->getEntityTypeFromClass(get_called_class()));
-    return $storage->create($values);
+    $entity_manager = \Drupal::entityManager();
+    return $entity_manager->getStorage($entity_manager->getEntityTypeFromClass(get_called_class()))->create($values);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
index ac364115eb..3b16d1cddb 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
@@ -66,19 +66,7 @@ public function access(EntityInterface $entity, $operation, AccountInterface $ac
       $operation = 'view';
     }
 
-    // If an entity does not have a UUID, either from not being set or from not
-    // having them, use the 'entity type:ID' pattern as the cache $cid.
-    $cid = $entity->uuid() ?: $entity->getEntityTypeId() . ':' . $entity->id();
-
-    // If the entity is revisionable, then append the revision ID to allow
-    // individual revisions to have specific access control and be cached
-    // separately.
-    if ($entity instanceof RevisionableInterface) {
-      /** @var $entity \Drupal\Core\Entity\RevisionableInterface */
-      $cid .= ':' . $entity->getRevisionId();
-    }
-
-    if (($return = $this->getCache($cid, $operation, $langcode, $account)) !== NULL) {
+    if (($return = $this->getCache($entity->uuid(), $operation, $langcode, $account)) !== NULL) {
       // Cache hit, no work necessary.
       return $return_as_object ? $return : $return->isAllowed();
     }
@@ -104,7 +92,7 @@ public function access(EntityInterface $entity, $operation, AccountInterface $ac
     if (!$return->isForbidden()) {
       $return = $return->orIf($this->checkAccess($entity, $operation, $account));
     }
-    $result = $this->setCache($return, $cid, $operation, $langcode, $account);
+    $result = $this->setCache($return, $entity->uuid(), $operation, $langcode, $account);
     return $return_as_object ? $result : $result->isAllowed();
   }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php b/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
index 2cede4dffa..55372f9e71 100644
--- a/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
+++ b/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
@@ -52,9 +52,10 @@ public function __construct(SelectionPluginManagerInterface $selection_manager)
   public function getMatches($target_type, $selection_handler, $selection_settings, $string = '') {
     $matches = [];
 
-    $options = $selection_settings + [
+    $options = [
       'target_type' => $target_type,
       'handler' => $selection_handler,
+      'handler_settings' => $selection_settings,
     ];
     $handler = $this->selectionManager->getInstance($options);
 
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
index fe7f105e10..0ec97b7e8a 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
@@ -107,16 +107,4 @@ public static function preDelete(EntityStorageInterface $storage, array $entitie
     \Drupal::entityManager()->clearCachedFieldDefinitions();
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function urlRouteParameters($rel) {
-    $uri_route_parameters = parent::urlRouteParameters($rel);
-    if ($rel === 'add-form') {
-      $uri_route_parameters['entity_type_id'] = $this->getTargetType();
-    }
-
-    return $uri_route_parameters;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index 7191fae8d4..7f46915ae9 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\Core\Entity;
 
-use Drupal\Core\Routing\RedirectDestinationTrait;
-use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -13,8 +11,6 @@
  */
 class EntityListBuilder extends EntityHandlerBase implements EntityListBuilderInterface, EntityHandlerInterface {
 
-  use RedirectDestinationTrait;
-
   /**
    * The entity storage class.
    *
@@ -147,14 +143,14 @@ protected function getDefaultOperations(EntityInterface $entity) {
       $operations['edit'] = [
         'title' => $this->t('Edit'),
         'weight' => 10,
-        'url' => $this->ensureDestination($entity->toUrl('edit-form')),
+        'url' => $entity->urlInfo('edit-form'),
       ];
     }
     if ($entity->access('delete') && $entity->hasLinkTemplate('delete-form')) {
       $operations['delete'] = [
         'title' => $this->t('Delete'),
         'weight' => 100,
-        'url' => $this->ensureDestination($entity->toUrl('delete-form')),
+        'url' => $entity->urlInfo('delete-form'),
       ];
     }
 
@@ -246,22 +242,12 @@ public function render() {
 
   /**
    * Gets the title of the page.
+   *
+   * @return string
+   *   A string title of the page.
    */
   protected function getTitle() {
     return;
   }
 
-  /**
-   * Ensures that a destination is present on the given URL.
-   *
-   * @param \Drupal\Core\Url $url
-   *   The URL object to which the destination should be added.
-   *
-   * @return \Drupal\Core\Url
-   *   The updated URL object.
-   */
-  protected function ensureDestination(Url $url) {
-    return $url->mergeOptions(['query' => $this->getRedirectDestination()->getAsArray()]);
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityMalformedException.php b/core/lib/Drupal/Core/Entity/EntityMalformedException.php
index 3561d3d47f..9be6408b94 100644
--- a/core/lib/Drupal/Core/Entity/EntityMalformedException.php
+++ b/core/lib/Drupal/Core/Entity/EntityMalformedException.php
@@ -5,4 +5,4 @@
 /**
  * Defines an exception thrown when a malformed entity is passed.
  */
-class EntityMalformedException extends \Exception {}
+class EntityMalformedException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index dbd3b91826..6f2ce7672e 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -321,8 +321,8 @@ public function clearCachedBundles() {
    *
    * @see https://www.drupal.org/node/2549139
    */
-  public function getBundleInfo($entity_type_id) {
-    return $this->container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id);
+  public function getBundleInfo($entity_type) {
+    return $this->container->get('entity_type.bundle.info')->getBundleInfo($entity_type);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php b/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
index eb4d82e89b..59fddd5d0e 100644
--- a/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
+++ b/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
@@ -32,13 +32,11 @@ public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity
       throw new UnsupportedEntityTypeDefinitionException('The entity type ' . $entity_type->id() . ' does not have a "published" entity key.');
     }
 
-    return [
-      $entity_type->getKey('published') => BaseFieldDefinition::create('boolean')
-        ->setLabel(new TranslatableMarkup('Published'))
-        ->setRevisionable(TRUE)
-        ->setTranslatable(TRUE)
-        ->setDefaultValue(TRUE),
-    ];
+    return [$entity_type->getKey('published') => BaseFieldDefinition::create('boolean')
+      ->setLabel(new TranslatableMarkup('Published'))
+      ->setRevisionable(TRUE)
+      ->setTranslatable(TRUE)
+      ->setDefaultValue(TRUE)];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php
deleted file mode 100644
index 1e48a3e052..0000000000
--- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-namespace Drupal\Core\Entity\EntityReferenceSelection;
-
-use Drupal\Component\Plugin\ConfigurablePluginInterface;
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Database\Query\SelectInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Plugin\PluginBase;
-
-/**
- * Provides a base class for configurable selection handlers.
- */
-abstract class SelectionPluginBase extends PluginBase implements SelectionInterface, ConfigurablePluginInterface {
-
-  /**
-   * Constructs a new selection object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-    $this->setConfiguration($configuration);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function defaultConfiguration() {
-    return [
-      'target_type' => NULL,
-      // @todo Remove this key in Drupal 9.0.x.
-      'handler' => $this->getPluginId(),
-      'entity' => NULL,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfiguration() {
-    return $this->configuration;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setConfiguration(array $configuration) {
-    // Resolve backward compatibility level configurations, if any.
-    $this->resolveBackwardCompatibilityConfiguration($configuration);
-
-    // Merge in defaults.
-    $this->configuration = NestedArray::mergeDeep(
-      $this->defaultConfiguration(),
-      $configuration
-    );
-
-    // Ensure a backward compatibility level configuration.
-    $this->ensureBackwardCompatibilityConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function calculateDependencies() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  public function entityQueryAlter(SelectInterface $query) {}
-
-  /**
-   * Moves the backward compatibility level configurations in the right place.
-   *
-   * In order to keep backward compatibility, we copy all settings, except
-   * 'target_type', 'handler' and 'entity' under 'handler_settings', following
-   * the structure from the field config. If the plugin was instantiated using
-   * the 'handler_settings' level, those values will be used. In case of
-   * conflict, the root level settings will take precedence. The backward
-   * compatibility aware configuration will have the next structure:
-   * - target_type
-   * - handler (will be removed in Drupal 9.0.x, it's the plugin id)
-   * - entity
-   * - setting_1
-   * - setting_2
-   *   ...
-   * - setting_N
-   * - handler_settings: (will be removed in Drupal 9.0.x)
-   *   - setting_1
-   *   - setting_2
-   *     ...
-   *   - setting_N
-   *
-   * @param array $configuration
-   *   The configuration array to be altered.
-   *
-   * @deprecated Scheduled for removal in Drupal 9.0.x.
-   *
-   * @see https://www.drupal.org/node/2870971
-   */
-  protected function resolveBackwardCompatibilityConfiguration(array &$configuration) {
-    if (isset($this->defaultConfiguration()['handler_settings'])) {
-      throw new \InvalidArgumentException("{$this->getPluginDefinition()['class']}::defaultConfiguration() should not contain a 'handler_settings' key. All settings should be placed in the root level.");
-    }
-
-    // Extract the BC level from the passed configuration, if any.
-    if (array_key_exists('handler_settings', $configuration)) {
-      if (!is_array($configuration['handler_settings'])) {
-        throw new \InvalidArgumentException("The setting 'handler_settings' is reserved and cannot be used.");
-      }
-      @trigger_error("Providing settings under 'handler_settings' is deprecated and will be removed before 9.0.0. Move the settings in the root of the configuration array. See https://www.drupal.org/node/2870971.", E_USER_DEPRECATED);
-
-      // Settings passed in the root level take precedence over BC settings.
-      $configuration += $configuration['handler_settings'];
-      unset($configuration['handler_settings']);
-    }
-  }
-
-  /**
-   * Ensures a backward compatibility level configuration.
-   *
-   * @deprecated Scheduled for removal in Drupal 9.0.x.
-   *
-   * @see https://www.drupal.org/node/2870971
-   */
-  protected function ensureBackwardCompatibilityConfiguration() {
-    $keys = ['handler', 'target_type', 'entity', 'handler_settings'];
-    // Synchronize back 'handler_settings'.
-    foreach ($this->configuration as $key => $value) {
-      // Filter out keys that belong strictly to the root level.
-      if (!in_array($key, $keys, TRUE)) {
-        $this->configuration['handler_settings'][$key] = $value;
-      }
-    }
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginManager.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginManager.php
index cf9bb7e49d..53b43fdc68 100644
--- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginManager.php
@@ -39,6 +39,7 @@ public function getInstance(array $options) {
     // Initialize default options.
     $options += [
       'handler' => $this->getPluginId($options['target_type'], 'default'),
+      'handler_settings' => [],
     ];
 
     // A specific selection plugin ID was already specified.
@@ -49,7 +50,6 @@ public function getInstance(array $options) {
     else {
       $plugin_id = $this->getPluginId($options['target_type'], $options['handler']);
     }
-    unset($options['handler']);
 
     return $this->createInstance($plugin_id, $options);
   }
@@ -92,10 +92,10 @@ public function getSelectionGroups($entity_type_id) {
    * {@inheritdoc}
    */
   public function getSelectionHandler(FieldDefinitionInterface $field_definition, EntityInterface $entity = NULL) {
-    $options = $field_definition->getSetting('handler_settings') ?: [];
-    $options += [
+    $options = [
       'target_type' => $field_definition->getFieldStorageDefinition()->getSetting('target_type'),
       'handler' => $field_definition->getSetting('handler'),
+      'handler_settings' => $field_definition->getSetting('handler_settings') ?: [],
       'entity' => $entity,
     ];
     return $this->getInstance($options);
diff --git a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php
deleted file mode 100644
index 1d7947df21..0000000000
--- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionTrait.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace Drupal\Core\Entity\EntityReferenceSelection;
-
-use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Session\AccountInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Provides common methods and injects services for core selection handlers.
- */
-trait SelectionTrait {
-
-  /**
-   * The entity manager service.
-   *
-   * @var \Drupal\Core\Entity\EntityManagerInterface
-   */
-  protected $entityManager;
-
-  /**
-   * The module handler service.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * The current user.
-   *
-   * @var \Drupal\Core\Session\AccountInterface
-   */
-  protected $currentUser;
-
-  /**
-   * Constructs a new selection object.
-   *
-   * @param array $configuration
-   *   A configuration array containing information about the plugin instance.
-   * @param string $plugin_id
-   *   The plugin_id for the plugin instance.
-   * @param mixed $plugin_definition
-   *   The plugin implementation definition.
-   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager service.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler service.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-
-    $this->entityManager = $entity_manager;
-    $this->moduleHandler = $module_handler;
-    $this->currentUser = $current_user;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->get('entity.manager'),
-      $container->get('module_handler'),
-      $container->get('current_user')
-    );
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageBase.php b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
index e5bf880aef..7335af1196 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
@@ -505,16 +505,6 @@ public function loadByProperties(array $values = []) {
     return $result ? $this->loadMultiple($result) : [];
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function hasData() {
-    return (bool) $this->getQuery()
-      ->accessCheck(FALSE)
-      ->range(0, 1)
-      ->execute();
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageException.php b/core/lib/Drupal/Core/Entity/EntityStorageException.php
index 996f1e2406..b8aaee1972 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageException.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageException.php
@@ -5,4 +5,4 @@
 /**
  * Defines an exception thrown when storage operations fail.
  */
-class EntityStorageException extends \Exception {}
+class EntityStorageException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageInterface.php b/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
index 9f50674d0d..50166d6e27 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
@@ -142,14 +142,6 @@ public function delete(array $entities);
    */
   public function save(EntityInterface $entity);
 
-  /**
-   * Determines if the storage contains any data.
-   *
-   * @return bool
-   *   TRUE if the storage contains data, FALSE if not.
-   */
-  public function hasData();
-
   /**
    * Gets an entity query instance.
    *
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
index aa917c845c..42d00a7fcb 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
@@ -76,9 +76,9 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Lan
   /**
    * {@inheritdoc}
    */
-  public function getBundleInfo($entity_type_id) {
+  public function getBundleInfo($entity_type) {
     $bundle_info = $this->getAllBundleInfo();
-    return isset($bundle_info[$entity_type_id]) ? $bundle_info[$entity_type_id] : [];
+    return isset($bundle_info[$entity_type]) ? $bundle_info[$entity_type] : [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfoInterface.php b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfoInterface.php
index 2789b651e5..882f98b3d2 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfoInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfoInterface.php
@@ -21,8 +21,8 @@ public function getAllBundleInfo();
   /**
    * Gets the bundle info of an entity type.
    *
-   * @param string $entity_type_id
-   *   The entity type ID.
+   * @param string $entity_type
+   *   The entity type.
    *
    * @return array
    *   An array of bundle information where the outer array is keyed by the
@@ -30,7 +30,7 @@ public function getAllBundleInfo();
    *   The inner arrays are associative arrays of bundle information, such as
    *   the label for the bundle.
    */
-  public function getBundleInfo($entity_type_id);
+  public function getBundleInfo($entity_type);
 
   /**
    * Clears static and persistent bundles.
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index cd0e06a61b..2c3340ec54 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -337,7 +337,7 @@ public function buildComponents(array &$build, array $entities, array $displays,
    * @param string $view_mode
    *   The view mode that should be used to prepare the entity.
    */
-  protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {}
+  protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { }
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php b/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php
index 2c5b8e0737..188aa5c366 100644
--- a/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php
+++ b/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php
@@ -5,4 +5,4 @@
 /**
  * Defines an exception thrown when an entity ID is too long.
  */
-class EntityTypeIdLengthException extends \Exception {}
+class EntityTypeIdLengthException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php b/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
index 2d4cce9bd8..079b42215a 100644
--- a/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
+++ b/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
@@ -5,4 +5,4 @@
 /**
  * Defines an exception thrown when an entity type definition is invalid.
  */
-class UnsupportedEntityTypeDefinitionException extends \Exception {}
+class UnsupportedEntityTypeDefinitionException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php
index b3fc12d6b6..c42e7c0de5 100644
--- a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php
@@ -18,9 +18,4 @@ public function createTranslation(ContentEntityInterface $entity, $langcode, arr
     //   https://www.drupal.org/node/2618436.
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function createWithSampleValues($bundle = FALSE, array $values = []) {}
-
 }
diff --git a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php
index cd2f26efbd..de77e09d20 100644
--- a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php
@@ -187,13 +187,6 @@ protected function has($id, EntityInterface $entity) {
     return $this->keyValueStore->has($id);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function hasData() {
-    return (bool) $this->keyValueStore->getAll();
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
index bd5a710373..eafb6d88bf 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php
@@ -46,7 +46,7 @@ class EntityAdapter extends TypedData implements \IteratorAggregate, ComplexData
   public static function createFromEntity(EntityInterface $entity) {
     $definition = EntityDataDefinition::create()
       ->setEntityTypeId($entity->getEntityTypeId())
-      ->setBundles([$entity->bundle() ]);
+      ->setBundles([ $entity->bundle() ]);
     $instance = new static($definition);
     $instance->setValue($entity);
     return $instance;
diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/Broken.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/Broken.php
index e8251e631f..f53eeb6189 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/Broken.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/Broken.php
@@ -2,7 +2,8 @@
 
 namespace Drupal\Core\Entity\Plugin\EntityReferenceSelection;
 
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase;
+use Drupal\Core\Database\Query\SelectInterface;
+use Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -13,19 +14,28 @@
  *   label = @Translation("Broken/Missing")
  * )
  */
-class Broken extends SelectionPluginBase {
+class Broken implements SelectionInterface {
 
   /**
    * {@inheritdoc}
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
     $form['selection_handler'] = [
       '#markup' => t('The selected selection handler is broken.'),
     ];
     return $form;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { }
+
   /**
    * {@inheritdoc}
    */
@@ -47,4 +57,9 @@ public function validateReferenceableEntities(array $ids) {
     return [];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function entityQueryAlter(SelectInterface $query) { }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
index 218131c2cd..e3b41b1bbe 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
@@ -4,17 +4,19 @@
 
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Database\Query\AlterableInterface;
+use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase;
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionTrait;
 use Drupal\Core\Entity\EntityReferenceSelection\SelectionWithAutocreateInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\user\EntityOwnerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Default plugin implementation of the Entity Reference Selection plugin.
@@ -36,51 +38,88 @@
  *   deriver = "Drupal\Core\Entity\Plugin\Derivative\DefaultSelectionDeriver"
  * )
  */
-class DefaultSelection extends SelectionPluginBase implements ContainerFactoryPluginInterface, SelectionWithAutocreateInterface {
-
-  use SelectionTrait {
-    // PHP 5.5.9 gets confused between SelectionPluginBase::__construct() and
-    // SelectionTrait::__construct() that's why we are renaming the
-    // SelectionTrait::__construct() to avoid the confusion.
-    // @todo Remove this in https://www.drupal.org/node/2670966.
-    SelectionTrait::__construct as private initialize;
+class DefaultSelection extends PluginBase implements SelectionInterface, SelectionWithAutocreateInterface, ContainerFactoryPluginInterface {
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * The module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * Constructs a new SelectionBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager service.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->entityManager = $entity_manager;
+    $this->moduleHandler = $module_handler;
+    $this->currentUser = $current_user;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) {
-    $this->initialize($configuration, $plugin_id, $plugin_definition, $entity_manager, $module_handler, $current_user);
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity.manager'),
+      $container->get('module_handler'),
+      $container->get('current_user')
+    );
   }
 
   /**
    * {@inheritdoc}
    */
-  public function defaultConfiguration() {
-    return [
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $entity_type_id = $this->configuration['target_type'];
+    $selection_handler_settings = $this->configuration['handler_settings'];
+    $entity_type = $this->entityManager->getDefinition($entity_type_id);
+    $bundles = $this->entityManager->getBundleInfo($entity_type_id);
+
+    // Merge-in default values.
+    $selection_handler_settings += [
       // For the 'target_bundles' setting, a NULL value is equivalent to "allow
       // entities from any bundle to be referenced" and an empty array value is
       // equivalent to "no entities from any bundle can be referenced".
       'target_bundles' => NULL,
       'sort' => [
         'field' => '_none',
-        'direction' => 'ASC',
       ],
       'auto_create' => FALSE,
       'auto_create_bundle' => NULL,
-    ] + parent::defaultConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    $configuration = $this->getConfiguration();
-    $entity_type_id = $configuration['target_type'];
-    $entity_type = $this->entityManager->getDefinition($entity_type_id);
-    $bundles = $this->entityManager->getBundleInfo($entity_type_id);
+    ];
 
     if ($entity_type->hasKey('bundle')) {
       $bundle_options = [];
@@ -93,7 +132,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#type' => 'checkboxes',
         '#title' => $this->t('Bundles'),
         '#options' => $bundle_options,
-        '#default_value' => (array) $configuration['target_bundles'],
+        '#default_value' => (array) $selection_handler_settings['target_bundles'],
         '#required' => TRUE,
         '#size' => 6,
         '#multiple' => TRUE,
@@ -150,7 +189,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         ] + $fields,
         '#ajax' => TRUE,
         '#limit_validation_errors' => [],
-        '#default_value' => $configuration['sort']['field'],
+        '#default_value' => $selection_handler_settings['sort']['field'],
       ];
 
       $form['sort']['settings'] = [
@@ -159,7 +198,12 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#process' => [[EntityReferenceItem::class, 'formProcessMergeParent']],
       ];
 
-      if ($configuration['sort']['field'] != '_none') {
+      if ($selection_handler_settings['sort']['field'] != '_none') {
+        // Merge-in default values.
+        $selection_handler_settings['sort'] += [
+          'direction' => 'ASC',
+        ];
+
         $form['sort']['settings']['direction'] = [
           '#type' => 'select',
           '#title' => $this->t('Sort direction'),
@@ -168,7 +212,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
             'ASC' => $this->t('Ascending'),
             'DESC' => $this->t('Descending'),
           ],
-          '#default_value' => $configuration['sort']['direction'],
+          '#default_value' => $selection_handler_settings['sort']['direction'],
         ];
       }
     }
@@ -176,17 +220,17 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     $form['auto_create'] = [
       '#type' => 'checkbox',
       '#title' => $this->t("Create referenced entities if they don't already exist"),
-      '#default_value' => $configuration['auto_create'],
+      '#default_value' => $selection_handler_settings['auto_create'],
       '#weight' => -2,
     ];
 
     if ($entity_type->hasKey('bundle')) {
-      $bundles = array_intersect_key($bundle_options, array_filter((array) $configuration['target_bundles']));
+      $bundles = array_intersect_key($bundle_options, array_filter((array) $selection_handler_settings['target_bundles']));
       $form['auto_create_bundle'] = [
         '#type' => 'select',
         '#title' => $this->t('Store new items in'),
         '#options' => $bundles,
-        '#default_value' => $configuration['auto_create_bundle'],
+        '#default_value' => $selection_handler_settings['auto_create_bundle'],
         '#access' => count($bundles) > 1,
         '#states' => [
           'visible' => [
@@ -204,8 +248,6 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
    * {@inheritdoc}
    */
   public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
-    parent::validateConfigurationForm($form, $form_state);
-
     // If no checkboxes were checked for 'target_bundles', store NULL ("all
     // bundles are referenceable") rather than empty array ("no bundle is
     // referenceable" - typically happens when all referenceable bundles have
@@ -219,6 +261,11 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
     $form_state->unsetValue(['settings', 'handler_settings', 'target_bundles_update']);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { }
+
   /**
    * Form element validation handler; Filters the #value property of an element.
    */
@@ -231,7 +278,7 @@ public static function elementValidateFilter(&$element, FormStateInterface $form
    * {@inheritdoc}
    */
   public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
-    $target_type = $this->getConfiguration()['target_type'];
+    $target_type = $this->configuration['target_type'];
 
     $query = $this->buildEntityQuery($match, $match_operator);
     if ($limit > 0) {
@@ -306,9 +353,8 @@ public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
    */
   public function validateReferenceableNewEntities(array $entities) {
     return array_filter($entities, function ($entity) {
-      $target_bundles = $this->getConfiguration()['target_bundles'];
-      if (isset($target_bundles)) {
-        return in_array($entity->bundle(), $target_bundles);
+      if (isset($this->configuration['handler_settings']['target_bundles'])) {
+        return in_array($entity->bundle(), $this->configuration['handler_settings']['target_bundles']);
       }
       return TRUE;
     });
@@ -328,23 +374,23 @@ public function validateReferenceableNewEntities(array $entities) {
    *   it.
    */
   protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
-    $configuration = $this->getConfiguration();
-    $target_type = $configuration['target_type'];
+    $target_type = $this->configuration['target_type'];
+    $handler_settings = $this->configuration['handler_settings'];
     $entity_type = $this->entityManager->getDefinition($target_type);
 
     $query = $this->entityManager->getStorage($target_type)->getQuery();
 
     // If 'target_bundles' is NULL, all bundles are referenceable, no further
     // conditions are needed.
-    if (is_array($configuration['target_bundles'])) {
+    if (isset($handler_settings['target_bundles']) && is_array($handler_settings['target_bundles'])) {
       // If 'target_bundles' is an empty array, no bundle is referenceable,
       // force the query to never return anything and bail out early.
-      if ($configuration['target_bundles'] === []) {
+      if ($handler_settings['target_bundles'] === []) {
         $query->condition($entity_type->getKey('id'), NULL, '=');
         return $query;
       }
       else {
-        $query->condition($entity_type->getKey('bundle'), $configuration['target_bundles'], 'IN');
+        $query->condition($entity_type->getKey('bundle'), $handler_settings['target_bundles'], 'IN');
       }
     }
 
@@ -360,13 +406,21 @@ protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS')
     $query->addMetaData('entity_reference_selection_handler', $this);
 
     // Add the sort option.
-    if ($configuration['sort']['field'] !== '_none') {
-      $query->sort($configuration['sort']['field'], $configuration['sort']['direction']);
+    if (!empty($handler_settings['sort'])) {
+      $sort_settings = $handler_settings['sort'];
+      if ($sort_settings['field'] != '_none') {
+        $query->sort($sort_settings['field'], $sort_settings['direction']);
+      }
     }
 
     return $query;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function entityQueryAlter(SelectInterface $query) { }
+
   /**
    * Helper method: Passes a query to the alteration system again.
    *
diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
index eacd94bcd9..311d309509 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
@@ -6,4 +6,4 @@
  * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
  *   Use \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection
  */
-class SelectionBase extends DefaultSelection {}
+class SelectionBase extends DefaultSelection { }
diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
index aef9fb0018..1e49ba12a3 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
@@ -121,29 +121,16 @@ public function validate($value, Constraint $constraint) {
 
     // Add violations on deltas with a target_id that is not valid.
     if ($target_ids) {
-      // Get a list of pre-existing references.
-      $previously_referenced_ids = [];
-      if ($value->getParent() && ($entity = $value->getEntity()) && !$entity->isNew()) {
-        $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
-        foreach ($existing_entity->{$value->getFieldDefinition()->getName()}->getValue() as $item) {
-          $previously_referenced_ids[$item['target_id']] = $item['target_id'];
-        }
-      }
-
       $valid_target_ids = $handler->validateReferenceableEntities($target_ids);
       if ($invalid_target_ids = array_diff($target_ids, $valid_target_ids)) {
         // For accuracy of the error message, differentiate non-referenceable
         // and non-existent entities.
-        $existing_entities = $this->entityTypeManager->getStorage($target_type_id)->loadMultiple($invalid_target_ids);
+        $target_type = $this->entityTypeManager->getDefinition($target_type_id);
+        $existing_ids = $this->entityTypeManager->getStorage($target_type_id)->getQuery()
+          ->condition($target_type->getKey('id'), $invalid_target_ids, 'IN')
+          ->execute();
         foreach ($invalid_target_ids as $delta => $target_id) {
-          // Check if any of the invalid existing references are simply not
-          // accessible by the user, in which case they need to be excluded from
-          // validation
-          if (isset($previously_referenced_ids[$target_id]) && isset($existing_entities[$target_id]) && !$existing_entities[$target_id]->access('view')) {
-            continue;
-          }
-
-          $message = isset($existing_entities[$target_id]) ? $constraint->message : $constraint->nonExistingMessage;
+          $message = in_array($target_id, $existing_ids) ? $constraint->message : $constraint->nonExistingMessage;
           $this->context->buildViolation($message)
             ->setParameter('%type', $target_type_id)
             ->setParameter('%id', $target_id)
diff --git a/core/lib/Drupal/Core/Entity/Query/QueryBase.php b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
index 38deabd8db..ed3d12b2c8 100644
--- a/core/lib/Drupal/Core/Entity/Query/QueryBase.php
+++ b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
@@ -348,14 +348,14 @@ public function hasTag($tag) {
    * {@inheritdoc}
    */
   public function hasAllTags() {
-    return !(boolean) array_diff(func_get_args(), array_keys($this->alterTags));
+    return !(boolean)array_diff(func_get_args(), array_keys($this->alterTags));
   }
 
   /**
    * {@inheritdoc}
    */
   public function hasAnyTag() {
-    return (boolean) array_intersect(func_get_args(), array_keys($this->alterTags));
+    return (boolean)array_intersect(func_get_args(), array_keys($this->alterTags));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Query/QueryException.php b/core/lib/Drupal/Core/Entity/Query/QueryException.php
index 5a886baf02..2f8741d1a1 100644
--- a/core/lib/Drupal/Core/Entity/Query/QueryException.php
+++ b/core/lib/Drupal/Core/Entity/Query/QueryException.php
@@ -9,4 +9,4 @@
  * conditions, and will raise a QueryException when an unsupported
  * condition was specified.
  */
-class QueryException extends \Exception {}
+class QueryException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php b/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
index c791bb5552..2d2aacfdf3 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
@@ -172,7 +172,7 @@ protected function result() {
     }
     $return = [];
     foreach ($this->sqlQuery->execute() as $row) {
-      $return[] = (array) $row;
+      $return[] = (array)$row;
     }
     return $return;
   }
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
index 0c54dc4588..e218247327 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
@@ -8,7 +8,6 @@
 use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
 use Drupal\Core\Entity\Sql\TableMappingInterface;
 use Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface;
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
 
 /**
@@ -22,13 +21,10 @@ class Tables implements TablesInterface {
   protected $sqlQuery;
 
   /**
-   * Entity table array.
+   * Entity table array, key is table name, value is alias.
    *
    * This array contains at most two entries: one for the data, one for the
-   * properties. Its keys are unique references to the tables, values are
-   * aliases.
-   *
-   * @see \Drupal\Core\Entity\Query\Sql\Tables::ensureEntityTable().
+   * properties.
    *
    * @var array
    */
@@ -277,7 +273,7 @@ public function addField($field, $type, $langcode) {
           $entity_type = $this->entityManager->getDefinition($entity_type_id);
           $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id);
           // Add the new entity base table using the table and sql column.
-          $base_table = $this->addNextBaseTable($entity_type, $table, $sql_column, $field_storage);
+          $base_table = $this->addNextBaseTable($entity_type, $table, $sql_column);
           $propertyDefinitions = [];
           $key++;
           $index_prefix .= "$next_index_prefix.";
@@ -300,49 +296,21 @@ public function isFieldCaseSensitive($field_name) {
   }
 
   /**
-   * Joins the entity table, if necessary, and returns the alias for it.
+   * Join entity table if necessary and return the alias for it.
    *
-   * @param string $index_prefix
-   *   The table array index prefix. For a base table this will be empty,
-   *   for a target entity reference like 'field_tags.entity:taxonomy_term.name'
-   *   this will be 'entity:taxonomy_term.target_id.'.
    * @param string $property
-   *   The field property/column.
-   * @param string $type
-   *   The join type, can either be INNER or LEFT.
-   * @param string $langcode
-   *   The langcode we use on the join.
-   * @param string $base_table
-   *   The table to join to. It can be either the table name, its alias or the
-   *   'base_table' placeholder.
-   * @param string $id_field
-   *   The name of the ID field/property for the current entity. For instance:
-   *   tid, nid, etc.
-   * @param array $entity_tables
-   *   Array of entity tables (data and base tables) where decide the entity
-   *   property will be queried from. The first table containing the property
-   *   will be used, so the order is important and the data table is always
-   *   preferred.
    *
    * @return string
-   *   The alias of the joined table.
    *
    * @throws \Drupal\Core\Entity\Query\QueryException
-   *   When an invalid property has been passed.
    */
   protected function ensureEntityTable($index_prefix, $property, $type, $langcode, $base_table, $id_field, $entity_tables) {
     foreach ($entity_tables as $table => $mapping) {
       if (isset($mapping[$property])) {
-        // Ensure a table joined multiple times through different index prefixes
-        // has unique entityTables entries by concatenating the index prefix
-        // and the base table alias. In this way i.e. if we join to the same
-        // entity table several times for different entity reference fields,
-        // each join gets a separate alias.
-        $key = $index_prefix . ($base_table === 'base_table' ? $table : $base_table);
-        if (!isset($this->entityTables[$key])) {
-          $this->entityTables[$key] = $this->addJoin($type, $table, "%alias.$id_field = $base_table.$id_field", $langcode);
+        if (!isset($this->entityTables[$index_prefix . $table])) {
+          $this->entityTables[$index_prefix . $table] = $this->addJoin($type, $table, "%alias.$id_field = $base_table.$id_field", $langcode);
         }
-        return $this->entityTables[$key];
+        return $this->entityTables[$index_prefix . $table];
       }
     }
     throw new QueryException("'$property' not found");
@@ -371,23 +339,6 @@ protected function ensureFieldTable($index_prefix, &$field, $type, $langcode, $b
     return $this->fieldTables[$index_prefix . $field_name];
   }
 
-  /**
-   * Adds a join to a given table.
-   *
-   * @param string $type
-   *   The join type.
-   * @param string $table
-   *   The table to join to.
-   * @param string $join_condition
-   *   The condition on which to join to.
-   * @param string $langcode
-   *   The langcode we use on the join.
-   * @param string|null $delta
-   *   (optional) A delta which should be used as additional condition.
-   *
-   * @return string
-   *   Returns the alias of the joined table.
-   */
   protected function addJoin($type, $table, $join_condition, $langcode, $delta = NULL) {
     $arguments = [];
     if ($langcode) {
@@ -444,13 +395,11 @@ protected function getTableMapping($table, $entity_type_id) {
    *   This is the table being joined, in the above example, {users}.
    * @param string $sql_column
    *   This is the SQL column in the existing table being joined to.
-   * @param \Drupal\Core\Field\FieldStorageDefinitionInterface $field_storage
-   *   The field storage definition for the field referencing this column.
    *
    * @return string
    *   The alias of the next entity table joined in.
    */
-  protected function addNextBaseTable(EntityType $entity_type, $table, $sql_column, FieldStorageDefinitionInterface $field_storage) {
+  protected function addNextBaseTable(EntityType $entity_type, $table, $sql_column) {
     $join_condition = '%alias.' . $entity_type->getKey('id') . " = $table.$sql_column";
     return $this->sqlQuery->leftJoin($entity_type->getBaseTable(), NULL, $join_condition);
   }
diff --git a/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php b/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
index 70a3b4e66f..4fd6a32dfb 100644
--- a/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
+++ b/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
@@ -296,15 +296,9 @@ public function requiresDedicatedTableStorage(FieldStorageDefinitionInterface $s
    */
   public function getDedicatedTableNames() {
     $table_mapping = $this;
-    $definitions = array_filter($this->fieldStorageDefinitions, function($definition) use ($table_mapping) {
-      return $table_mapping->requiresDedicatedTableStorage($definition);
-    });
-    $data_tables = array_map(function($definition) use ($table_mapping) {
-      return $table_mapping->getDedicatedDataTableName($definition);
-    }, $definitions);
-    $revision_tables = array_map(function($definition) use ($table_mapping) {
-      return $table_mapping->getDedicatedRevisionTableName($definition);
-    }, $definitions);
+    $definitions = array_filter($this->fieldStorageDefinitions, function($definition) use ($table_mapping) { return $table_mapping->requiresDedicatedTableStorage($definition); });
+    $data_tables = array_map(function($definition) use ($table_mapping) { return $table_mapping->getDedicatedDataTableName($definition); }, $definitions);
+    $revision_tables = array_map(function($definition) use ($table_mapping) { return $table_mapping->getDedicatedRevisionTableName($definition); }, $definitions);
     $dedicated_tables = array_merge(array_values($data_tables), array_values($revision_tables));
     return $dedicated_tables;
   }
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index 22238d4bf5..1172406e34 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -1540,12 +1540,12 @@ public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definiti
   /**
    * {@inheritdoc}
    */
-  public function onBundleCreate($bundle, $entity_type_id) {}
+  public function onBundleCreate($bundle, $entity_type_id) { }
 
   /**
    * {@inheritdoc}
    */
-  public function onBundleDelete($bundle, $entity_type_id) {}
+  public function onBundleDelete($bundle, $entity_type_id) { }
 
   /**
    * {@inheritdoc}
@@ -1727,7 +1727,7 @@ public function countFieldData($storage_definition, $as_bool = FALSE) {
    */
   protected function storageDefinitionIsDeleted(FieldStorageDefinitionInterface $storage_definition) {
     // Configurable fields are marked for deletion.
-    if ($storage_definition instanceof FieldStorageConfigInterface) {
+    if ($storage_definition instanceOf FieldStorageConfigInterface) {
       return $storage_definition->isDeleted();
     }
     // For non configurable fields check whether they are still in the last
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
index a18a3c5310..915af91b65 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -1529,9 +1529,7 @@ protected function createEntitySchemaIndexes(array $entity_schema, FieldStorageD
             // involving them. Only indexes for which all columns exist are
             // actually created.
             $create = FALSE;
-            $specifier_columns = array_map(function($item) {
-              return is_string($item) ? $item : reset($item);
-            }, $specifier);
+            $specifier_columns = array_map(function($item) { return is_string($item) ? $item : reset($item); }, $specifier);
             if (!isset($column_names) || array_intersect($specifier_columns, $column_names)) {
               $create = TRUE;
               foreach ($specifier_columns as $specifier_column_name) {
@@ -1580,9 +1578,7 @@ protected function deleteEntitySchemaIndexes(array $entity_schema_data, FieldSto
       foreach ($index_keys as $key => $drop_method) {
         if (!empty($schema[$key])) {
           foreach ($schema[$key] as $name => $specifier) {
-            $specifier_columns = array_map(function($item) {
-              return is_string($item) ? $item : reset($item);
-            }, $specifier);
+            $specifier_columns = array_map(function($item) { return is_string($item) ? $item : reset($item); }, $specifier);
             if (!isset($column_names) || array_intersect($specifier_columns, $column_names)) {
               $schema_handler->{$drop_method}($table_name, $name);
             }
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
index 60712eeb21..a589f5677b 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
@@ -346,9 +346,7 @@ protected function copyData(array &$sandbox) {
    *   An array of updated field storage definitions.
    */
   protected function updateFieldStorageDefinitionsToRevisionable(ContentEntityTypeInterface $entity_type, array $storage_definitions, array $fields_to_update = [], $update_cached_definitions = TRUE) {
-    $updated_storage_definitions = array_map(function ($storage_definition) {
-      return clone $storage_definition;
-    }, $storage_definitions);
+    $updated_storage_definitions = array_map(function ($storage_definition) { return clone $storage_definition; }, $storage_definitions);
 
     // Update the 'langcode' field manually, as it is configured in the base
     // content entity field definitions.
diff --git a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
index c2688edeae..ba82988a14 100644
--- a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
@@ -5,7 +5,6 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Render\BareHtmlPageRendererInterface;
-use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Routing\RouteMatch;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -59,13 +58,6 @@ class MaintenanceModeSubscriber implements EventSubscriberInterface {
    */
   protected $bareHtmlPageRenderer;
 
-  /**
-   * The messenger.
-   *
-   * @var \Drupal\Core\Messenger\MessengerInterface
-   */
-  protected $messenger;
-
   /**
    * Constructs a new MaintenanceModeSubscriber.
    *
@@ -81,17 +73,14 @@ class MaintenanceModeSubscriber implements EventSubscriberInterface {
    *   The current user.
    * @param \Drupal\Core\Render\BareHtmlPageRendererInterface $bare_html_page_renderer
    *   The bare HTML page renderer.
-   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
-   *   The messenger.
    */
-  public function __construct(MaintenanceModeInterface $maintenance_mode, ConfigFactoryInterface $config_factory, TranslationInterface $translation, UrlGeneratorInterface $url_generator, AccountInterface $account, BareHtmlPageRendererInterface $bare_html_page_renderer, MessengerInterface $messenger) {
+  public function __construct(MaintenanceModeInterface $maintenance_mode, ConfigFactoryInterface $config_factory, TranslationInterface $translation, UrlGeneratorInterface $url_generator, AccountInterface $account, BareHtmlPageRendererInterface $bare_html_page_renderer) {
     $this->maintenanceMode = $maintenance_mode;
     $this->config = $config_factory;
     $this->stringTranslation = $translation;
     $this->urlGenerator = $url_generator;
     $this->account = $account;
     $this->bareHtmlPageRenderer = $bare_html_page_renderer;
-    $this->messenger = $messenger;
   }
 
   /**
@@ -129,10 +118,10 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) {
         // settings page.
         if ($route_match->getRouteName() != 'system.site_maintenance_mode') {
           if ($this->account->hasPermission('administer site configuration')) {
-            $this->messenger->addMessage($this->t('Operating in maintenance mode. <a href=":url">Go online.</a>', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE);
+            $this->drupalSetMessage($this->t('Operating in maintenance mode. <a href=":url">Go online.</a>', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE);
           }
           else {
-            $this->messenger->addMessage($this->t('Operating in maintenance mode.'), 'status', FALSE);
+            $this->drupalSetMessage($this->t('Operating in maintenance mode.'), 'status', FALSE);
           }
         }
       }
@@ -151,6 +140,13 @@ protected function getSiteMaintenanceMessage() {
     ]);
   }
 
+  /**
+   * Wraps the drupal_set_message function.
+   */
+  protected function drupalSetMessage($message = NULL, $type = 'status', $repeat = FALSE) {
+    return drupal_set_message($message, $type, $repeat);
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php
index ed7312f087..8948258400 100644
--- a/core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php
@@ -25,7 +25,7 @@ class PsrResponseSubscriber implements EventSubscriberInterface {
    * Constructs a new PathRootsSubscriber instance.
    *
    * @param \Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface $http_foundation_factory
-   *   The httpFoundation factory.
+   *    The httpFoundation factory.
    */
   public function __construct(HttpFoundationFactoryInterface $http_foundation_factory) {
     $this->httpFoundationFactory = $http_foundation_factory;
diff --git a/core/lib/Drupal/Core/Executable/ExecutablePluginBase.php b/core/lib/Drupal/Core/Executable/ExecutablePluginBase.php
index 3c36eac512..0b758c60c7 100644
--- a/core/lib/Drupal/Core/Executable/ExecutablePluginBase.php
+++ b/core/lib/Drupal/Core/Executable/ExecutablePluginBase.php
@@ -60,8 +60,8 @@ public function getConfig() {
   /**
    * Sets the value of a particular configuration option.
    *
-   * @param string $key
-   *   The key of the configuration option to set.
+   * @param string $name
+   *   The name of the configuration option to set.
    * @param mixed $value
    *   The value to set.
    *
diff --git a/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php b/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php
index ceb2d1cac6..bea8ce15ca 100644
--- a/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php
+++ b/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php
@@ -5,4 +5,4 @@
 /**
  * Exception thrown when the extension's name length exceeds the allowed maximum.
  */
-class ExtensionNameLengthException extends \Exception {}
+class ExtensionNameLengthException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index d8d36088ac..cfbaa61a8e 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -106,7 +106,7 @@ class ModuleHandler implements ModuleHandlerInterface {
    * @see \Drupal\Core\DrupalKernel
    * @see \Drupal\Core\CoreServiceProvider
    */
-  public function __construct($root, array $module_list, CacheBackendInterface $cache_backend) {
+  public function __construct($root, array $module_list = [], CacheBackendInterface $cache_backend) {
     $this->root = $root;
     $this->moduleList = [];
     foreach ($module_list as $name => $module) {
diff --git a/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php b/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php
index 6745a39b8b..ca0099f17c 100644
--- a/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php
+++ b/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php
@@ -5,4 +5,4 @@
 /**
  * Defines an exception thrown when uninstalling a module that did not validate.
  */
-class ModuleUninstallValidatorException extends \InvalidArgumentException {}
+class ModuleUninstallValidatorException extends \InvalidArgumentException { }
diff --git a/core/lib/Drupal/Core/Extension/module.api.php b/core/lib/Drupal/Core/Extension/module.api.php
index 0830f32872..944d3547b7 100644
--- a/core/lib/Drupal/Core/Extension/module.api.php
+++ b/core/lib/Drupal/Core/Extension/module.api.php
@@ -449,7 +449,8 @@ function hook_install_tasks(&$install_state) {
     // tasks are complete, with a link to reload the current page and therefore
     // pass on to the final Drupal installation tasks when the user is ready to
     // do so).
-    'myprofile_final_site_setup' => [],
+    'myprofile_final_site_setup' => [
+    ],
   ];
   return $tasks;
 }
diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
index 991385f78b..25df63b5bd 100644
--- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
@@ -838,21 +838,4 @@ public function setStorageRequired($required) {
     return $this;
   }
 
-  /**
-   * Magic method: Implements a deep clone.
-   */
-  public function __clone() {
-    parent::__clone();
-
-    // The itemDefinition (\Drupal\Core\Field\TypedData\FieldItemDataDefinition)
-    // has a property fieldDefinition, which is a recursive reference to the
-    // parent BaseFieldDefinition, therefore the reference to the old object has
-    // to be overwritten with a reference to the cloned one.
-    $this->itemDefinition->setFieldDefinition($this);
-    // Reset the static cache of the field property definitions in order to
-    // ensure that the clone will reference different field property definitions
-    // objects.
-    $this->propertyDefinitions = NULL;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Field/FieldItemBase.php b/core/lib/Drupal/Core/Field/FieldItemBase.php
index 5aa4ad11d3..84d73ec5b3 100644
--- a/core/lib/Drupal/Core/Field/FieldItemBase.php
+++ b/core/lib/Drupal/Core/Field/FieldItemBase.php
@@ -191,27 +191,27 @@ public function view($display_options = []) {
   /**
    * {@inheritdoc}
    */
-  public function preSave() {}
+  public function preSave() { }
 
   /**
    * {@inheritdoc}
    */
-  public function postSave($update) {}
+  public function postSave($update) { }
 
   /**
    * {@inheritdoc}
    */
-  public function delete() {}
+  public function delete() { }
 
   /**
    * {@inheritdoc}
    */
-  public static function generateSampleValue(FieldDefinitionInterface $field_definition) {}
+  public static function generateSampleValue(FieldDefinitionInterface $field_definition) { }
 
   /**
    * {@inheritdoc}
    */
-  public function deleteRevision() {}
+  public function deleteRevision() { }
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Field/FieldItemList.php b/core/lib/Drupal/Core/Field/FieldItemList.php
index 5d13a5e5cc..a1a1ebdb9e 100644
--- a/core/lib/Drupal/Core/Field/FieldItemList.php
+++ b/core/lib/Drupal/Core/Field/FieldItemList.php
@@ -259,7 +259,7 @@ public function view($display_options = []) {
    */
   public function generateSampleItems($count = 1) {
     $field_definition = $this->getFieldDefinition();
-    $field_type_class = $field_definition->getItemDefinition()->getClass();
+    $field_type_class = \Drupal::service('plugin.manager.field.field_type')->getPluginClass($field_definition->getType());
     for ($delta = 0; $delta < $count; $delta++) {
       $values[$delta] = $field_type_class::generateSampleValue($field_definition);
     }
diff --git a/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php b/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
index 03b5255b37..6714794f10 100644
--- a/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
+++ b/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
@@ -33,7 +33,7 @@
    * @return array
    *   Array of values with field names as keys.
    */
-  abstract protected function getFieldsToUpdate();
+  protected abstract function getFieldsToUpdate();
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Field/FormatterBase.php b/core/lib/Drupal/Core/Field/FormatterBase.php
index eec3438a5c..3b3abcc619 100644
--- a/core/lib/Drupal/Core/Field/FormatterBase.php
+++ b/core/lib/Drupal/Core/Field/FormatterBase.php
@@ -125,7 +125,7 @@ public function settingsSummary() {
   /**
    * {@inheritdoc}
    */
-  public function prepareView(array $entities_items) {}
+  public function prepareView(array $entities_items) { }
 
   /**
    * Returns the array of field settings.
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
index 0ca145a165..aa8f82934a 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
@@ -158,7 +158,7 @@ public function prepareView(array $entities_items) {
    * Returns whether the entity referenced by an item needs to be loaded.
    *
    * @param \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $item
-   *   The item to check.
+   *    The item to check.
    *
    * @return bool
    *   TRUE if the entity needs to be loaded.
@@ -175,7 +175,7 @@ protected function needsEntityLoad(EntityReferenceItem $item) {
    * granting access.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity to check.
+   *    The entity to check.
    *
    * @return \Drupal\Core\Access\AccessResult
    *   A cacheable access result.
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
index a559d9e870..bb773cdeab 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
@@ -193,6 +193,6 @@ protected function sanitizeLabel(&$label) {
    * @return string|null
    *   Either a label of the empty option, or NULL.
    */
-  protected function getEmptyLabel() {}
+  protected function getEmptyLabel() { }
 
 }
diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/EntityReference.php b/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/EntityReference.php
deleted file mode 100644
index 2e61589fb5..0000000000
--- a/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/EntityReference.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-namespace Drupal\Core\Field\Plugin\migrate\field\d7;
-
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "entityreference",
- *   type_map = {
- *     "entityreference" = "entity_reference",
- *   },
- *   core = {7}
- * )
- */
-class EntityReference extends FieldPluginBase {}
diff --git a/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/NumberField.php b/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/NumberField.php
deleted file mode 100644
index 90803288e4..0000000000
--- a/core/lib/Drupal/Core/Field/Plugin/migrate/field/d7/NumberField.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Drupal\Core\Field\Plugin\migrate\field\d7;
-
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "number_default",
- *   type_map = {
- *     "number_integer" = "integer",
- *     "number_decimal" = "decimal",
- *     "number_float" = "float",
- *   },
- *   core = {7}
- * )
- */
-class NumberField extends FieldPluginBase {}
diff --git a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php b/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
index bc8f9c0a2b..4a6d8775b1 100644
--- a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
+++ b/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinition.php
@@ -3,6 +3,7 @@
 namespace Drupal\Core\Field\TypedData;
 
 use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataDefinition;
 
 /**
@@ -13,7 +14,7 @@
  * by the field definitions, this class does not benefit and thus does not
  * extend from MapDefinition or ComplexDataDefinitionBase.
  */
-class FieldItemDataDefinition extends DataDefinition implements FieldItemDataDefinitionInterface {
+class FieldItemDataDefinition extends DataDefinition implements ComplexDataDefinitionInterface {
 
   /**
    * The field definition the item definition belongs to.
@@ -73,18 +74,13 @@ public function getMainPropertyName() {
   }
 
   /**
-   * {@inheritdoc}
+   * Gets the field item's field definition.
+   *
+   * @return \Drupal\Core\Field\FieldDefinitionInterface
+   *   The field definition for this field item.
    */
   public function getFieldDefinition() {
     return $this->fieldDefinition;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function setFieldDefinition($field_definition) {
-    $this->fieldDefinition = $field_definition;
-    return $this;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinitionInterface.php b/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinitionInterface.php
deleted file mode 100644
index e7571194ea..0000000000
--- a/core/lib/Drupal/Core/Field/TypedData/FieldItemDataDefinitionInterface.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-namespace Drupal\Core\Field\TypedData;
-
-use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
-
-/**
- * Interface for field item data definitions.
- *
- * @ingroup typed_data
- */
-interface FieldItemDataDefinitionInterface extends ComplexDataDefinitionInterface {
-
-  /**
-   * Gets the field item's field definition.
-   *
-   * @return \Drupal\Core\Field\FieldDefinitionInterface
-   *   The field definition for this field item.
-   */
-  public function getFieldDefinition();
-
-  /**
-   * Sets the field item's field definition.
-   *
-   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
-   *   The new field definition to assign to this item definition.
-   *
-   * @return static
-   *   The object itself for chaining.
-   *
-   * @internal
-   *   Should not be used in user code. It allows to overwrite the item
-   *   definition property of the cloned field definition.
-   */
-  public function setFieldDefinition($field_definition);
-
-}
diff --git a/core/lib/Drupal/Core/FileTransfer/FTPExtension.php b/core/lib/Drupal/Core/FileTransfer/FTPExtension.php
index 99c1c06881..9f189638ad 100644
--- a/core/lib/Drupal/Core/FileTransfer/FTPExtension.php
+++ b/core/lib/Drupal/Core/FileTransfer/FTPExtension.php
@@ -108,7 +108,7 @@ public function chmodJailed($path, $mode, $recursive) {
     if ($this->isDirectory($path) && $recursive) {
       $filelist = @ftp_nlist($this->connection, $path);
       if (!$filelist) {
-        // empty directory - returns false
+        //empty directory - returns false
         return;
       }
       foreach ($filelist as $file) {
diff --git a/core/lib/Drupal/Core/FileTransfer/FileTransfer.php b/core/lib/Drupal/Core/FileTransfer/FileTransfer.php
index af395a20bb..25014f1338 100644
--- a/core/lib/Drupal/Core/FileTransfer/FileTransfer.php
+++ b/core/lib/Drupal/Core/FileTransfer/FileTransfer.php
@@ -115,7 +115,7 @@ public function __get($name) {
    * @param string $destination
    *   The destination path.
    */
-  final public function copyDirectory($source, $destination) {
+  public final function copyDirectory($source, $destination) {
     $source = $this->sanitizePath($source);
     $destination = $this->fixRemotePath($destination);
     $this->checkPath($destination);
@@ -136,7 +136,7 @@ public function __get($name) {
    *
    * @see http://php.net/chmod
    */
-  final public function chmod($path, $mode, $recursive = FALSE) {
+  public final function chmod($path, $mode, $recursive = FALSE) {
     if (!($this instanceof ChmodInterface)) {
       throw new FileTransferException('Unable to change file permissions');
     }
@@ -152,7 +152,7 @@ public function __get($name) {
    * @param string $directory
    *   The directory to be created.
    */
-  final public function createDirectory($directory) {
+  public final function createDirectory($directory) {
     $directory = $this->fixRemotePath($directory);
     $this->checkPath($directory);
     $this->createDirectoryJailed($directory);
@@ -164,7 +164,7 @@ public function __get($name) {
    * @param string $directory
    *   The directory to be removed.
    */
-  final public function removeDirectory($directory) {
+  public final function removeDirectory($directory) {
     $directory = $this->fixRemotePath($directory);
     $this->checkPath($directory);
     $this->removeDirectoryJailed($directory);
@@ -178,7 +178,7 @@ public function __get($name) {
    * @param string $destination
    *   The destination file.
    */
-  final public function copyFile($source, $destination) {
+  public final function copyFile($source, $destination) {
     $source = $this->sanitizePath($source);
     $destination = $this->fixRemotePath($destination);
     $this->checkPath($destination);
@@ -191,7 +191,7 @@ public function __get($name) {
    * @param string $destination
    *   The destination file to be removed.
    */
-  final public function removeFile($destination) {
+  public final function removeFile($destination) {
     $destination = $this->fixRemotePath($destination);
     $this->checkPath($destination);
     $this->removeFileJailed($destination);
@@ -205,7 +205,7 @@ public function __get($name) {
    *
    * @throws \Drupal\Core\FileTransfer\FileTransferException
    */
-  final protected function checkPath($path) {
+  protected final function checkPath($path) {
     $full_jail = $this->chroot . $this->jail;
     $full_path = drupal_realpath(substr($this->chroot . $path, 0, strlen($full_jail)));
     $full_path = $this->fixRemotePath($full_path, FALSE);
@@ -229,7 +229,7 @@ public function __get($name) {
    * @return string
    *   The modified path.
    */
-  final protected function fixRemotePath($path, $strip_chroot = TRUE) {
+  protected final function fixRemotePath($path, $strip_chroot = TRUE) {
     $path = $this->sanitizePath($path);
     $path = preg_replace('|^([a-z]{1}):|i', '', $path); // Strip out windows driveletter if its there.
     if ($strip_chroot) {
diff --git a/core/lib/Drupal/Core/Flood/DatabaseBackend.php b/core/lib/Drupal/Core/Flood/DatabaseBackend.php
index cb1fc92503..12e9102af0 100644
--- a/core/lib/Drupal/Core/Flood/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Flood/DatabaseBackend.php
@@ -185,8 +185,6 @@ protected function catchException(\Exception $e) {
 
   /**
    * Defines the schema for the flood table.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     return [
diff --git a/core/lib/Drupal/Core/Flood/MemoryBackend.php b/core/lib/Drupal/Core/Flood/MemoryBackend.php
index 9899e35e7e..ddb42bc4cd 100644
--- a/core/lib/Drupal/Core/Flood/MemoryBackend.php
+++ b/core/lib/Drupal/Core/Flood/MemoryBackend.php
@@ -61,9 +61,6 @@ public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL)
     if (!isset($identifier)) {
       $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
     }
-    if (!isset($this->events[$name][$identifier])) {
-      return $threshold > 0;
-    }
     $limit = microtime(TRUE) - $window;
     $number = count(array_filter($this->events[$name][$identifier], function ($timestamp) use ($limit) {
       return $timestamp > $limit;
diff --git a/core/lib/Drupal/Core/Form/FormState.php b/core/lib/Drupal/Core/Form/FormState.php
index 5585a76234..b78efb30d1 100644
--- a/core/lib/Drupal/Core/Form/FormState.php
+++ b/core/lib/Drupal/Core/Form/FormState.php
@@ -1186,7 +1186,7 @@ public function setCleanValueKeys(array $cleanValueKeys) {
    */
   public function addCleanValueKey($cleanValueKey) {
     $keys = $this->getCleanValueKeys();
-    $this->setCleanValueKeys(array_merge((array) $keys, [$cleanValueKey]));
+    $this->setCleanValueKeys(array_merge((array)$keys, [$cleanValueKey]));
     return $this;
   }
 
diff --git a/core/lib/Drupal/Core/Form/form.api.php b/core/lib/Drupal/Core/Form/form.api.php
index 554e2710d7..ba0e345e02 100644
--- a/core/lib/Drupal/Core/Form/form.api.php
+++ b/core/lib/Drupal/Core/Form/form.api.php
@@ -15,7 +15,7 @@
  *
  * Callback for batch_set().
  *
- * @param $multiple_params
+ * @param $MULTIPLE_PARAMS
  *   Additional parameters specific to the batch. These are specified in the
  *   array passed to batch_set().
  * @param array|\ArrayAccess $context
@@ -54,7 +54,7 @@
  *   It is discouraged to typehint this parameter as an array, to allow an
  *   object implement \ArrayAccess to be passed.
  */
-function callback_batch_operation($multiple_params, &$context) {
+function callback_batch_operation($MULTIPLE_PARAMS, &$context) {
   $node_storage = \Drupal::entityTypeManager()->getStorage('node');
   $database = \Drupal::database();
 
diff --git a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
index a91069328a..72f3d29256 100644
--- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
+++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
@@ -73,7 +73,7 @@ public function __construct(array $configuration, $plugin_id, array $plugin_defi
   /**
    * {@inheritdoc}
    */
-  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {  }
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitOperationBase.php b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitOperationBase.php
index dcc3b3d121..c9a93ffe4d 100644
--- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitOperationBase.php
+++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitOperationBase.php
@@ -166,7 +166,7 @@ protected function validateArguments(array $arguments) {
   /**
    * {@inheritdoc}
    */
-  final public function apply(array $arguments) {
+  public final function apply(array $arguments) {
     $arguments = $this->prepareArguments($arguments);
     $arguments = $this->validateArguments($arguments);
     return $this->execute($arguments);
diff --git a/core/lib/Drupal/Core/Installer/Exception/InstallerException.php b/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
index 29136e0710..32e574c6d5 100644
--- a/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
+++ b/core/lib/Drupal/Core/Installer/Exception/InstallerException.php
@@ -20,10 +20,10 @@ class InstallerException extends \RuntimeException {
   /**
    * Constructs a new installer exception.
    *
-   * @param string $message
-   *   The exception message.
    * @param string $title
-   *   (optional) The page title. Defaults to 'Error'.
+   *   The page title.
+   * @param string $message
+   *   (optional) The exception message. Defaults to 'Error'.
    * @param int $code
    *   (optional) The exception code. Defaults to 0.
    * @param \Exception $previous
diff --git a/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php b/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php
index 08872d0425..5ea8cbc9dc 100644
--- a/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php
+++ b/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php
@@ -59,17 +59,17 @@ public function getAll() {
   /**
    * {@inheritdoc}
    */
-  public function set($key, $value) {}
+  public function set($key, $value) { }
 
   /**
    * {@inheritdoc}
    */
-  public function setIfNotExists($key, $value) {}
+  public function setIfNotExists($key, $value) { }
 
   /**
    * {@inheritdoc}
    */
-  public function setMultiple(array $data) {}
+  public function setMultiple(array $data) { }
 
   /**
    * {@inheritdoc}
@@ -80,17 +80,17 @@ public function rename($key, $new_key) {
   /**
    * {@inheritdoc}
    */
-  public function delete($key) {}
+  public function delete($key) { }
 
   /**
    * {@inheritdoc}
    */
-  public function deleteMultiple(array $keys) {}
+  public function deleteMultiple(array $keys) { }
 
   /**
    * {@inheritdoc}
    */
-  public function deleteAll() {}
+  public function deleteAll() { }
 
   /**
    * {@inheritdoc}
@@ -102,16 +102,16 @@ public function getCollectionName() {
   /**
    * {@inheritdoc}
    */
-  public function setMultipleWithExpire(array $data, $expire) {}
+  public function setMultipleWithExpire(array $data, $expire) { }
 
   /**
    * {@inheritdoc}
    */
-  public function setWithExpire($key, $value, $expire) {}
+  public function setWithExpire($key, $value, $expire) { }
 
   /**
    * {@inheritdoc}
    */
-  public function setWithExpireIfNotExists($key, $value, $expire) {}
+  public function setWithExpireIfNotExists($key, $value, $expire) { }
 
 }
diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index f4804caf42..7f3ddc816b 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -376,7 +376,7 @@ public function getConfigOverrideLanguage() {
    * The locked languages are removed by default.
    *
    * @param \Drupal\Core\Language\LanguageInterface[] $languages
-   *   Array with languages to be filtered.
+   *    Array with languages to be filtered.
    * @param int $flags
    *   (optional) Specifies the state of the languages that have to be returned.
    *   It can be: LanguageInterface::STATE_CONFIGURABLE,
diff --git a/core/lib/Drupal/Core/Layout/LayoutDefinition.php b/core/lib/Drupal/Core/Layout/LayoutDefinition.php
index c804776840..686cf81538 100644
--- a/core/lib/Drupal/Core/Layout/LayoutDefinition.php
+++ b/core/lib/Drupal/Core/Layout/LayoutDefinition.php
@@ -375,11 +375,12 @@ public function setIconPath($icon) {
    * Gets the regions for this layout definition.
    *
    * @return array[]
-   *   The layout regions. The keys of the array are the machine names of the
-   *   regions, and the values are an associative array with the following keys:
-   *   - label: (string) The human-readable name of the region.
-   *   Any remaining keys may have special meaning for the given layout plugin,
-   *   but are undefined here.
+   *    The layout regions. The keys of the array are the machine names of the
+   *    regions, and the values are an associative array with the following
+   *    keys:
+   *     - label: (string) The human-readable name of the region.
+   *    Any remaining keys may have special meaning for the given layout plugin,
+   *    but are undefined here.
    */
   public function getRegions() {
     return $this->regions;
diff --git a/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php b/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
index 8afcefe21f..0984ffcb1f 100644
--- a/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
+++ b/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
@@ -239,8 +239,6 @@ protected function normalizeName($name) {
 
   /**
    * Defines the schema for the semaphore table.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     return [
diff --git a/core/lib/Drupal/Core/Lock/LockBackendInterface.php b/core/lib/Drupal/Core/Lock/LockBackendInterface.php
index dcc8ea4e74..1e6042d41e 100644
--- a/core/lib/Drupal/Core/Lock/LockBackendInterface.php
+++ b/core/lib/Drupal/Core/Lock/LockBackendInterface.php
@@ -115,7 +115,7 @@ public function lockMayBeAvailable($name);
    * @param string $name
    *   Lock name currently being locked.
    * @param int $delay
-   *   Seconds to wait for. Defaults to 30.
+   *   Milliseconds to wait for. Defaults to 30.
    *
    * @return bool
    *   TRUE if the lock holds, FALSE if it may be available. You still need to
diff --git a/core/lib/Drupal/Core/Mail/MailFormatHelper.php b/core/lib/Drupal/Core/Mail/MailFormatHelper.php
index ca63ca040e..021028fce8 100644
--- a/core/lib/Drupal/Core/Mail/MailFormatHelper.php
+++ b/core/lib/Drupal/Core/Mail/MailFormatHelper.php
@@ -106,8 +106,7 @@ public static function htmlToText($string, $allowed_tags = NULL) {
     if (empty(static::$supportedTags)) {
       static::$supportedTags = ['a', 'em', 'i', 'strong', 'b', 'br', 'p',
         'blockquote', 'ul', 'ol', 'li', 'dl', 'dt', 'dd', 'h1', 'h2', 'h3',
-        'h4', 'h5', 'h6', 'hr',
-      ];
+        'h4', 'h5', 'h6', 'hr'];
     }
 
     // Make sure only supported tags are kept.
diff --git a/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php b/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
index e5361492b5..1fced2e479 100644
--- a/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
+++ b/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php
@@ -75,7 +75,7 @@ public function mail(array $message) {
     $mail_body = preg_replace('@\r?\n@', $line_endings, $message['body']);
     // For headers, PHP's API suggests that we use CRLF normally,
     // but some MTAs incorrectly replace LF with CRLF. See #234403.
-    $mail_headers = implode("\n", $mimeheaders);
+    $mail_headers = join("\n", $mimeheaders);
 
     $request = \Drupal::request();
 
diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
index 1046a9f13b..c14d1de1a3 100644
--- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php
+++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
@@ -234,7 +234,7 @@ public function getLocalTasksForRoute($route_name) {
         if ($base_routes) {
           // Find all the plugins with the same root and that are at the top
           // level or that have a visible parent.
-          foreach ($definitions as $plugin_id => $task_info) {
+          foreach ($definitions  as $plugin_id => $task_info) {
             if (!empty($base_routes[$task_info['base_route']]) && (empty($task_info['parent_id']) || !empty($parents[$task_info['parent_id']]))) {
               // Concat '> ' with root ID for the parent of top-level tabs.
               $parent = empty($task_info['parent_id']) ? '> ' . $task_info['base_route'] : $task_info['parent_id'];
diff --git a/core/lib/Drupal/Core/Menu/MenuParentFormSelectorInterface.php b/core/lib/Drupal/Core/Menu/MenuParentFormSelectorInterface.php
index 1e1ec5bb52..a376069cb0 100644
--- a/core/lib/Drupal/Core/Menu/MenuParentFormSelectorInterface.php
+++ b/core/lib/Drupal/Core/Menu/MenuParentFormSelectorInterface.php
@@ -42,7 +42,7 @@ public function getParentSelectOptions($id = '', array $menus = NULL, CacheableM
    *   (optional) ID of a link plugin. This will exclude the link and its
    *   children from being selected.
    * @param array $menus
-   *   (optional) Array of menu names as keys and titles as values to limit
+   *   (optional) array of menu names as keys and titles as values to limit
    *   the values that may be selected. If NULL, all menus will be included.
    *
    * @return array
diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
index f6578fe63e..c50f7b431a 100644
--- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -1217,8 +1217,6 @@ protected function definitionFields() {
    *
    * @return array
    *   The schema API definition for the SQL storage table.
-   *
-   * @internal
    */
   protected static function schemaDefinition() {
     $schema = [
diff --git a/core/lib/Drupal/Core/Messenger/LegacyMessenger.php b/core/lib/Drupal/Core/Messenger/LegacyMessenger.php
deleted file mode 100644
index 8c9751f3d8..0000000000
--- a/core/lib/Drupal/Core/Messenger/LegacyMessenger.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-namespace Drupal\Core\Messenger;
-
-use Drupal\Component\Render\MarkupInterface;
-use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
-use Drupal\Core\Render\Markup;
-
-/**
- * A legacy implementation of the messenger interface.
- *
- * @internal
- */
-class LegacyMessenger implements MessengerInterface {
-
-  /**
-   * The page cache kill switch.
-   *
-   * @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
-   */
-  protected $killSwitch;
-
-  /**
-   * LegacyMessenger constructor.
-   *
-   * @param \Drupal\Core\PageCache\ResponsePolicy\KillSwitch $killSwitch
-   *   (optional) The page cache kill switch.
-   */
-  public function __construct(KillSwitch $killSwitch) {
-    $this->killSwitch = $killSwitch;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function addMessage($message, $type = self::TYPE_STATUS, $repeat = FALSE) {
-    $this->setMessage($message, $type, $repeat);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function addStatus($message, $repeat = FALSE) {
-    return $this->addMessage($message, static::TYPE_STATUS);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function addError($message, $repeat = FALSE) {
-    return $this->addMessage($message, static::TYPE_ERROR);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function addWarning($message, $repeat = FALSE) {
-    return $this->addMessage($message, static::TYPE_WARNING);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function all() {
-    return $this->getMessages(NULL, FALSE);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function messagesByType($type) {
-    return $this->getMessages($type, FALSE);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteAll() {
-    return $this->getMessages(NULL, TRUE);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteByType($type) {
-    return $this->getMessages($type, TRUE);
-  }
-
-  /**
-   * Sets a message to display to the user.
-   *
-   * Messages are stored in a session variable and displayed in the page template
-   * via the $messages theme variable.
-   *
-   * Example usage:
-   * @code
-   * drupal_set_message(t('An error occurred and processing did not complete.'), 'error');
-   * @endcode
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $message
-   *   (optional) The translated message to be displayed to the user. For
-   *   consistency with other messages, it should begin with a capital letter and
-   *   end with a period.
-   * @param string $type
-   *   (optional) The message's type. Defaults to 'status'. These values are
-   *   supported:
-   *   - 'status'
-   *   - 'warning'
-   *   - 'error'
-   * @param bool $repeat
-   *   (optional) If this is FALSE and the message is already set, then the
-   *   message won't be repeated. Defaults to FALSE.
-   *
-   * @return array|null
-   *   A multidimensional array with keys corresponding to the set message types.
-   *   The indexed array values of each contain the set messages for that type,
-   *   and each message is an associative array with the following format:
-   *   - safe: Boolean indicating whether the message string has been marked as
-   *     safe. Non-safe strings will be escaped automatically.
-   *   - message: The message string.
-   *   So, the following is an example of the full return array structure:
-   *   @code
-   *     array(
-   *       'status' => array(
-   *         array(
-   *           'safe' => TRUE,
-   *           'message' => 'A <em>safe</em> markup string.',
-   *         ),
-   *         array(
-   *           'safe' => FALSE,
-   *           'message' => "$arbitrary_user_input to escape.",
-   *         ),
-   *       ),
-   *     );
-   *   @endcode
-   *   If there are no messages set, the function returns NULL.
-   *
-   * @internal
-   */
-  private function setMessage($message = NULL, $type = 'status', $repeat = FALSE) {
-    if (isset($message)) {
-      if (!isset($_SESSION['messages'][$type])) {
-        $_SESSION['messages'][$type] = [];
-      }
-
-      // Convert strings which are safe to the simplest Markup objects.
-      if (!($message instanceof Markup) && $message instanceof MarkupInterface) {
-        $message = Markup::create((string) $message);
-      }
-
-      // Do not use strict type checking so that equivalent string and
-      // MarkupInterface objects are detected.
-      if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
-        $_SESSION['messages'][$type][] = $message;
-      }
-
-      // Mark this page as being uncacheable.
-      $this->killSwitch->trigger();
-    }
-
-    // Messages not set when DB connection fails.
-    return isset($_SESSION['messages']) ? $_SESSION['messages'] : NULL;
-  }
-
-  /**
-   * Returns all messages that have been set with drupal_set_message().
-   *
-   * @param string $type
-   *   (optional) Limit the messages returned by type. Defaults to NULL, meaning
-   *   all types. These values are supported:
-   *   - NULL
-   *   - 'status'
-   *   - 'warning'
-   *   - 'error'
-   * @param bool $clear_queue
-   *   (optional) If this is TRUE, the queue will be cleared of messages of the
-   *   type specified in the $type parameter. Otherwise the queue will be left
-   *   intact. Defaults to TRUE.
-   *
-   * @return array
-   *   An associative, nested array of messages grouped by message type, with
-   *   the top-level keys as the message type. The messages returned are
-   *   limited to the type specified in the $type parameter, if any. If there
-   *   are no messages of the specified type, an empty array is returned. See
-   *   drupal_set_message() for the array structure of individual messages.
-   *
-   * @see drupal_set_message()
-   * @see status-messages.html.twig
-   *
-   * @internal
-   */
-  private function getMessages($type = NULL, $clear_queue = TRUE) {
-    if ($messages = $this->setMessage()) {
-      if ($type) {
-        if ($clear_queue) {
-          unset($_SESSION['messages'][$type]);
-        }
-        if (isset($messages[$type])) {
-          return [$type => $messages[$type]];
-        }
-      }
-      else {
-        if ($clear_queue) {
-          unset($_SESSION['messages']);
-        }
-        return $messages;
-      }
-    }
-    return [];
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Messenger/MessengerInterface.php b/core/lib/Drupal/Core/Messenger/MessengerInterface.php
deleted file mode 100644
index 216835bcea..0000000000
--- a/core/lib/Drupal/Core/Messenger/MessengerInterface.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-namespace Drupal\Core\Messenger;
-
-/**
- * Stores runtime messages sent out to individual users on the page.
- *
- * An example for these messages is for example: "Content X got saved".
- *
- * @internal
- */
-interface MessengerInterface {
-
-  /**
-   * A status message.
-   */
-  const TYPE_STATUS = 'status';
-
-  /**
-   * A warning.
-   */
-  const TYPE_WARNING = 'warning';
-
-  /**
-   * An error.
-   */
-  const TYPE_ERROR = 'error';
-
-  /**
-   * Adds a new message to the queue.
-   *
-   * The messages will be displayed in the order they got added later.
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $message
-   *   (optional) The translated message to be displayed to the user. For
-   *   consistency with other messages, it should begin with a capital letter
-   *   and end with a period.
-   * @param string $type
-   *   (optional) The message's type. Either self::TYPE_STATUS,
-   *   self::TYPE_WARNING, or self::TYPE_ERROR.
-   * @param bool $repeat
-   *   (optional) If this is FALSE and the message is already set, then the
-   *   message won't be repeated. Defaults to FALSE.
-   *
-   * @return $this
-   */
-  public function addMessage($message, $type = self::TYPE_STATUS, $repeat = FALSE);
-
-  /**
-   * Adds a new status message to the queue.
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $message
-   *   (optional) The translated message to be displayed to the user. For
-   *   consistency with other messages, it should begin with a capital letter
-   *   and end with a period.
-   * @param bool $repeat
-   *   (optional) If this is FALSE and the message is already set, then the
-   *   message won't be repeated. Defaults to FALSE.
-   *
-   * @return $this
-   */
-  public function addStatus($message, $repeat = FALSE);
-
-  /**
-   * Adds a new error message to the queue.
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $message
-   *   (optional) The translated message to be displayed to the user. For
-   *   consistency with other messages, it should begin with a capital letter
-   *   and end with a period.
-   * @param bool $repeat
-   *   (optional) If this is FALSE and the message is already set, then the
-   *   message won't be repeated. Defaults to FALSE.
-   *
-   * @return $this
-   */
-  public function addError($message, $repeat = FALSE);
-
-  /**
-   * Adds a new warning message to the queue.
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $message
-   *   (optional) The translated message to be displayed to the user. For
-   *   consistency with other messages, it should begin with a capital letter
-   *   and end with a period.
-   * @param bool $repeat
-   *   (optional) If this is FALSE and the message is already set, then the
-   *   message won't be repeated. Defaults to FALSE.
-   *
-   * @return $this
-   */
-  public function addWarning($message, $repeat = FALSE);
-
-  /**
-   * Gets all messages.
-   *
-   * @return string[][]|\Drupal\Component\Render\MarkupInterface[][]
-   *   Keys are message types and values are indexed arrays of messages. Message
-   *   types are either self::TYPE_STATUS, self::TYPE_WARNING, or
-   *   self::TYPE_ERROR.
-   */
-  public function all();
-
-  /**
-   * Gets all messages of a certain type.
-   *
-   * @param string $type
-   *   The messages' type. Either self::TYPE_STATUS, self::TYPE_WARNING,
-   *   or self::TYPE_ERROR.
-   *
-   * @return string[]|\Drupal\Component\Render\MarkupInterface[]
-   */
-  public function messagesByType($type);
-
-  /**
-   * Deletes all messages.
-   */
-  public function deleteAll();
-
-  /**
-   * Deletes all messages of a certain type.
-   *
-   * @param string $type
-   *   The messages' type. Either self::TYPE_STATUS, self::TYPE_WARNING, or
-   *   self::TYPE_ERROR.
-   */
-  public function deleteByType($type);
-
-}
diff --git a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
index 944bd5304c..cad7609c83 100644
--- a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
+++ b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
@@ -96,12 +96,9 @@ public function convert(array $defaults) {
 
       // If a converter returns NULL it means that the parameter could not be
       // converted.
-      $value = $defaults[$name];
-      $defaults[$name] = $this->getConverter($definition['converter'])->convert($value, $definition, $name, $defaults);
+      $defaults[$name] = $this->getConverter($definition['converter'])->convert($defaults[$name], $definition, $name, $defaults);
       if (!isset($defaults[$name])) {
-        $message = 'The "%s" parameter was not converted for the path "%s" (route name: "%s")';
-        $route_name = $defaults[RouteObjectInterface::ROUTE_NAME];
-        throw new ParamNotConvertedException(sprintf($message, $name, $route->getPath(), $route_name), 0, NULL, $route_name, [$name => $value]);
+        throw new ParamNotConvertedException(sprintf('The "%s" parameter was not converted for the path "%s" (route name: "%s")', $name, $route->getPath(), $defaults[RouteObjectInterface::ROUTE_NAME]));
       }
     }
 
diff --git a/core/lib/Drupal/Core/ParamConverter/ParamNotConvertedException.php b/core/lib/Drupal/Core/ParamConverter/ParamNotConvertedException.php
index 7ff9dc991b..d44cfc7490 100644
--- a/core/lib/Drupal/Core/ParamConverter/ParamNotConvertedException.php
+++ b/core/lib/Drupal/Core/ParamConverter/ParamNotConvertedException.php
@@ -7,58 +7,4 @@
  */
 class ParamNotConvertedException extends \Exception {
 
-  /**
-   * The route name that was not converted.
-   *
-   * @var string
-   */
-  protected $routeName = "";
-
-  /**
-   * The raw parameters that were not converted.
-   *
-   * @var array
-   */
-  protected $rawParameters = [];
-
-  /**
-   * Constructs the ParamNotConvertedException.
-   *
-   * @param string $message
-   *   The Exception message to throw.
-   * @param int $code
-   *   The Exception code.
-   * @param \Exception $previous
-   *   The previous exception used for the exception chaining.
-   * @param string $route_name
-   *   The route name that was not converted.
-   * @param array $raw_parameters
-   *   The raw parameters that were not converted.
-   */
-  public function __construct($message = "", $code = 0, \Exception $previous = NULL, $route_name = "", array $raw_parameters = []) {
-    parent::__construct($message, $code, $previous);
-    $this->routeName = $route_name;
-    $this->rawParameters = $raw_parameters;
-  }
-
-  /**
-   * Get the route name that was not converted.
-   *
-   * @return string
-   *   The route name that was not converted.
-   */
-  public function getRouteName() {
-    return $this->routeName;
-  }
-
-  /**
-   * Get the raw parameters that were not converted.
-   *
-   * @return array
-   *   The raw parameters that were not converted.
-   */
-  public function getRawParameters() {
-    return $this->rawParameters;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Path/AliasStorage.php b/core/lib/Drupal/Core/Path/AliasStorage.php
index a02bc3534d..4f380125bb 100644
--- a/core/lib/Drupal/Core/Path/AliasStorage.php
+++ b/core/lib/Drupal/Core/Path/AliasStorage.php
@@ -406,8 +406,6 @@ protected function catchException(\Exception $e) {
 
   /**
    * Defines the schema for the {url_alias} table.
-   *
-   * @internal
    */
   public static function schemaDefinition() {
     return [
diff --git a/core/lib/Drupal/Core/Plugin/Context/Context.php b/core/lib/Drupal/Core/Plugin/Context/Context.php
index 49571206c4..35eaacda59 100644
--- a/core/lib/Drupal/Core/Plugin/Context/Context.php
+++ b/core/lib/Drupal/Core/Plugin/Context/Context.php
@@ -42,7 +42,7 @@ class Context extends ComponentContext implements ContextInterface {
    *
    * @param \Drupal\Core\Plugin\Context\ContextDefinitionInterface $context_definition
    *   The context definition.
-   * @param mixed|null $context_value
+   * @param mixed $context_value|null
    *   The context value object.
    */
   public function __construct(ContextDefinitionInterface $context_definition, $context_value = NULL) {
diff --git a/core/lib/Drupal/Core/Queue/DatabaseQueue.php b/core/lib/Drupal/Core/Queue/DatabaseQueue.php
index d0d1fb9415..e70000ee22 100644
--- a/core/lib/Drupal/Core/Queue/DatabaseQueue.php
+++ b/core/lib/Drupal/Core/Queue/DatabaseQueue.php
@@ -277,8 +277,6 @@ protected function catchException(\Exception $e) {
 
   /**
    * Defines the schema for the queue table.
-   *
-   * @internal
    */
   public function schemaDefinition() {
     return [
diff --git a/core/lib/Drupal/Core/Render/Element/Container.php b/core/lib/Drupal/Core/Render/Element/Container.php
index 357e6a5484..212000d7be 100644
--- a/core/lib/Drupal/Core/Render/Element/Container.php
+++ b/core/lib/Drupal/Core/Render/Element/Container.php
@@ -4,7 +4,6 @@
 
 use Drupal\Component\Utility\Html as HtmlUtility;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 
 /**
  * Provides a render element that wraps child elements in a container.
@@ -12,10 +11,6 @@
  * Surrounds child elements with a <div> and adds attributes such as classes or
  * an HTML ID.
  *
- * Properties:
- * - #optional: Indicates whether the container should render when it has no
- *   visible children. Defaults to FALSE.
- *
  * Usage example:
  * @code
  * $form['needs_accommodation'] = array(
@@ -51,14 +46,12 @@ class Container extends RenderElement {
   public function getInfo() {
     $class = get_class($this);
     return [
-      '#optional' => FALSE,
       '#process' => [
         [$class, 'processGroup'],
         [$class, 'processContainer'],
       ],
       '#pre_render' => [
         [$class, 'preRenderGroup'],
-        [$class, 'preRenderContainer'],
       ],
       '#theme_wrappers' => ['container'],
     ];
@@ -86,22 +79,4 @@ public static function processContainer(&$element, FormStateInterface $form_stat
     return $element;
   }
 
-  /**
-   * Prevents optional containers from rendering if they have no children.
-   *
-   * @param array $element
-   *   An associative array containing the properties and children of the
-   *   container.
-   *
-   * @return array
-   *   The modified element.
-   */
-  public static function preRenderContainer($element) {
-    // Do not render optional container elements if there are no children.
-    if (empty($element['#printed']) && !empty($element['#optional']) && !Element::getVisibleChildren($element)) {
-      $element['#printed'] = TRUE;
-    }
-    return $element;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Render/Element/Date.php b/core/lib/Drupal/Core/Render/Element/Date.php
index 735b1d5ce5..11e15d8443 100644
--- a/core/lib/Drupal/Core/Render/Element/Date.php
+++ b/core/lib/Drupal/Core/Render/Element/Date.php
@@ -33,10 +33,7 @@ public function getInfo() {
     return [
       '#input' => TRUE,
       '#theme' => 'input__date',
-      '#process' => [
-        [$class, 'processAjaxForm'],
-        [$class, 'processDate'],
-      ],
+      '#process' => [[$class, 'processDate']],
       '#pre_render' => [[$class, 'preRenderDate']],
       '#theme_wrappers' => ['form_element'],
       '#attributes' => ['type' => 'date'],
diff --git a/core/lib/Drupal/Core/Render/Element/Radio.php b/core/lib/Drupal/Core/Render/Element/Radio.php
index e178463eea..8687a9dcfc 100644
--- a/core/lib/Drupal/Core/Render/Element/Radio.php
+++ b/core/lib/Drupal/Core/Render/Element/Radio.php
@@ -54,18 +54,7 @@ public static function preRenderRadio($element) {
     $element['#attributes']['type'] = 'radio';
     Element::setAttributes($element, ['id', 'name', '#return_value' => 'value']);
 
-    // To avoid auto-casting during '==' we convert $element['#value'] and
-    // $element['#return_value'] to strings. It will prevent wrong true-checking
-    // for both cases: 0 == 'string' and 'string' == 0, this will occur because
-    // all numeric array values will be integers and all submitted values will
-    // be strings. Array values are never valid for radios and are skipped. To
-    // account for FALSE and empty string values in the #return_value, we will
-    // consider any #value that evaluates to empty to be the same as any
-    // #return_value that evaluates to empty.
-    if (isset($element['#return_value']) &&
-      $element['#value'] !== FALSE &&
-      !is_array($element['#value']) &&
-      ((empty($element['#value']) && empty($element['#return_value'])) || (string) $element['#value'] === (string) $element['#return_value'])) {
+    if (isset($element['#return_value']) && $element['#value'] !== FALSE && $element['#value'] == $element['#return_value']) {
       $element['#attributes']['checked'] = 'checked';
     }
     static::setAttributes($element, ['form-radio']);
diff --git a/core/lib/Drupal/Core/Render/Element/RenderElement.php b/core/lib/Drupal/Core/Render/Element/RenderElement.php
index 46c6f297e3..243a9af767 100644
--- a/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -269,7 +269,6 @@ public static function preRenderAjaxForm($element) {
       $element['#attributes']['data-disable-refocus'] = "true";
     }
 
-
     // Add a reasonable default event handler if none was specified.
     if (isset($element['#ajax']) && !isset($element['#ajax']['event'])) {
       switch ($element['#type']) {
@@ -309,7 +308,6 @@ public static function preRenderAjaxForm($element) {
         case 'radio':
         case 'checkbox':
         case 'select':
-        case 'date':
           $element['#ajax']['event'] = 'change';
           break;
 
diff --git a/core/lib/Drupal/Core/Render/HtmlResponse.php b/core/lib/Drupal/Core/Render/HtmlResponse.php
index 763696d109..555e504cf6 100644
--- a/core/lib/Drupal/Core/Render/HtmlResponse.php
+++ b/core/lib/Drupal/Core/Render/HtmlResponse.php
@@ -31,11 +31,9 @@ public function setContent($content) {
     // A render array can automatically be converted to a string and set the
     // necessary metadata.
     if (is_array($content) && (isset($content['#markup']))) {
-      $content += [
-        '#attached' => [
-          'html_response_attachment_placeholders' => [],
-          'placeholders' => [],
-        ],
+      $content += ['#attached' => [
+        'html_response_attachment_placeholders' => [],
+        'placeholders' => []],
       ];
       $this->addCacheableDependency(CacheableMetadata::createFromRenderArray($content));
       $this->setAttachments($content['#attached']);
diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php
index 584f79f908..287ffbb1e9 100644
--- a/core/lib/Drupal/Core/Render/Renderer.php
+++ b/core/lib/Drupal/Core/Render/Renderer.php
@@ -309,9 +309,7 @@ protected function doRender(&$elements, $is_root_call = FALSE) {
       if (count($elements['#lazy_builder']) !== 2) {
         throw new \DomainException('The #lazy_builder property must have an array as a value, containing two values: the callback, and the arguments for the callback.');
       }
-      if (count($elements['#lazy_builder'][1]) !== count(array_filter($elements['#lazy_builder'][1], function($v) {
-        return is_null($v) || is_scalar($v);
-      }))) {
+      if (count($elements['#lazy_builder'][1]) !== count(array_filter($elements['#lazy_builder'][1], function($v) { return is_null($v) || is_scalar($v); }))) {
         throw new \DomainException("A #lazy_builder callback's context may only contain scalar values or NULL.");
       }
       $children = Element::children($elements);
diff --git a/core/lib/Drupal/Core/Render/theme.api.php b/core/lib/Drupal/Core/Render/theme.api.php
index c12dd3dc00..db7a16165b 100644
--- a/core/lib/Drupal/Core/Render/theme.api.php
+++ b/core/lib/Drupal/Core/Render/theme.api.php
@@ -728,7 +728,7 @@ function hook_themes_installed($theme_list) {
 /**
  * Respond to themes being uninstalled.
  *
- * @param array $themes
+ * @param array $theme_list
  *   Array containing the names of the themes being uninstalled.
  *
  * @see \Drupal\Core\Extension\ThemeHandler::uninstall()
diff --git a/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php b/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php
index 9fb87f4faf..8f108e04d8 100644
--- a/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php
+++ b/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php
@@ -5,4 +5,4 @@
 /**
  * Class for exceptions thrown when the generator has not been initialized.
  */
-class GeneratorNotInitializedException extends \Exception {}
+class GeneratorNotInitializedException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Routing/MatcherDumper.php b/core/lib/Drupal/Core/Routing/MatcherDumper.php
index 0de728892f..5e329f7daf 100644
--- a/core/lib/Drupal/Core/Routing/MatcherDumper.php
+++ b/core/lib/Drupal/Core/Routing/MatcherDumper.php
@@ -194,8 +194,6 @@ protected function ensureTableExists() {
    *
    * @return array
    *   The schema API definition for the SQL storage table.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     $schema = [
diff --git a/core/lib/Drupal/Core/Routing/RouteProvider.php b/core/lib/Drupal/Core/Routing/RouteProvider.php
index 94030dfc32..5d92e77e0f 100644
--- a/core/lib/Drupal/Core/Routing/RouteProvider.php
+++ b/core/lib/Drupal/Core/Routing/RouteProvider.php
@@ -15,7 +15,7 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
 use Symfony\Component\Routing\RouteCollection;
-use Drupal\Core\Database\Connection;
+use \Drupal\Core\Database\Connection;
 
 /**
  * A Route Provider front-end for all Drupal-stored routes.
@@ -138,11 +138,11 @@ public function __construct(Connection $connection, StateInterface $state, Curre
    * @param Request $request
    *   A request against which to match.
    *
-   * @return \Symfony\Component\Routing\RouteCollection
-   *   RouteCollection with all urls that could potentially match $request.
-   *   Empty collection if nothing can match. The collection will be sorted from
-   *   highest to lowest fit (match of path parts) and then in ascending order
-   *   by route name for routes with the same fit.
+   * @return \Symfony\Component\Routing\RouteCollection with all urls that
+   *      could potentially match $request. Empty collection if nothing can
+   *      match. The collection will be sorted from highest to lowest fit (match
+   *      of path parts) and then in ascending order by route name for routes
+   *      with the same fit.
    */
   public function getRouteCollectionForRequest(Request $request) {
     // Cache both the system path as well as route parameters and matching
@@ -347,8 +347,7 @@ protected function getRoutesByPath($path) {
     // dump the route pattern without those optional parts.
     try {
       $routes = $this->connection->query("SELECT name, route, fit FROM {" . $this->connection->escapeTable($this->tableName) . "} WHERE pattern_outline IN ( :patterns[] ) AND number_parts >= :count_parts", [
-        ':patterns[]' => $ancestors,
-        ':count_parts' => count($parts),
+        ':patterns[]' => $ancestors, ':count_parts' => count($parts),
       ])
         ->fetchAll(\PDO::FETCH_ASSOC);
     }
diff --git a/core/lib/Drupal/Core/StreamWrapper/LocalReadOnlyStream.php b/core/lib/Drupal/Core/StreamWrapper/LocalReadOnlyStream.php
index fa12ab4885..edcf4b7549 100644
--- a/core/lib/Drupal/Core/StreamWrapper/LocalReadOnlyStream.php
+++ b/core/lib/Drupal/Core/StreamWrapper/LocalReadOnlyStream.php
@@ -147,7 +147,7 @@ public function unlink($uri) {
    *
    * The file will not be renamed as this is a read-only stream wrapper.
    *
-   * @param string $from_uri
+   * @param string $from_uri,
    *   The uri to the file to rename.
    * @param string $to_uri
    *   The new uri for file.
diff --git a/core/lib/Drupal/Core/StreamWrapper/LocalStream.php b/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
index 20b2712c76..ec1980ebd3 100644
--- a/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
+++ b/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
@@ -380,7 +380,7 @@ public function unlink($uri) {
   /**
    * Support for rename().
    *
-   * @param string $from_uri
+   * @param string $from_uri,
    *   The URI to the file to rename.
    * @param string $to_uri
    *   The new URI for file.
diff --git a/core/lib/Drupal/Core/StreamWrapper/ReadOnlyStream.php b/core/lib/Drupal/Core/StreamWrapper/ReadOnlyStream.php
index a2fa804363..2bf03f6cd8 100644
--- a/core/lib/Drupal/Core/StreamWrapper/ReadOnlyStream.php
+++ b/core/lib/Drupal/Core/StreamWrapper/ReadOnlyStream.php
@@ -199,7 +199,7 @@ public function unlink($uri) {
    *
    * This file will not be renamed as this is a read-only stream wrapper.
    *
-   * @param string $from_uri
+   * @param string $from_uri,
    *   The uri to the file to rename.
    * @param string $to_uri
    *   The new uri for file.
diff --git a/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php b/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php
index 5e1e56b9f5..830fb93c47 100644
--- a/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php
+++ b/core/lib/Drupal/Core/StreamWrapper/TemporaryStream.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Core\StreamWrapper;
 
-use Drupal\Core\Url;
+use \Drupal\Core\Url;
 
 /**
  * Defines a Drupal temporary (temporary://) stream wrapper class.
diff --git a/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php b/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php
index b84e790b62..3f727cf523 100644
--- a/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php
+++ b/core/lib/Drupal/Core/Template/Loader/FilesystemLoader.php
@@ -24,7 +24,7 @@ class FilesystemLoader extends \Twig_Loader_Filesystem {
    * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
    *   The theme handler service.
    */
-  public function __construct($paths, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler) {
+  public function __construct($paths = [], ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler) {
     parent::__construct($paths);
 
     // Add namespaced paths for modules and themes.
diff --git a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
index f9f97ecaa8..e9d8d6686e 100644
--- a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
+++ b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
@@ -6,13 +6,11 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Config\Development\ConfigSchemaChecker;
-use Drupal\Core\Database\Database;
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\Extension\MissingDependencyException;
 use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\Session\UserSession;
 use Drupal\Core\Site\Settings;
-use Drupal\Core\StreamWrapper\StreamWrapperInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Yaml\Yaml as SymfonyYaml;
@@ -450,210 +448,4 @@ protected function rebuildAll() {
     $this->container->get('stream_wrapper_manager')->register();
   }
 
-  /**
-   * Returns the parameters that will be used when Simpletest installs Drupal.
-   *
-   * @see install_drupal()
-   * @see install_state_defaults()
-   *
-   * @return array
-   *   Array of parameters for use in install_drupal().
-   */
-  protected function installParameters() {
-    $connection_info = Database::getConnectionInfo();
-    $driver = $connection_info['default']['driver'];
-    $connection_info['default']['prefix'] = $connection_info['default']['prefix']['default'];
-    unset($connection_info['default']['driver']);
-    unset($connection_info['default']['namespace']);
-    unset($connection_info['default']['pdo']);
-    unset($connection_info['default']['init_commands']);
-    // Remove database connection info that is not used by SQLite.
-    if ($driver === 'sqlite') {
-      unset($connection_info['default']['username']);
-      unset($connection_info['default']['password']);
-      unset($connection_info['default']['host']);
-      unset($connection_info['default']['port']);
-    }
-    $parameters = [
-      'interactive' => FALSE,
-      'parameters' => [
-        'profile' => $this->profile,
-        'langcode' => 'en',
-      ],
-      'forms' => [
-        'install_settings_form' => [
-          'driver' => $driver,
-          $driver => $connection_info['default'],
-        ],
-        'install_configure_form' => [
-          'site_name' => 'Drupal',
-          'site_mail' => 'simpletest@example.com',
-          'account' => [
-            'name' => $this->rootUser->name,
-            'mail' => $this->rootUser->getEmail(),
-            'pass' => [
-              'pass1' => isset($this->rootUser->pass_raw) ? $this->rootUser->pass_raw : $this->rootUser->passRaw,
-              'pass2' => isset($this->rootUser->pass_raw) ? $this->rootUser->pass_raw : $this->rootUser->passRaw,
-            ],
-          ],
-          // form_type_checkboxes_value() requires NULL instead of FALSE values
-          // for programmatic form submissions to disable a checkbox.
-          'enable_update_status_module' => NULL,
-          'enable_update_status_emails' => NULL,
-        ],
-      ],
-    ];
-
-    // If we only have one db driver available, we cannot set the driver.
-    include_once DRUPAL_ROOT . '/core/includes/install.inc';
-    if (count($this->getDatabaseTypes()) == 1) {
-      unset($parameters['forms']['install_settings_form']['driver']);
-    }
-    return $parameters;
-  }
-
-  /**
-   * Sets up the base URL based upon the environment variable.
-   *
-   * @throws \Exception
-   *   Thrown when no SIMPLETEST_BASE_URL environment variable is provided.
-   */
-  protected function setupBaseUrl() {
-    global $base_url;
-
-    // Get and set the domain of the environment we are running our test
-    // coverage against.
-    $base_url = getenv('SIMPLETEST_BASE_URL');
-    if (!$base_url) {
-      throw new \Exception(
-        'You must provide a SIMPLETEST_BASE_URL environment variable to run some PHPUnit based functional tests.'
-      );
-    }
-
-    // Setup $_SERVER variable.
-    $parsed_url = parse_url($base_url);
-    $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
-    $path = isset($parsed_url['path']) ? rtrim(rtrim($parsed_url['path']), '/') : '';
-    $port = isset($parsed_url['port']) ? $parsed_url['port'] : 80;
-
-    $this->baseUrl = $base_url;
-
-    // If the passed URL schema is 'https' then setup the $_SERVER variables
-    // properly so that testing will run under HTTPS.
-    if ($parsed_url['scheme'] === 'https') {
-      $_SERVER['HTTPS'] = 'on';
-    }
-    $_SERVER['HTTP_HOST'] = $host;
-    $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
-    $_SERVER['SERVER_ADDR'] = '127.0.0.1';
-    $_SERVER['SERVER_PORT'] = $port;
-    $_SERVER['SERVER_SOFTWARE'] = NULL;
-    $_SERVER['SERVER_NAME'] = 'localhost';
-    $_SERVER['REQUEST_URI'] = $path . '/';
-    $_SERVER['REQUEST_METHOD'] = 'GET';
-    $_SERVER['SCRIPT_NAME'] = $path . '/index.php';
-    $_SERVER['SCRIPT_FILENAME'] = $path . '/index.php';
-    $_SERVER['PHP_SELF'] = $path . '/index.php';
-    $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line';
-  }
-
-  /**
-   * Prepares the current environment for running the test.
-   *
-   * Also sets up new resources for the testing environment, such as the public
-   * filesystem and configuration directories.
-   *
-   * This method is private as it must only be called once by
-   * BrowserTestBase::setUp() (multiple invocations for the same test would have
-   * unpredictable consequences) and it must not be callable or overridable by
-   * test classes.
-   */
-  protected function prepareEnvironment() {
-    // Bootstrap Drupal so we can use Drupal's built in functions.
-    $this->classLoader = require __DIR__ . '/../../../../../autoload.php';
-    $request = Request::createFromGlobals();
-    $kernel = TestRunnerKernel::createFromRequest($request, $this->classLoader);
-    // TestRunnerKernel expects the working directory to be DRUPAL_ROOT.
-    chdir(DRUPAL_ROOT);
-    $kernel->prepareLegacyRequest($request);
-    $this->prepareDatabasePrefix();
-
-    $this->originalSite = $kernel->findSitePath($request);
-
-    // Create test directory ahead of installation so fatal errors and debug
-    // information can be logged during installation process.
-    file_prepare_directory($this->siteDirectory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
-
-    // Prepare filesystem directory paths.
-    $this->publicFilesDirectory = $this->siteDirectory . '/files';
-    $this->privateFilesDirectory = $this->siteDirectory . '/private';
-    $this->tempFilesDirectory = $this->siteDirectory . '/temp';
-    $this->translationFilesDirectory = $this->siteDirectory . '/translations';
-
-    // Ensure the configImporter is refreshed for each test.
-    $this->configImporter = NULL;
-
-    // Unregister all custom stream wrappers of the parent site.
-    $wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers(StreamWrapperInterface::ALL);
-    foreach ($wrappers as $scheme => $info) {
-      stream_wrapper_unregister($scheme);
-    }
-
-    // Reset statics.
-    drupal_static_reset();
-
-    $this->container = NULL;
-
-    // Unset globals.
-    unset($GLOBALS['config_directories']);
-    unset($GLOBALS['config']);
-    unset($GLOBALS['conf']);
-
-    // Log fatal errors.
-    ini_set('log_errors', 1);
-    ini_set('error_log', DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log');
-
-    // Change the database prefix.
-    $this->changeDatabasePrefix();
-
-    // After preparing the environment and changing the database prefix, we are
-    // in a valid test environment.
-    drupal_valid_test_ua($this->databasePrefix);
-
-    // Reset settings.
-    new Settings([
-      // For performance, simply use the database prefix as hash salt.
-      'hash_salt' => $this->databasePrefix,
-    ]);
-
-    drupal_set_time_limit($this->timeLimit);
-
-    // Save and clean the shutdown callbacks array because it is static cached
-    // and will be changed by the test run. Otherwise it will contain callbacks
-    // from both environments and the testing environment will try to call the
-    // handlers defined by the original one.
-    $callbacks = &drupal_register_shutdown_function();
-    $this->originalShutdownCallbacks = $callbacks;
-    $callbacks = [];
-  }
-
-  /**
-   * Returns all supported database driver installer objects.
-   *
-   * This wraps drupal_get_database_types() for use without a current container.
-   *
-   * @return \Drupal\Core\Database\Install\Tasks[]
-   *   An array of available database driver installer objects.
-   */
-  protected function getDatabaseTypes() {
-    if ($this->originalContainer) {
-      \Drupal::setContainer($this->originalContainer);
-    }
-    $database_types = drupal_get_database_types();
-    if ($this->originalContainer) {
-      \Drupal::unsetContainer();
-    }
-    return $database_types;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Test/TestSetupTrait.php b/core/lib/Drupal/Core/Test/TestSetupTrait.php
index 44409078db..ea9137e479 100644
--- a/core/lib/Drupal/Core/Test/TestSetupTrait.php
+++ b/core/lib/Drupal/Core/Test/TestSetupTrait.php
@@ -141,7 +141,7 @@ public static function getDatabaseConnection() {
    * @see \Drupal\simpletest\TestBase::prepareEnvironment()
    * @see drupal_valid_test_ua()
    */
-  protected function prepareDatabasePrefix() {
+  private function prepareDatabasePrefix() {
     $test_db = new TestDatabase();
     $this->siteDirectory = $test_db->getTestSitePath();
     $this->databasePrefix = $test_db->getDatabasePrefix();
@@ -150,7 +150,7 @@ protected function prepareDatabasePrefix() {
   /**
    * Changes the database connection to the prefixed one.
    */
-  protected function changeDatabasePrefix() {
+  private function changeDatabasePrefix() {
     if (empty($this->databasePrefix)) {
       $this->prepareDatabasePrefix();
     }
@@ -158,7 +158,7 @@ protected function changeDatabasePrefix() {
     // If the test is run with argument dburl then use it.
     $db_url = getenv('SIMPLETEST_DB');
     if (!empty($db_url)) {
-      $database = Database::convertDbUrlToConnectionInfo($db_url, isset($this->root) ? $this->root : DRUPAL_ROOT);
+      $database = Database::convertDbUrlToConnectionInfo($db_url, DRUPAL_ROOT);
       Database::addConnectionInfo('default', 'default', $database);
     }
 
diff --git a/core/lib/Drupal/Core/TypedData/ListDataDefinition.php b/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
index 25258a48e6..3109cd2115 100644
--- a/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
+++ b/core/lib/Drupal/Core/TypedData/ListDataDefinition.php
@@ -108,13 +108,4 @@ public function setItemDefinition(DataDefinitionInterface $definition) {
     return $this;
   }
 
-  /**
-   * Magic method: Implements a deep clone.
-   */
-  public function __clone() {
-    // Ensure the itemDefinition property is actually cloned by overwriting the
-    // original reference.
-    $this->itemDefinition = clone $this->itemDefinition;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Utility/Token.php b/core/lib/Drupal/Core/Utility/Token.php
index a250d5892b..2a7fd4a753 100644
--- a/core/lib/Drupal/Core/Utility/Token.php
+++ b/core/lib/Drupal/Core/Utility/Token.php
@@ -155,7 +155,7 @@ public function __construct(ModuleHandlerInterface $module_handler, CacheBackend
    *     array of token replacements after they are generated.
    *   - clear: A boolean flag indicating that tokens should be removed from the
    *     final text if no replacement value can be generated.
-   * @param \Drupal\Core\Render\BubbleableMetadata|null $bubbleable_metadata
+   * @param \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata|null
    *   (optional) An object to which static::generate() and the hooks and
    *   functions that it invokes will add their required bubbleable metadata.
    *
@@ -283,8 +283,8 @@ public function scan($text) {
    *     modules require special formatting of token text, for example URL
    *     encoding or truncation to a specific length.
    * @param \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata
-   *   The bubbleable metadata. This is passed to the token replacement
-   *   implementations so that they can attach their metadata.
+   *    The bubbleable metadata. This is passed to the token replacement
+   *    implementations so that they can attach their metadata.
    *
    * @return array
    *   An associative array of replacement values, keyed by the original 'raw'
diff --git a/core/lib/Drupal/Core/Utility/UpdateException.php b/core/lib/Drupal/Core/Utility/UpdateException.php
index cd2d27bf12..4541d1d5f5 100644
--- a/core/lib/Drupal/Core/Utility/UpdateException.php
+++ b/core/lib/Drupal/Core/Utility/UpdateException.php
@@ -5,4 +5,4 @@
 /**
  * Exception class used to throw error if a module update fails.
  */
-class UpdateException extends \Exception {}
+class UpdateException extends \Exception { }
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
index b96310dc07..7871d18155 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php
@@ -15,4 +15,4 @@
  *   type = false
  * )
  */
-class IsNullConstraint extends IsNull {}
+class IsNullConstraint extends IsNull { }
diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php
index 163d696afb..75dfb182e4 100644
--- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php
+++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php
@@ -15,4 +15,4 @@
  *   type = false
  * )
  */
-class NotNullConstraint extends NotNull {}
+class NotNullConstraint extends NotNull { }
diff --git a/core/modules/action/migration_templates/action_settings.yml b/core/modules/action/migration_templates/action_settings.yml
index a99676b7a6..df69e33b60 100644
--- a/core/modules/action/migration_templates/action_settings.yml
+++ b/core/modules/action/migration_templates/action_settings.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - actions_max_stack
-  source_module: action
 process:
   recursion_limit: actions_max_stack
 destination:
diff --git a/core/modules/action/src/Plugin/migrate/source/Action.php b/core/modules/action/src/Plugin/migrate/source/Action.php
index f3ff266ca8..ac14a44b47 100644
--- a/core/modules/action/src/Plugin/migrate/source/Action.php
+++ b/core/modules/action/src/Plugin/migrate/source/Action.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "action",
- *   source_module = "system"
+ *   source_provider = "system"
  * )
  */
 class Action extends DrupalSqlBase {
diff --git a/core/modules/action/tests/src/Functional/ConfigurationTest.php b/core/modules/action/tests/src/Functional/ConfigurationTest.php
index a260c079cf..472ba17125 100644
--- a/core/modules/action/tests/src/Functional/ConfigurationTest.php
+++ b/core/modules/action/tests/src/Functional/ConfigurationTest.php
@@ -44,15 +44,14 @@ public function testActionConfiguration() {
     $this->drupalPostForm('admin/config/system/actions/add/' . Crypt::hashBase64('action_goto_action'), $edit, t('Save'));
     $this->assertResponse(200);
 
-    $action_id = $edit['id'];
-
     // Make sure that the new complex action was saved properly.
     $this->assertText(t('The action has been successfully saved.'), "Make sure we get a confirmation that we've successfully saved the complex action.");
     $this->assertText($action_label, "Make sure the action label appears on the configuration page after we've saved the complex action.");
 
     // Make another POST request to the action edit page.
     $this->clickLink(t('Configure'));
-
+    preg_match('|admin/config/system/actions/configure/(.+)|', $this->getUrl(), $matches);
+    $aid = $matches[1];
     $edit = [];
     $new_action_label = $this->randomMachineName();
     $edit['label'] = $new_action_label;
@@ -74,7 +73,7 @@ public function testActionConfiguration() {
     $this->clickLink(t('Delete'));
     $this->assertResponse(200);
     $edit = [];
-    $this->drupalPostForm(NULL, $edit, t('Delete'));
+    $this->drupalPostForm("admin/config/system/actions/configure/$aid/delete", $edit, t('Delete'));
     $this->assertResponse(200);
 
     // Make sure that the action was actually deleted.
@@ -83,7 +82,7 @@ public function testActionConfiguration() {
     $this->assertResponse(200);
     $this->assertNoText($new_action_label, "Make sure the action label does not appear on the overview page after we've deleted the action.");
 
-    $action = Action::load($action_id);
+    $action = Action::load($aid);
     $this->assertFalse($action, 'Make sure the action is gone after being deleted.');
   }
 
diff --git a/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml b/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
index d6ebf3d642..72372e4093 100644
--- a/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
+++ b/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
@@ -12,7 +12,6 @@ source:
     - aggregator_teaser_length
     - aggregator_clear
     - aggregator_summary_items
-  source_module: aggregator
 process:
   fetcher: aggregator_fetcher
   parser: aggregator_parser
diff --git a/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml b/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
index 3396950c8a..c8c793fdd1 100644
--- a/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
+++ b/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
@@ -12,7 +12,6 @@ source:
     - aggregator_teaser_length
     - aggregator_clear
     - aggregator_summary_items
-  source_module: aggregator
 process:
   fetcher: aggregator_fetcher
   parser: aggregator_parser
diff --git a/core/modules/aggregator/src/Controller/AggregatorController.php b/core/modules/aggregator/src/Controller/AggregatorController.php
index 0090ca3107..021e4d10a2 100644
--- a/core/modules/aggregator/src/Controller/AggregatorController.php
+++ b/core/modules/aggregator/src/Controller/AggregatorController.php
@@ -25,7 +25,7 @@ class AggregatorController extends ControllerBase {
    * Constructs a \Drupal\aggregator\Controller\AggregatorController object.
    *
    * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
-   *   The date formatter service.
+   *    The date formatter service.
    */
   public function __construct(DateFormatterInterface $date_formatter) {
     $this->dateFormatter = $date_formatter;
diff --git a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
index 9b88e438c9..91c7ac36ed 100644
--- a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
+++ b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
@@ -84,13 +84,11 @@ public function fetch(FeedInterface $feed) {
 
       /** @var \Psr\Http\Message\UriInterface $actual_uri */
       $actual_uri = NULL;
-      $response = $this->httpClientFactory->fromOptions([
-        'allow_redirects' => [
-          'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $uri) use (&$actual_uri) {
-            $actual_uri = (string) $uri;
-          }
-        ],
-      ])->send($request);
+      $response = $this->httpClientFactory->fromOptions(['allow_redirects' => [
+        'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $uri) use (&$actual_uri) {
+          $actual_uri = (string) $uri;
+        }
+      ]])->send($request);
 
       // In case of a 304 Not Modified, there is no new content, so return
       // FALSE.
diff --git a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorFeed.php b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorFeed.php
index 7d01536ae9..59244d4e4a 100644
--- a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorFeed.php
+++ b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorFeed.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "aggregator_feed",
- *   source_module = "aggregator"
+ *   source_provider = "aggregator"
  * )
  */
 class AggregatorFeed extends DrupalSqlBase {
diff --git a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
index 8cde1f83d1..428c558ea7 100644
--- a/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
+++ b/core/modules/aggregator/src/Plugin/migrate/source/AggregatorItem.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "aggregator_item",
- *   source_module = "aggregator"
+ *   source_provider = "aggregator"
  * )
  */
 class AggregatorItem extends DrupalSqlBase {
diff --git a/core/modules/aggregator/tests/src/Functional/Update/AggregatorUpdateTest.php b/core/modules/aggregator/src/Tests/Update/AggregatorUpdateTest.php
similarity index 82%
rename from core/modules/aggregator/tests/src/Functional/Update/AggregatorUpdateTest.php
rename to core/modules/aggregator/src/Tests/Update/AggregatorUpdateTest.php
index 9d659d018a..374a38e89a 100644
--- a/core/modules/aggregator/tests/src/Functional/Update/AggregatorUpdateTest.php
+++ b/core/modules/aggregator/src/Tests/Update/AggregatorUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\aggregator\Functional\Update;
+namespace Drupal\aggregator\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that node settings are properly updated during database updates.
@@ -16,7 +16,7 @@ class AggregatorUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/ban/src/Plugin/migrate/source/d7/BlockedIps.php b/core/modules/ban/src/Plugin/migrate/source/d7/BlockedIps.php
index 7d3eeebba2..fc4d877582 100644
--- a/core/modules/ban/src/Plugin/migrate/source/d7/BlockedIps.php
+++ b/core/modules/ban/src/Plugin/migrate/source/d7/BlockedIps.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_blocked_ips",
- *   source_module = "system"
+ *   source_provider = "system"
  * )
  */
 class BlockedIps extends DrupalSqlBase {
diff --git a/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipePlaceholderTestCases.php b/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php
similarity index 96%
rename from core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipePlaceholderTestCases.php
rename to core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php
index 51b1976396..7b5c33f7ec 100644
--- a/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipePlaceholderTestCases.php
+++ b/core/modules/big_pipe/src/Tests/BigPipePlaceholderTestCases.php
@@ -2,9 +2,10 @@
 
 /**
  * @file
+ * Contains \Drupal\Tests\big_pipe\Unit\Render\Placeholder\BigPipePlaceholderTestCases.
  */
 
-namespace Drupal\big_pipe_test;
+namespace Drupal\big_pipe\Tests;
 
 use Drupal\big_pipe\Render\BigPipeMarkup;
 use Drupal\Core\Session\AccountInterface;
@@ -17,9 +18,9 @@
  * - Unit test:
  *   \Drupal\Tests\big_pipe\Unit\Render\Placeholder\BigPipeStrategyTest
  * - Integration test for BigPipe with JS on:
- *   \Drupal\Tests\big_pipe\Functional\BigPipeTest::testBigPipe()
+ *   \Drupal\big_pipe\Tests\BigPipeTest::testBigPipe()
  * - Integration test for BigPipe with JS off:
- *   \Drupal\Tests\big_pipe\Functional\BigPipeTest::testBigPipeNoJs()
+ *   \Drupal\big_pipe\Tests\BigPipeTest::testBigPipeNoJs()
  */
 class BigPipePlaceholderTestCases {
 
@@ -31,7 +32,7 @@ class BigPipePlaceholderTestCases {
    * @param \Drupal\Core\Session\AccountInterface|null $user
    *   Optional. Necessary to get the embedded AJAX/HTML responses.
    *
-   * @return \Drupal\big_pipe_test\BigPipePlaceholderTestCase[]
+   * @return \Drupal\big_pipe\Tests\BigPipePlaceholderTestCase[]
    */
   public static function cases(ContainerInterface $container = NULL, AccountInterface $user = NULL) {
     // Define the two types of cacheability that we expect to see. These will be
@@ -89,7 +90,7 @@ public static function cases(ContainerInterface $container = NULL, AccountInterf
           'command' => 'insert',
           'method' => 'replaceWith',
           'selector' => '[data-big-pipe-placeholder-id="callback=Drupal%5CCore%5CRender%5CElement%5CStatusMessages%3A%3ArenderMessages&args%5B0%5D&token=_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"]',
-          'data' => ' <div role="contentinfo" aria-label="Status message" class="messages messages--status">' . "\n" . ' <h2 class="visually-hidden">Status message</h2>' . "\n" . ' Hello from BigPipe!' . "\n" . ' </div>' . "\n ",
+          'data' => '    <div role="contentinfo" aria-label="Status message" class="messages messages--status">' . "\n" . '                  <h2 class="visually-hidden">Status message</h2>' . "\n" . '                    Hello from BigPipe!' . "\n" . '            </div>' . "\n    ",
           'settings' => NULL,
         ],
       ];
diff --git a/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php b/core/modules/big_pipe/src/Tests/BigPipeTest.php
similarity index 89%
rename from core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
rename to core/modules/big_pipe/src/Tests/BigPipeTest.php
index d43822c5f6..a4d5562008 100644
--- a/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
+++ b/core/modules/big_pipe/src/Tests/BigPipeTest.php
@@ -1,16 +1,14 @@
 <?php
 
-namespace Drupal\Tests\big_pipe\Functional;
+namespace Drupal\big_pipe\Tests;
 
-use Behat\Mink\Element\NodeElement;
 use Drupal\big_pipe\Render\Placeholder\BigPipeStrategy;
 use Drupal\big_pipe\Render\BigPipe;
-use Drupal\big_pipe_test\BigPipePlaceholderTestCases;
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Logger\RfcLogLevel;
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests BigPipe's no-JS detection & response delivery (with and without JS).
@@ -23,7 +21,7 @@
  *
  * @group big_pipe
  */
-class BigPipeTest extends BrowserTestBase {
+class BigPipeTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -97,7 +95,9 @@ public function testNoJsDetection() {
     $this->drupalLogout();
 
     // Close the prior connection and remove the collected state.
-    $this->getSession()->reset();
+    $this->curlClose();
+    $this->curlCookies = [];
+    $this->cookies = [];
 
     // 3. Session (anonymous).
     $this->drupalGet(Url::fromRoute('user.login', [], ['query' => ['trigger_session' => 1]]));
@@ -112,7 +112,9 @@ public function testNoJsDetection() {
     $this->assertRaw($no_js_to_js_markup);
 
     // Close the prior connection and remove the collected state.
-    $this->getSession()->reset();
+    $this->curlClose();
+    $this->curlCookies = [];
+    $this->cookies = [];
 
     // Edge case: route with '_no_big_pipe' option.
     $this->drupalGet(Url::fromRoute('no_big_pipe'));
@@ -136,7 +138,7 @@ public function testNoJsDetection() {
    * - \Drupal\big_pipe\Render\BigPipe
    * - \Drupal\big_pipe\Render\BigPipe::sendPlaceholders()
    *
-   * @see \Drupal\big_pipe_test\BigPipePlaceholderTestCases
+   * @see \Drupal\big_pipe\Tests\BigPipePlaceholderTestCases
    */
   public function testBigPipe() {
     // Simulate production.
@@ -216,7 +218,7 @@ public function testBigPipe() {
    * - \Drupal\big_pipe\Render\BigPipe
    * - \Drupal\big_pipe\Render\BigPipe::sendNoJsPlaceholders()
    *
-   * @see \Drupal\big_pipe_test\BigPipePlaceholderTestCases
+   * @see \Drupal\big_pipe\Tests\BigPipePlaceholderTestCases
    */
   public function testBigPipeNoJs() {
     // Simulate production.
@@ -367,16 +369,14 @@ protected function assertBigPipePlaceholders(array $expected_big_pipe_placeholde
         $this->assertNoRaw($expected_placeholder_replacement);
         continue;
       }
-      $this->assertEqual($expected_ajax_response, trim($result[0]->getText()));
+      $this->assertEqual($expected_ajax_response, trim((string) $result[0]));
       $this->assertRaw($expected_placeholder_replacement);
       $pos = strpos($this->getRawContent(), $expected_placeholder_replacement);
       $placeholder_replacement_positions[$pos] = $big_pipe_placeholder_id;
     }
     ksort($placeholder_positions, SORT_NUMERIC);
     $this->assertEqual(array_keys($expected_big_pipe_placeholders), array_values($placeholder_positions));
-    $placeholders = array_map(function(NodeElement $element) {
-      return $element->getAttribute('data-big-pipe-placeholder-id');
-    }, $this->cssSelect('[data-big-pipe-placeholder-id]'));
+    $placeholders = array_map(function(\SimpleXMLElement $element) { return (string) $element['data-big-pipe-placeholder-id']; }, $this->cssSelect('[data-big-pipe-placeholder-id]'));
     $this->assertEqual(count($expected_big_pipe_placeholders), count(array_unique($placeholders)));
     $expected_big_pipe_placeholders_with_replacements = [];
     foreach ($expected_big_pipe_placeholder_stream_order as $big_pipe_placeholder_id) {
@@ -409,13 +409,13 @@ protected function assertBigPipePlaceholders(array $expected_big_pipe_placeholde
    * Ensures CSRF tokens can be generated for the current user's session.
    */
   protected function setCsrfTokenSeedInTestEnvironment() {
-    $session_data = $this->container->get('session_handler.write_safe')->read($this->getSession()->getCookie($this->getSessionName()));
+    $session_data = $this->container->get('session_handler.write_safe')->read($this->cookies[$this->getSessionName()]['value']);
     $csrf_token_seed = unserialize(explode('_sf2_meta|', $session_data)[1])['s'];
     $this->container->get('session_manager.metadata_bag')->setCsrfTokenSeed($csrf_token_seed);
   }
 
   /**
-   * @return \Drupal\big_pipe_test\BigPipePlaceholderTestCase[]
+   * @return \Drupal\big_pipe\Tests\BigPipePlaceholderTestCase[]
    */
   protected function getTestCases($has_session = TRUE) {
     return BigPipePlaceholderTestCases::cases($this->container, $this->rootUser);
@@ -446,39 +446,33 @@ protected function assertSessionCookieExists($expected) {
    * Asserts whether a cookie exists on the client or not.
    */
   protected function assertCookieExists($cookie_name, $expected, $cookie_label) {
-    $this->assertEqual($expected, !empty($this->getSession()->getCookie($cookie_name)), $expected ? "$cookie_label cookie exists." : "$cookie_label cookie does not exist.");
+    $non_deleted_cookies = array_filter($this->cookies, function ($item) { return $item['value'] !== 'deleted'; });
+    $this->assertEqual($expected, isset($non_deleted_cookies[$cookie_name]), $expected ? "$cookie_label cookie exists." : "$cookie_label cookie does not exist.");
   }
 
   /**
    * Calls ::performMetaRefresh() and asserts the responses.
    */
   protected function assertBigPipeNoJsMetaRefreshRedirect() {
-    $original_url = $this->getSession()->getCurrentUrl();
-
-    // Disable automatic following of redirects by the HTTP client, so that this
-    // test can analyze the response headers of each redirect response.
-    $this->getSession()->getDriver()->getClient()->followRedirects(FALSE);
-    $this->performMetaRefresh();
-    $headers[0] = $this->getSession()->getResponseHeaders();
-    $statuses[0] = $this->getSession()->getStatusCode();
+    $original_url = $this->url;
     $this->performMetaRefresh();
-    $headers[1] = $this->getSession()->getResponseHeaders();
-    $statuses[1] = $this->getSession()->getStatusCode();
-    $this->getSession()->getDriver()->getClient()->followRedirects(TRUE);
 
-    $this->assertEqual($original_url, $this->getSession()->getCurrentUrl(), 'Redirected back to the original location.');
+    $this->assertEqual($original_url, $this->url, 'Redirected back to the original location.');
+
+    $headers = $this->drupalGetHeaders(TRUE);
+    $this->assertEqual(2, count($headers), 'Two requests were made upon following the <meta> refresh, there are headers for two responses.');
 
     // First response: redirect.
-    $this->assertEqual(302, $statuses[0], 'The first response was a 302 (redirect).');
-    $this->assertIdentical(0, strpos($headers[0]['Set-Cookie'][0], 'big_pipe_nojs=1'), 'The first response sets the big_pipe_nojs cookie.');
-    $this->assertEqual($original_url, $headers[0]['Location'][0], 'The first response redirected back to the original page.');
-    $this->assertTrue(empty(array_diff(['cookies:big_pipe_nojs', 'session.exists'], explode(' ', $headers[0]['X-Drupal-Cache-Contexts'][0]))), 'The first response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
-    $this->assertFalse(isset($headers[0]['Surrogate-Control']), 'The first response has no "Surrogate-Control" header.');
+    $this->assertEqual('HTTP/1.1 302 Found', $headers[0][':status'], 'The first response was a 302 (redirect).');
+    $this->assertIdentical(0, strpos($headers[0]['set-cookie'], 'big_pipe_nojs=1'), 'The first response sets the big_pipe_nojs cookie.');
+    $this->assertEqual($original_url, $headers[0]['location'], 'The first response redirected back to the original page.');
+    $this->assertTrue(empty(array_diff(['cookies:big_pipe_nojs', 'session.exists'], explode(' ', $headers[0]['x-drupal-cache-contexts']))), 'The first response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
+    $this->assertFalse(isset($headers[0]['surrogate-control']), 'The first response has no "Surrogate-Control" header.');
 
     // Second response: redirect followed.
-    $this->assertEqual(200, $statuses[1], 'The second response was a 200.');
-    $this->assertTrue(empty(array_diff(['cookies:big_pipe_nojs', 'session.exists'], explode(' ', $headers[0]['X-Drupal-Cache-Contexts'][0]))), 'The first response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
-    $this->assertEqual('no-store, content="BigPipe/1.0"', $headers[1]['Surrogate-Control'][0], 'The second response has a "Surrogate-Control" header.');
+    $this->assertEqual('HTTP/1.1 200 OK', $headers[1][':status'], 'The second response was a 200.');
+    $this->assertTrue(empty(array_diff(['cookies:big_pipe_nojs', 'session.exists'], explode(' ', $headers[0]['x-drupal-cache-contexts']))), 'The first response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
+    $this->assertEqual('no-store, content="BigPipe/1.0"', $headers[1]['surrogate-control'], 'The second response has a "Surrogate-Control" header.');
 
     $this->assertNoRaw('<noscript><meta http-equiv="Refresh" content="0; URL=', 'Once the BigPipe no-JS cookie is set, the <meta> refresh is absent: only one redirect ever happens.');
   }
diff --git a/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipeTestController.php b/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipeTestController.php
index a708ecc882..22307708fd 100644
--- a/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipeTestController.php
+++ b/core/modules/big_pipe/tests/modules/big_pipe_test/src/BigPipeTestController.php
@@ -3,6 +3,7 @@
 namespace Drupal\big_pipe_test;
 
 use Drupal\big_pipe\Render\BigPipeMarkup;
+use Drupal\big_pipe\Tests\BigPipePlaceholderTestCases;
 use Drupal\big_pipe_test\EventSubscriber\BigPipeTestSubscriber;
 
 class BigPipeTestController {
@@ -60,7 +61,7 @@ public static function nope() {
   /**
    * A page with multiple occurrences of the same placeholder.
    *
-   * @see \Drupal\Tests\big_pipe\Functional\BigPipeTest::testBigPipeMultiOccurrencePlaceholders()
+   * @see \Drupal\big_pipe\Tests\BigPipeTest::testBigPipeMultipleOccurrencePlaceholders()
    *
    * @return array
    */
@@ -133,7 +134,7 @@ public static function responseException() {
   /**
    * #lazy_builder callback; returns the current count.
    *
-   * @see \Drupal\Tests\big_pipe\Functional\BigPipeTest::testBigPipeMultiOccurrencePlaceholders()
+   * @see \Drupal\big_pipe\Tests\BigPipeTest::testBigPipeMultipleOccurrencePlaceholders()
    *
    * @return array
    *   The render array.
diff --git a/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php b/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php
index 9770762fef..c56ee32787 100644
--- a/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php
+++ b/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php
@@ -35,6 +35,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
+  public function submitForm(array &$form, FormStateInterface $form_state) { }
 
 }
diff --git a/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php b/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php
index 733d265ddd..9de09424b8 100644
--- a/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php
+++ b/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php
@@ -3,7 +3,7 @@
 namespace Drupal\Tests\big_pipe\Unit\Render\Placeholder;
 
 use Drupal\big_pipe\Render\Placeholder\BigPipeStrategy;
-use Drupal\big_pipe_test\BigPipePlaceholderTestCases;
+use Drupal\big_pipe\Tests\BigPipePlaceholderTestCases;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\SessionConfigurationInterface;
 use Drupal\Tests\UnitTestCase;
@@ -59,7 +59,7 @@ public function testProcessPlaceholders(array $placeholders, $method, $route_mat
   }
 
   /**
-   * @see \Drupal\big_pipe_test\BigPipePlaceholderTestCases
+   * @see \Drupal\big_pipe\Tests\BigPipePlaceholderTestCases
    */
   public function placeholdersProvider() {
     $cases = BigPipePlaceholderTestCases::cases();
@@ -83,29 +83,25 @@ public function placeholdersProvider() {
       '_no_big_pipe present, no session, no-JS cookie present' => [$placeholders, 'GET', TRUE, FALSE, TRUE, []],
       '_no_big_pipe present, session, no-JS cookie absent' => [$placeholders, 'GET', TRUE, TRUE, FALSE, []],
       '_no_big_pipe present, session, no-JS cookie present' => [$placeholders, 'GET', TRUE, TRUE, TRUE, []],
-      '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders' => [
-        $placeholders, 'GET', FALSE, TRUE, FALSE, [
-          $cases['html']->placeholder                             => $cases['html']->bigPipePlaceholderRenderArray,
-          $cases['html_attribute_value']->placeholder             => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['html_attribute_value_subset']->placeholder      => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['edge_case__invalid_html']->placeholder          => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipePlaceholderRenderArray,
-          $cases['exception__lazy_builder']->placeholder          => $cases['exception__lazy_builder']->bigPipePlaceholderRenderArray,
-          $cases['exception__embedded_response']->placeholder     => $cases['exception__embedded_response']->bigPipePlaceholderRenderArray,
-        ],
-      ],
+      '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders' => [$placeholders, 'GET', FALSE, TRUE, FALSE, [
+        $cases['html']->placeholder                             => $cases['html']->bigPipePlaceholderRenderArray,
+        $cases['html_attribute_value']->placeholder             => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['html_attribute_value_subset']->placeholder      => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['edge_case__invalid_html']->placeholder          => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipePlaceholderRenderArray,
+        $cases['exception__lazy_builder']->placeholder          => $cases['exception__lazy_builder']->bigPipePlaceholderRenderArray,
+        $cases['exception__embedded_response']->placeholder     => $cases['exception__embedded_response']->bigPipePlaceholderRenderArray,
+      ]],
       '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders — but unsafe method' => [$placeholders, 'POST', FALSE, TRUE, FALSE, []],
-      '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders' => [
-        $placeholders, 'GET', FALSE, TRUE, TRUE, [
-          $cases['html']->placeholder                             => $cases['html']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['html_attribute_value']->placeholder             => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['html_attribute_value_subset']->placeholder      => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['edge_case__invalid_html']->placeholder          => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['exception__lazy_builder']->placeholder          => $cases['exception__lazy_builder']->bigPipeNoJsPlaceholderRenderArray,
-          $cases['exception__embedded_response']->placeholder     => $cases['exception__embedded_response']->bigPipeNoJsPlaceholderRenderArray,
-        ],
-      ],
+      '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders' => [$placeholders, 'GET', FALSE, TRUE, TRUE, [
+        $cases['html']->placeholder                             => $cases['html']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['html_attribute_value']->placeholder             => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['html_attribute_value_subset']->placeholder      => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['edge_case__invalid_html']->placeholder          => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['exception__lazy_builder']->placeholder          => $cases['exception__lazy_builder']->bigPipeNoJsPlaceholderRenderArray,
+        $cases['exception__embedded_response']->placeholder     => $cases['exception__embedded_response']->bigPipeNoJsPlaceholderRenderArray,
+      ]],
       '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders — but unsafe method' => [$placeholders, 'POST', FALSE, TRUE, TRUE, []],
     ];
   }
diff --git a/core/modules/block/src/Plugin/migrate/source/Block.php b/core/modules/block/src/Plugin/migrate/source/Block.php
index 2ef0beff0c..df4c0e9e19 100644
--- a/core/modules/block/src/Plugin/migrate/source/Block.php
+++ b/core/modules/block/src/Plugin/migrate/source/Block.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "block",
- *   source_module = "block"
+ *   source_provider = "block"
  * )
  */
 class Block extends DrupalSqlBase {
@@ -84,7 +84,7 @@ public function fields() {
     return [
       'bid' => $this->t('The block numeric identifier.'),
       'module' => $this->t('The module providing the block.'),
-      'delta' => $this->t("The block's delta."),
+      'delta' => $this->t('The block\'s delta.'),
       'theme' => $this->t('Which theme the block is placed in.'),
       'status' => $this->t('Whether or not the block is enabled.'),
       'weight' => $this->t('Weight of the block for ordering within regions.'),
diff --git a/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php b/core/modules/block/src/Tests/BlockAdminThemeTest.php
similarity index 94%
rename from core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
rename to core/modules/block/src/Tests/BlockAdminThemeTest.php
index 88f35e4b09..8773f03620 100644
--- a/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
+++ b/core/modules/block/src/Tests/BlockAdminThemeTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the block system with admin themes.
  *
  * @group block
  */
-class BlockAdminThemeTest extends BrowserTestBase {
+class BlockAdminThemeTest extends WebTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/tests/src/Functional/BlockFormInBlockTest.php b/core/modules/block/src/Tests/BlockFormInBlockTest.php
similarity index 93%
rename from core/modules/block/tests/src/Functional/BlockFormInBlockTest.php
rename to core/modules/block/src/Tests/BlockFormInBlockTest.php
index 3b46aee0e4..ebe43c8cef 100644
--- a/core/modules/block/tests/src/Functional/BlockFormInBlockTest.php
+++ b/core/modules/block/src/Tests/BlockFormInBlockTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Crypt;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 
 /**
@@ -11,7 +11,7 @@
  *
  * @group block
  */
-class BlockFormInBlockTest extends BrowserTestBase {
+class BlockFormInBlockTest extends WebTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/tests/src/Functional/BlockInstallTest.php b/core/modules/block/src/Tests/BlockInstallTest.php
similarity index 87%
rename from core/modules/block/tests/src/Functional/BlockInstallTest.php
rename to core/modules/block/src/Tests/BlockInstallTest.php
index c6fd1eb190..55f4b8a921 100644
--- a/core/modules/block/tests/src/Functional/BlockInstallTest.php
+++ b/core/modules/block/src/Tests/BlockInstallTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests block module's installation.
  *
  * @group block
  */
-class BlockInstallTest extends BrowserTestBase {
+class BlockInstallTest extends WebTestBase {
 
   public function testCacheTagInvalidationUponInstallation() {
     // Warm the page cache.
diff --git a/core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
similarity index 89%
rename from core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php
rename to core/modules/block/src/Tests/BlockLanguageCacheTest.php
index b9c7c909ee..269536d9ce 100644
--- a/core/modules/block/tests/src/Functional/BlockLanguageCacheTest.php
+++ b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\language\Entity\ConfigurableLanguage;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests display of menu blocks with multiple languages.
  *
  * @group block
  */
-class BlockLanguageCacheTest extends BrowserTestBase {
+class BlockLanguageCacheTest extends WebTestBase {
 
   /**
    * Modules to install.
@@ -57,7 +57,7 @@ public function testBlockLinks() {
     // Create the block cache for all languages.
     foreach ($this->langcodes as $langcode) {
       $this->drupalGet('admin/structure/block', ['language' => $langcode]);
-      $this->clickLink('Place block');
+      $this->clickLinkPartialName('Place block');
     }
 
     // Create a menu in the default language.
@@ -69,7 +69,7 @@ public function testBlockLinks() {
     // Check that the block is listed for all languages.
     foreach ($this->langcodes as $langcode) {
       $this->drupalGet('admin/structure/block', ['language' => $langcode]);
-      $this->clickLink('Place block');
+      $this->clickLinkPartialName('Place block');
       $this->assertText($edit['label']);
     }
   }
diff --git a/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php b/core/modules/block/src/Tests/BlockRenderOrderTest.php
similarity index 94%
rename from core/modules/block/tests/src/Functional/BlockRenderOrderTest.php
rename to core/modules/block/src/Tests/BlockRenderOrderTest.php
index 2fd1ab8925..a7e26ded4e 100644
--- a/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php
+++ b/core/modules/block/src/Tests/BlockRenderOrderTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests blocks are being rendered in order by weight.
  *
  * @group block
  */
-class BlockRenderOrderTest extends BrowserTestBase {
+class BlockRenderOrderTest extends WebTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php b/core/modules/block/src/Tests/BlockSystemBrandingTest.php
similarity index 96%
rename from core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
rename to core/modules/block/src/Tests/BlockSystemBrandingTest.php
index 89ce0c4b45..b5025e8017 100644
--- a/core/modules/block/tests/src/Functional/BlockSystemBrandingTest.php
+++ b/core/modules/block/src/Tests/BlockSystemBrandingTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 /**
  * Tests branding block display.
@@ -54,7 +54,7 @@ public function testSystemBrandingSettings() {
       ->save();
     $this->drupalGet('');
     $site_slogan_element = $this->xpath($site_slogan_xpath);
-    $this->assertEqual($site_slogan_element[0]->getText(), 'alert("Community carpentry");', 'The site slogan was XSS-filtered.');
+    $this->assertEqual($site_slogan_element[0], 'alert("Community carpentry");', 'The site slogan was XSS-filtered.');
 
     // Turn just the logo off.
     $this->config('block.block.site-branding')
diff --git a/core/modules/block/tests/src/Functional/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php
similarity index 98%
rename from core/modules/block/tests/src/Functional/BlockTest.php
rename to core/modules/block/src/Tests/BlockTest.php
index 7518c82dc1..4b9deb4c2c 100644
--- a/core/modules/block/tests/src/Functional/BlockTest.php
+++ b/core/modules/block/src/Tests/BlockTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Html;
 use Drupal\block\Entity\Block;
@@ -150,9 +150,9 @@ public function testAddBlockFromLibraryWithWeight() {
       ]);
       $links = $this->xpath('//a[contains(@href, :href)]', [':href' => $add_url->toString()]);
       $this->assertEqual(1, count($links), 'Found one matching link.');
-      $this->assertEqual(t('Place block'), $links[0]->getText(), 'Found the expected link text.');
+      $this->assertEqual(t('Place block'), (string) $links[0], 'Found the expected link text.');
 
-      list($path, $query_string) = explode('?', $links[0]->getAttribute('href'), 2);
+      list($path, $query_string) = explode('?', $links[0]['href'], 2);
       parse_str($query_string, $query_parts);
       $this->assertEqual($weight, $query_parts['weight'], 'Found the expected weight query string.');
 
@@ -164,7 +164,7 @@ public function testAddBlockFromLibraryWithWeight() {
         'settings[label]' => $title,
       ];
       // Create the block using the link parsed from the library page.
-      $this->drupalPostForm($this->getAbsoluteUrl($links[0]->getAttribute('href')), $edit, t('Save block'));
+      $this->drupalPostForm($this->getAbsoluteUrl($links[0]['href']), $edit, t('Save block'));
 
       // Ensure that the block was created with the expected weight.
       /** @var \Drupal\block\BlockInterface $block */
@@ -336,7 +336,7 @@ public function moveBlockToRegion(array $block, $region) {
     $this->drupalPostForm('admin/structure/block', $edit, t('Save blocks'));
 
     // Confirm that the block was moved to the proper region.
-    $this->assertText(t('The block settings have been updated.'), format_string('Block successfully moved to %region_name region.', ['%region_name' => $region]));
+    $this->assertText(t('The block settings have been updated.'), format_string('Block successfully moved to %region_name region.', [ '%region_name' => $region]));
 
     // Confirm that the block is being displayed.
     $this->drupalGet('');
diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/src/Tests/BlockTestBase.php
index 7397a47053..71f0ae6cff 100644
--- a/core/modules/block/src/Tests/BlockTestBase.php
+++ b/core/modules/block/src/Tests/BlockTestBase.php
@@ -2,18 +2,11 @@
 
 namespace Drupal\block\Tests;
 
-@trigger_error(__NAMESPACE__ . '\BlockTestBase is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\block\Functional\BlockTestBase, see https://www.drupal.org/node/2901823.', E_USER_DEPRECATED);
-
 use Drupal\simpletest\WebTestBase;
 use Drupal\filter\Entity\FilterFormat;
 
 /**
  * Provides setup and helper methods for block module tests.
- *
- * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\Tests\block\Functional\BlockTestBase.
- *
- * @see https://www.drupal.org/node/2901823
  */
 abstract class BlockTestBase extends WebTestBase {
 
diff --git a/core/modules/block/tests/src/Functional/BlockUiTest.php b/core/modules/block/src/Tests/BlockUiTest.php
similarity index 96%
rename from core/modules/block/tests/src/Functional/BlockUiTest.php
rename to core/modules/block/src/Tests/BlockUiTest.php
index e6c187544e..d4ebda4d9b 100644
--- a/core/modules/block/tests/src/Functional/BlockUiTest.php
+++ b/core/modules/block/src/Tests/BlockUiTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that the block configuration UI exists and stores data correctly.
  *
  * @group block
  */
-class BlockUiTest extends BrowserTestBase {
+class BlockUiTest extends WebTestBase {
 
   /**
    * Modules to install.
@@ -105,7 +105,7 @@ public function testBlockAdminUiPage() {
       $block = $this->blocks[$delta];
       $label = $block->label();
       $element = $this->xpath('//*[@id="blocks"]/tbody/tr[' . $values['tr'] . ']/td[1]/text()');
-      $this->assertEquals($element[0]->getText(), $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.');
+      $this->assertTrue((string) $element[0] == $label, 'The "' . $label . '" block title is set inside the ' . $values['settings']['region'] . ' region.');
       // Look for a test block region select form element.
       $this->assertField('blocks[' . $values['settings']['id'] . '][region]', 'The block "' . $values['label'] . '" has a region assignment field.');
       // Move the test block to the header region.
@@ -171,7 +171,7 @@ public function testCandidateBlockList() {
     $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The test block appears in the category for its module.');
 
@@ -180,7 +180,7 @@ public function testCandidateBlockList() {
     $this->container->get('plugin.manager.block')->clearCachedDefinitions();
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $arguments[':category'] = 'Custom category';
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The test block appears in a custom category controlled by block_test_block_alter().');
@@ -197,7 +197,7 @@ public function testContextAwareUnsatisfiedBlocks() {
     ];
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $elements = $this->xpath('//tr[.//td/div[text()=:text] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]', $arguments);
     $this->assertTrue(empty($elements), 'The context-aware test block does not appear.');
 
@@ -223,7 +223,7 @@ public function testContextAwareBlocks() {
     $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The context-aware test block appears.');
     $definition = \Drupal::service('plugin.manager.block')->getDefinition('test_context_aware');
diff --git a/core/modules/block/tests/src/Functional/BlockXssTest.php b/core/modules/block/src/Tests/BlockXssTest.php
similarity index 93%
rename from core/modules/block/tests/src/Functional/BlockXssTest.php
rename to core/modules/block/src/Tests/BlockXssTest.php
index 3e661d775d..b37f4cd223 100644
--- a/core/modules/block/tests/src/Functional/BlockXssTest.php
+++ b/core/modules/block/src/Tests/BlockXssTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\Core\Url;
+use Drupal\simpletest\WebTestBase;
 use Drupal\system\Entity\Menu;
-use Drupal\Tests\BrowserTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -14,7 +14,7 @@
  *
  * @group block
  */
-class BlockXssTest extends BrowserTestBase {
+class BlockXssTest extends WebTestBase {
 
   /**
    * Modules to install.
@@ -29,7 +29,7 @@ class BlockXssTest extends BrowserTestBase {
   public function testNoUnexpectedEscaping() {
     $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $this->assertNoEscaped('<');
   }
 
@@ -58,7 +58,7 @@ public function testXssInCategory() {
     $this->drupalPlaceBlock('test_xss_title');
     $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $this->assertNoRaw("<script>alert('XSS category');</script>");
   }
 
@@ -73,7 +73,7 @@ public function testBlockXss() {
     $this->doBlockContentTest();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $this->assertNoRaw('&amp;lt;', 'The page does not have double escaped HTML tags.');
   }
 
@@ -101,7 +101,7 @@ protected function doViewTest() {
     $view->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
 
     // \Drupal\views\Plugin\Derivative\ViewsBlock::getDerivativeDefinitions()
     // has a different code path for an admin label based only on the View
@@ -137,7 +137,7 @@ protected function doMenuTest() {
     ])->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
 
     $this->assertEscaped('<script>alert("menu");</script>');
     $this->assertNoRaw('<script>alert("menu");</script>');
@@ -158,7 +158,7 @@ protected function doBlockContentTest() {
     ])->save();
 
     $this->drupalGet(Url::fromRoute('block.admin_display'));
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
 
     $this->assertEscaped('<script>alert("block_content");</script>');
     $this->assertNoRaw('<script>alert("block_content");</script>');
diff --git a/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php b/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php
similarity index 86%
rename from core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
rename to core/modules/block/src/Tests/NonDefaultBlockAdminTest.php
index 7b7927de20..fc2f33c0da 100644
--- a/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
+++ b/core/modules/block/src/Tests/NonDefaultBlockAdminTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\block\Functional;
+namespace Drupal\block\Tests;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the block administration page for a non-default theme.
  *
  * @group block
  */
-class NonDefaultBlockAdminTest extends BrowserTestBase {
+class NonDefaultBlockAdminTest extends WebTestBase {
 
   /**
    * Modules to install.
diff --git a/core/modules/block/tests/src/Functional/Update/BlockConditionMissingSchemaUpdateTest.php b/core/modules/block/src/Tests/Update/BlockConditionMissingSchemaUpdateTest.php
similarity index 79%
rename from core/modules/block/tests/src/Functional/Update/BlockConditionMissingSchemaUpdateTest.php
rename to core/modules/block/src/Tests/Update/BlockConditionMissingSchemaUpdateTest.php
index f5e19a0594..8eef2e377b 100644
--- a/core/modules/block/tests/src/Functional/Update/BlockConditionMissingSchemaUpdateTest.php
+++ b/core/modules/block/src/Tests/Update/BlockConditionMissingSchemaUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\block\Functional\Update;
+namespace Drupal\block\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the upgrade path for block with conditions missing context.
@@ -34,8 +34,8 @@ class BlockConditionMissingSchemaUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.block-test-enabled-missing-schema.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.block-test-enabled-missing-schema.php',
     ];
   }
 
diff --git a/core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateFilledTest.php b/core/modules/block/src/Tests/Update/BlockContextMappingUpdateFilledTest.php
similarity index 64%
rename from core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateFilledTest.php
rename to core/modules/block/src/Tests/Update/BlockContextMappingUpdateFilledTest.php
index 55650c5135..dafd538d24 100644
--- a/core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateFilledTest.php
+++ b/core/modules/block/src/Tests/Update/BlockContextMappingUpdateFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\block\Functional\Update;
+namespace Drupal\block\Tests\Update;
 
 /**
  * Runs BlockContextMappingUpdateTest with a dump filled with content.
@@ -14,7 +14,7 @@ class BlockContextMappingUpdateFilledTest extends BlockContextMappingUpdateTest
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateTest.php b/core/modules/block/src/Tests/Update/BlockContextMappingUpdateTest.php
similarity index 88%
rename from core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateTest.php
rename to core/modules/block/src/Tests/Update/BlockContextMappingUpdateTest.php
index d1acb3b414..8a3106d628 100644
--- a/core/modules/block/tests/src/Functional/Update/BlockContextMappingUpdateTest.php
+++ b/core/modules/block/src/Tests/Update/BlockContextMappingUpdateTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\block\Functional\Update;
+namespace Drupal\block\Tests\Update;
 
 use Drupal\block\Entity\Block;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\node\Entity\Node;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the upgrade path for block context mapping renames.
@@ -25,10 +25,10 @@ class BlockContextMappingUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.block-context-manager-2354889.php',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.language-enabled.php',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.block-test-enabled.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.block-context-manager-2354889.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.language-enabled.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.block-test-enabled.php',
     ];
   }
 
diff --git a/core/modules/block/tests/src/Functional/Update/BlockRemoveDisabledRegionUpdateTest.php b/core/modules/block/src/Tests/Update/BlockRemoveDisabledRegionUpdateTest.php
similarity index 83%
rename from core/modules/block/tests/src/Functional/Update/BlockRemoveDisabledRegionUpdateTest.php
rename to core/modules/block/src/Tests/Update/BlockRemoveDisabledRegionUpdateTest.php
index 4409c2868e..60ba24c712 100644
--- a/core/modules/block/tests/src/Functional/Update/BlockRemoveDisabledRegionUpdateTest.php
+++ b/core/modules/block/src/Tests/Update/BlockRemoveDisabledRegionUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\block\Functional\Update;
+namespace Drupal\block\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the upgrade path for removal of disabled region.
@@ -23,8 +23,8 @@ class BlockRemoveDisabledRegionUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.update-test-block-disabled-2513534.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.update-test-block-disabled-2513534.php',
     ];
   }
 
diff --git a/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
similarity index 94%
rename from core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
rename to core/modules/block/src/Tests/Views/DisplayBlockTest.php
index 0a18d7fa0f..3d3584579a 100644
--- a/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
+++ b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
@@ -1,14 +1,13 @@
 <?php
 
-namespace Drupal\Tests\block\Functional\Views;
+namespace Drupal\block\Tests\Views;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Url;
-use Drupal\Tests\block\Functional\AssertBlockAppearsTrait;
-use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
-use Drupal\Tests\views\Functional\ViewTestBase;
+use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
 use Drupal\views\Entity\View;
 use Drupal\views\Views;
+use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
 use Drupal\Core\Template\Attribute;
 
@@ -16,12 +15,11 @@
  * Tests the block display plugin.
  *
  * @group block
- * @see \Drupal\views\Plugin\views\display\Block
+ * @see \Drupal\block\Plugin\views\display\Block
  */
 class DisplayBlockTest extends ViewTestBase {
 
   use AssertPageCacheContextsAndTagsTrait;
-  use AssertBlockAppearsTrait;
 
   /**
    * Modules to install.
@@ -37,11 +35,8 @@ class DisplayBlockTest extends ViewTestBase {
    */
   public static $testViews = ['test_view_block', 'test_view_block2'];
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
 
     ViewTestData::createTestViews(get_class($this), ['block_test_views']);
     $this->enableViewsTestModule();
@@ -72,10 +67,10 @@ public function testBlockCategory() {
         'plugin_id' => 'views_block:' . $edit['id'] . '-block_1',
         'theme' => 'classy',
       ]),
-      ':category' => 'Lists (Views)',
+      ':category' => t('Lists (Views)'),
     ];
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The test block appears in the category for its base table.');
 
@@ -100,7 +95,7 @@ public function testBlockCategory() {
     // Test that the blocks are listed under the correct categories.
     $arguments[':category'] = $category;
     $this->drupalGet('admin/structure/block');
-    $this->clickLink('Place block');
+    $this->clickLinkPartialName('Place block');
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The test block appears in the custom category.');
 
@@ -109,7 +104,7 @@ public function testBlockCategory() {
         'plugin_id' => 'views_block:' . $edit['id'] . '-block_2',
         'theme' => 'classy',
       ]),
-      ':category' => 'Lists (Views)',
+      ':category' => t('Lists (Views)'),
     ];
     $elements = $this->xpath($pattern, $arguments);
     $this->assertTrue(!empty($elements), 'The first duplicated test block remains in the original category.');
@@ -248,7 +243,7 @@ public function testBlockRendering() {
     $this->drupalGet('');
 
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
-    $this->assertEqual($result[0]->getText(), 'Custom title');
+    $this->assertEqual((string) $result[0], 'Custom title');
 
     // Don't override the title anymore.
     $plugin = $block->getPlugin();
@@ -257,7 +252,7 @@ public function testBlockRendering() {
 
     $this->drupalGet('');
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
-    $this->assertEqual($result[0]->getText(), 'test_view_block');
+    $this->assertEqual((string) $result[0], 'test_view_block');
 
     // Hide the title.
     $block->getPlugin()->setConfigurationValue('label_display', FALSE);
@@ -267,7 +262,7 @@ public function testBlockRendering() {
     $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2');
     $this->assertTrue(empty($result), 'The title is not visible.');
 
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block', 'http_response', 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block' , 'http_response', 'rendered']));
   }
 
   /**
@@ -293,7 +288,7 @@ public function testBlockEmptyRendering() {
     $this->assertEqual(0, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
     // Ensure that the view cacheability metadata is propagated even, for an
     // empty block.
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block', 'http_response', 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'http_response', 'rendered']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
 
     // Add a header displayed on empty result.
@@ -311,7 +306,7 @@ public function testBlockEmptyRendering() {
 
     $this->drupalGet($url);
     $this->assertEqual(1, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]')));
-    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block', 'http_response', 'rendered']));
+    $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'http_response', 'rendered']));
     $this->assertCacheContexts(['url.query_args:_wrapper_format']);
 
     // Hide the header on empty results.
@@ -368,10 +363,9 @@ public function testBlockContextualLinks() {
     // Get server-rendered contextual links.
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:renderContextualLinks()
     $post = ['ids[0]' => $id, 'ids[1]' => $cached_id];
-    $url = 'contextual/render?_format=json,destination=test-page';
-    $this->getSession()->getDriver()->getClient()->request('POST', $url, $post);
+    $response = $this->drupalPostWithFormat('contextual/render', 'json', $post, ['query' => ['destination' => 'test-page']]);
     $this->assertResponse(200);
-    $json = Json::decode($this->getSession()->getPage()->getContent());
+    $json = Json::decode($response);
     $this->assertIdentical($json[$id], '<ul class="contextual-links"><li class="block-configure"><a href="' . base_path() . 'admin/structure/block/manage/' . $block->id() . '">Configure block</a></li><li class="entityviewedit-form"><a href="' . base_path() . 'admin/structure/views/view/test_view_block/edit/block_1">Edit view</a></li></ul>');
     $this->assertIdentical($json[$cached_id], '<ul class="contextual-links"><li class="block-configure"><a href="' . base_path() . 'admin/structure/block/manage/' . $cached_block->id() . '">Configure block</a></li><li class="entityviewedit-form"><a href="' . base_path() . 'admin/structure/views/view/test_view_block/edit/block_1">Edit view</a></li></ul>');
   }
diff --git a/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php b/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php
deleted file mode 100644
index ef3ebef2f6..0000000000
--- a/core/modules/block/tests/src/Functional/AssertBlockAppearsTrait.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace Drupal\Tests\block\Functional;
-
-use Drupal\block\Entity\Block;
-use Drupal\Component\Render\FormattableMarkup;
-
-/**
- * Provides test assertions for testing block appearance.
- *
- * Can be used by test classes that extend \Drupal\Tests\BrowserTestBase.
- */
-trait AssertBlockAppearsTrait {
-
-  /**
-   * Checks to see whether a block appears on the page.
-   *
-   * @param \Drupal\block\Entity\Block $block
-   *   The block entity to find on the page.
-   */
-  protected function assertBlockAppears(Block $block) {
-    $result = $this->findBlockInstance($block);
-    $this->assertTrue(!empty($result), new FormattableMarkup('The block @id appears on the page', ['@id' => $block->id()]));
-  }
-
-  /**
-   * Checks to see whether a block does not appears on the page.
-   *
-   * @param \Drupal\block\Entity\Block $block
-   *   The block entity to find on the page.
-   */
-  protected function assertNoBlockAppears(Block $block) {
-    $result = $this->findBlockInstance($block);
-    $this->assertFalse(!empty($result), new FormattableMarkup('The block @id does not appear on the page', ['@id' => $block->id()]));
-  }
-
-  /**
-   * Find a block instance on the page.
-   *
-   * @param \Drupal\block\Entity\Block $block
-   *   The block entity to find on the page.
-   *
-   * @return array
-   *   The result from the xpath query.
-   */
-  protected function findBlockInstance(Block $block) {
-    return $this->xpath('//div[@id = :id]', [':id' => 'block-' . $block->id()]);
-  }
-
-}
diff --git a/core/modules/block/tests/src/Functional/BlockTestBase.php b/core/modules/block/tests/src/Functional/BlockTestBase.php
deleted file mode 100644
index e1ccd1a365..0000000000
--- a/core/modules/block/tests/src/Functional/BlockTestBase.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace Drupal\Tests\block\Functional;
-
-use Drupal\filter\Entity\FilterFormat;
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Provides setup and helper methods for block module tests.
- */
-abstract class BlockTestBase extends BrowserTestBase {
-
-  /**
-   * Modules to install.
-   *
-   * @var array
-   */
-  public static $modules = ['block', 'filter', 'test_page_test', 'help', 'block_test'];
-
-  /**
-   * A list of theme regions to test.
-   *
-   * @var array
-   */
-  protected $regions;
-
-  /**
-   * A test user with administrative privileges.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $adminUser;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    // Use the test page as the front page.
-    $this->config('system.site')->set('page.front', '/test-page')->save();
-
-    // Create Full HTML text format.
-    $full_html_format = FilterFormat::create([
-      'format' => 'full_html',
-      'name' => 'Full HTML',
-    ]);
-    $full_html_format->save();
-
-    // Create and log in an administrative user having access to the Full HTML
-    // text format.
-    $this->adminUser = $this->drupalCreateUser([
-      'administer blocks',
-      $full_html_format->getPermissionName(),
-      'access administration pages',
-    ]);
-    $this->drupalLogin($this->adminUser);
-
-    // Define the existing regions.
-    $this->regions = [
-      'header',
-      'sidebar_first',
-      'content',
-      'sidebar_second',
-      'footer',
-    ];
-    $block_storage = $this->container->get('entity_type.manager')->getStorage('block');
-    $blocks = $block_storage->loadByProperties(['theme' => $this->config('system.theme')->get('default')]);
-    foreach ($blocks as $block) {
-      $block->delete();
-    }
-  }
-
-}
diff --git a/core/modules/block/tests/src/Traits/BlockCreationTrait.php b/core/modules/block/tests/src/Traits/BlockCreationTrait.php
deleted file mode 100644
index fe0a379aff..0000000000
--- a/core/modules/block/tests/src/Traits/BlockCreationTrait.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-namespace Drupal\Tests\block\Traits;
-
-use Drupal\block\Entity\Block;
-
-/**
- * Provides methods to create and place block with default settings.
- *
- * This trait is meant to be used only by test classes.
- */
-trait BlockCreationTrait {
-
-  /**
-   * Creates a block instance based on default settings.
-   *
-   * @param string $plugin_id
-   *   The plugin ID of the block type for this block instance.
-   * @param array $settings
-   *   (optional) An associative array of settings for the block entity.
-   *   Override the defaults by specifying the key and value in the array, for
-   *   example:
-   *   @code
-   *     $this->drupalPlaceBlock('system_powered_by_block', array(
-   *       'label' => t('Hello, world!'),
-   *     ));
-   *   @endcode
-   *   The following defaults are provided:
-   *   - label: Random string.
-   *   - ID: Random string.
-   *   - region: 'sidebar_first'.
-   *   - theme: The default theme.
-   *   - visibility: Empty array.
-   *
-   * @return \Drupal\block\Entity\Block
-   *   The block entity.
-   *
-   * @todo
-   *   Add support for creating custom block instances.
-   */
-  protected function placeBlock($plugin_id, array $settings = []) {
-    $config = \Drupal::configFactory();
-    $settings += [
-      'plugin' => $plugin_id,
-      'region' => 'sidebar_first',
-      'id' => strtolower($this->randomMachineName(8)),
-      'theme' => $config->get('system.theme')->get('default'),
-      'label' => $this->randomMachineName(8),
-      'visibility' => [],
-      'weight' => 0,
-    ];
-    $values = [];
-    foreach (['region', 'id', 'theme', 'plugin', 'weight', 'visibility'] as $key) {
-      $values[$key] = $settings[$key];
-      // Remove extra values that do not belong in the settings array.
-      unset($settings[$key]);
-    }
-    foreach ($values['visibility'] as $id => $visibility) {
-      $values['visibility'][$id]['id'] = $id;
-    }
-    $values['settings'] = $settings;
-    $block = Block::create($values);
-    $block->save();
-    return $block;
-  }
-
-}
diff --git a/core/modules/block/tests/src/Unit/BlockConfigEntityUnitTest.php b/core/modules/block/tests/src/Unit/BlockConfigEntityUnitTest.php
index 921b5d2fbb..8df0e93a27 100644
--- a/core/modules/block/tests/src/Unit/BlockConfigEntityUnitTest.php
+++ b/core/modules/block/tests/src/Unit/BlockConfigEntityUnitTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\block\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Tests\Core\Plugin\Fixtures\TestConfigurablePlugin;
 use Drupal\Tests\UnitTestCase;
 
@@ -21,11 +20,11 @@ class BlockConfigEntityUnitTest extends UnitTestCase {
   protected $entityType;
 
   /**
-   * The entity type manager used for testing.
+   * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The ID of the type of the entity under test.
@@ -52,8 +51,8 @@ protected function setUp() {
       ->method('getProvider')
       ->will($this->returnValue('block'));
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -61,7 +60,7 @@ protected function setUp() {
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
     $container = new ContainerBuilder();
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('uuid', $this->uuid);
     \Drupal::setContainer($container);
   }
diff --git a/core/modules/block/tests/src/Unit/BlockFormTest.php b/core/modules/block/tests/src/Unit/BlockFormTest.php
index f19f921167..b8463490bd 100644
--- a/core/modules/block/tests/src/Unit/BlockFormTest.php
+++ b/core/modules/block/tests/src/Unit/BlockFormTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\block\Unit;
 
 use Drupal\block\BlockForm;
-use Drupal\block\Entity\Block;
-use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Plugin\PluginFormFactoryInterface;
 use Drupal\Tests\UnitTestCase;
 
@@ -84,32 +82,6 @@ protected function setUp() {
     $this->pluginFormFactory = $this->prophesize(PluginFormFactoryInterface::class);
   }
 
-  /**
-   * Mocks a block with a block plugin.
-   *
-   * @param string $machine_name
-   *   The machine name of the block plugin.
-   *
-   * @return \Drupal\block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject
-   *   The mocked block.
-   */
-  protected function getBlockMockWithMachineName($machine_name) {
-    $plugin = $this->getMockBuilder(BlockBase::class)
-      ->disableOriginalConstructor()
-      ->getMock();
-    $plugin->expects($this->any())
-      ->method('getMachineNameSuggestion')
-      ->will($this->returnValue($machine_name));
-
-    $block = $this->getMockBuilder(Block::class)
-      ->disableOriginalConstructor()
-      ->getMock();
-    $block->expects($this->any())
-      ->method('getPlugin')
-      ->will($this->returnValue($plugin));
-    return $block;
-  }
-
   /**
    * Tests the unique machine name generator.
    *
diff --git a/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php b/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php
index 6e442d75e5..6d7dbf2b9b 100644
--- a/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php
+++ b/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php
@@ -16,9 +16,9 @@ protected function setUp() {
     $this->directoryList = ['block' => 'core/modules/block'];
     parent::setUp();
 
-    $config_factory = $this->getConfigFactoryStub([
-      'system.theme' => ['default' => 'test_c'],
-    ]);
+    $config_factory = $this->getConfigFactoryStub(['system.theme' => [
+      'default' => 'test_c',
+    ]]);
 
     $themes = [];
     $themes['test_a'] = (object) [
diff --git a/core/modules/block_content/block_content.install b/core/modules/block_content/block_content.install
index c6556e719c..6af2ac4e8f 100644
--- a/core/modules/block_content/block_content.install
+++ b/core/modules/block_content/block_content.install
@@ -6,23 +6,6 @@
  */
 
 use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\Core\StringTranslation\TranslatableMarkup;
-
-/**
- * Implements hook_update_dependencies().
- */
-function block_content_update_dependencies() {
-  // The update function that adds the status field must run after
-  // content_translation_update_8400() which fixes NULL values for the
-  // 'content_translation_status' field.
-  if (\Drupal::moduleHandler()->moduleExists('content_translation')) {
-    $dependencies['block_content'][8400] = [
-      'content_translation' => 8400,
-    ];
-
-    return $dependencies;
-  }
-}
 
 /**
  * Add 'revision_translation_affected' field to 'block_content' entities.
@@ -87,54 +70,5 @@ function block_content_update_8300() {
   $entity_type = $definition_update_manager->getEntityType('block_content');
   $entity_type->set('revision_data_table', 'block_content_field_revision');
   $definition_update_manager->updateEntityType($entity_type);
-}
-
-/**
- * Add a publishing status field for block_content entities.
- */
-function block_content_update_8400() {
-  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
-
-  // Add the published entity key to the block_content entity type.
-  $entity_type = $definition_update_manager->getEntityType('block_content');
-  $entity_keys = $entity_type->getKeys();
-  $entity_keys['published'] = 'status';
-  $entity_type->set('entity_keys', $entity_keys);
-  $definition_update_manager->updateEntityType($entity_type);
-
-  // Add the publishing status field to the block_content entity type.
-  $status = BaseFieldDefinition::create('boolean')
-    ->setLabel(new TranslatableMarkup('Publishing status'))
-    ->setDescription(new TranslatableMarkup('A boolean indicating the published state.'))
-    ->setRevisionable(TRUE)
-    ->setTranslatable(TRUE)
-    ->setDefaultValue(TRUE);
-
-  $has_content_translation_status_field = \Drupal::moduleHandler()->moduleExists('content_translation') && $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content');
-  if ($has_content_translation_status_field) {
-    $status->setInitialValueFromField('content_translation_status');
-  }
-  else {
-    $status->setInitialValue(TRUE);
-  }
-  $definition_update_manager->installFieldStorageDefinition('status', 'block_content', 'block_content', $status);
-
-  // Uninstall the 'content_translation_status' field if needed.
-  $database = \Drupal::database();
-  if ($has_content_translation_status_field) {
-    // First we have to remove the field data.
-    $database->update($entity_type->getDataTable())
-      ->fields(['content_translation_status' => NULL])
-      ->execute();
-
-    // A site may have disabled revisionability for this entity type.
-    if ($entity_type->isRevisionable()) {
-      $database->update($entity_type->getRevisionDataTable())
-        ->fields(['content_translation_status' => NULL])
-        ->execute();
-    }
 
-    $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content');
-    $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status);
-  }
 }
diff --git a/core/modules/block_content/block_content.services.yml b/core/modules/block_content/block_content.services.yml
deleted file mode 100644
index 9c6dceb82e..0000000000
--- a/core/modules/block_content/block_content.services.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-services:
-  block_content.uuid_lookup:
-    class: \Drupal\block_content\BlockContentUuidLookup
-    arguments: ['@cache.bootstrap', '@lock', '@entity_type.manager']
-    tags:
-      - { name: needs_destruction }
diff --git a/core/modules/block_content/migration_templates/block_content_body_field.yml b/core/modules/block_content/migration_templates/block_content_body_field.yml
index a40ac204f2..b51d032168 100644
--- a/core/modules/block_content/migration_templates/block_content_body_field.yml
+++ b/core/modules/block_content/migration_templates/block_content_body_field.yml
@@ -19,7 +19,6 @@ source:
       type: string
     field_name:
       type: string
-  source_module: block
 process:
   entity_type: entity_type
   bundle: bundle
diff --git a/core/modules/block_content/migration_templates/block_content_entity_display.yml b/core/modules/block_content/migration_templates/block_content_entity_display.yml
index 9d75e6fb1c..06a35d7331 100644
--- a/core/modules/block_content/migration_templates/block_content_entity_display.yml
+++ b/core/modules/block_content/migration_templates/block_content_entity_display.yml
@@ -22,7 +22,6 @@ source:
       type: string
     field_name:
       type: string
-  source_module: block
 process:
   entity_type: entity_type
   bundle: bundle
diff --git a/core/modules/block_content/migration_templates/block_content_entity_form_display.yml b/core/modules/block_content/migration_templates/block_content_entity_form_display.yml
index d8f387e3ef..92b5a10c1d 100644
--- a/core/modules/block_content/migration_templates/block_content_entity_form_display.yml
+++ b/core/modules/block_content/migration_templates/block_content_entity_form_display.yml
@@ -20,7 +20,6 @@ source:
       type: string
     field_name:
       type: string
-  source_module: block
 process:
   entity_type: entity_type
   bundle: bundle
diff --git a/core/modules/block_content/migration_templates/block_content_type.yml b/core/modules/block_content/migration_templates/block_content_type.yml
index ca797b94e4..bc75eeac47 100644
--- a/core/modules/block_content/migration_templates/block_content_type.yml
+++ b/core/modules/block_content/migration_templates/block_content_type.yml
@@ -12,7 +12,6 @@ source:
   ids:
     id:
       type: string
-  source_module: block
 process:
   id: id
   label: label
diff --git a/core/modules/block_content/src/BlockContentAccessControlHandler.php b/core/modules/block_content/src/BlockContentAccessControlHandler.php
index 7079ef4849..d0c19c56df 100644
--- a/core/modules/block_content/src/BlockContentAccessControlHandler.php
+++ b/core/modules/block_content/src/BlockContentAccessControlHandler.php
@@ -19,8 +19,7 @@ class BlockContentAccessControlHandler extends EntityAccessControlHandler {
    */
   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
     if ($operation === 'view') {
-      return AccessResult::allowedIf($entity->isPublished())->addCacheableDependency($entity)
-        ->orIf(AccessResult::allowedIfHasPermission($account, 'administer blocks'));
+      return AccessResult::allowed();
     }
     return parent::checkAccess($entity, $operation, $account);
   }
diff --git a/core/modules/block_content/src/BlockContentInterface.php b/core/modules/block_content/src/BlockContentInterface.php
index 75fdc5979b..130cae1c3c 100644
--- a/core/modules/block_content/src/BlockContentInterface.php
+++ b/core/modules/block_content/src/BlockContentInterface.php
@@ -4,13 +4,12 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityChangedInterface;
-use Drupal\Core\Entity\EntityPublishedInterface;
 use Drupal\Core\Entity\RevisionLogInterface;
 
 /**
  * Provides an interface defining a custom block entity.
  */
-interface BlockContentInterface extends ContentEntityInterface, EntityChangedInterface, RevisionLogInterface, EntityPublishedInterface {
+interface BlockContentInterface extends ContentEntityInterface, EntityChangedInterface, RevisionLogInterface {
 
   /**
    * Returns the block revision log message.
diff --git a/core/modules/block_content/src/BlockContentListBuilder.php b/core/modules/block_content/src/BlockContentListBuilder.php
index 7a4bdfc4c8..96259173cd 100644
--- a/core/modules/block_content/src/BlockContentListBuilder.php
+++ b/core/modules/block_content/src/BlockContentListBuilder.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityListBuilder;
+use Drupal\Core\Routing\RedirectDestinationTrait;
 
 /**
  * Defines a class to build a listing of custom block entities.
@@ -12,6 +13,8 @@
  */
 class BlockContentListBuilder extends EntityListBuilder {
 
+  use RedirectDestinationTrait;
+
   /**
    * {@inheritdoc}
    */
@@ -28,4 +31,15 @@ public function buildRow(EntityInterface $entity) {
     return $row + parent::buildRow($entity);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultOperations(EntityInterface $entity) {
+    $operations = parent::getDefaultOperations($entity);
+    if (isset($operations['edit'])) {
+      $operations['edit']['query']['destination'] = $this->getRedirectDestination()->get();
+    }
+    return $operations;
+  }
+
 }
diff --git a/core/modules/block_content/src/BlockContentUuidLookup.php b/core/modules/block_content/src/BlockContentUuidLookup.php
deleted file mode 100644
index d771d98eac..0000000000
--- a/core/modules/block_content/src/BlockContentUuidLookup.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace Drupal\block_content;
-
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Cache\CacheCollector;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Lock\LockBackendInterface;
-
-/**
- * A cache collector that caches IDs for block_content UUIDs.
- *
- * As block_content entities are used as block plugin derivatives, it is a
- * fairly safe limitation that there are not hundreds of them, a site will
- * likely run into problems with too many block content entities in other places
- * than a cache that only stores UUID's and IDs. The same assumption is not true
- * for other content entities.
- *
- * @internal
- */
-class BlockContentUuidLookup extends CacheCollector {
-
-  /**
-   * The entity type manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * Constructs a BlockContentUuidLookup instance.
-   *
-   * @param \Drupal\Core\Cache\CacheBackendInterface $cache
-   *   The cache backend.
-   * @param \Drupal\Core\Lock\LockBackendInterface $lock
-   *   The lock backend.
-   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   The entity type manager.
-   */
-  public function __construct(CacheBackendInterface $cache, LockBackendInterface $lock, EntityTypeManagerInterface $entity_type_manager) {
-    parent::__construct('block_content_uuid', $cache, $lock);
-    $this->entityTypeManager = $entity_type_manager;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function resolveCacheMiss($key) {
-    $ids = $this->entityTypeManager->getStorage('block_content')->getQuery()
-      ->condition('uuid', $key)
-      ->execute();
-
-    // Only cache if there is a match, otherwise creating new entities would
-    // require to invalidate the cache.
-    $id = reset($ids);
-    if ($id) {
-      $this->storage[$key] = $id;
-      $this->persist($key);
-    }
-    return $id;
-  }
-
-}
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index 3c8858ff88..66a7a8fa43 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -2,7 +2,8 @@
 
 namespace Drupal\block_content\Entity;
 
-use Drupal\Core\Entity\EditorialContentEntityBase;
+use Drupal\Core\Entity\ContentEntityBase;
+use Drupal\Core\Entity\EntityChangedTrait;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
@@ -50,8 +51,7 @@
  *     "bundle" = "type",
  *     "label" = "info",
  *     "langcode" = "langcode",
- *     "uuid" = "uuid",
- *     "published" = "status",
+ *     "uuid" = "uuid"
  *   },
  *   revision_metadata_keys = {
  *     "revision_user" = "revision_user",
@@ -68,7 +68,9 @@
  * caching.
  * See https://www.drupal.org/node/2284917#comment-9132521 for more information.
  */
-class BlockContent extends EditorialContentEntityBase implements BlockContentInterface {
+class BlockContent extends ContentEntityBase implements BlockContentInterface {
+
+  use EntityChangedTrait;
 
   /**
    * The theme the block is being created in.
@@ -172,8 +174,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields['type']->setLabel(t('Block type'))
       ->setDescription(t('The block type.'));
 
-    $fields['revision_log']->setDescription(t('The log entry explaining the changes in this revision.'));
-
     $fields['info'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Block description'))
       ->setDescription(t('A brief description of your block.'))
@@ -187,12 +187,35 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDisplayConfigurable('form', TRUE)
       ->addConstraint('UniqueField', []);
 
+    $fields['revision_log'] = BaseFieldDefinition::create('string_long')
+      ->setLabel(t('Revision log message'))
+      ->setDescription(t('The log entry explaining the changes in this revision.'))
+      ->setRevisionable(TRUE)
+      ->setDisplayOptions('form', [
+        'type' => 'string_textarea',
+        'weight' => 25,
+        'settings' => [
+          'rows' => 4,
+        ],
+      ]);
+
     $fields['changed'] = BaseFieldDefinition::create('changed')
       ->setLabel(t('Changed'))
       ->setDescription(t('The time that the custom block was last edited.'))
       ->setTranslatable(TRUE)
       ->setRevisionable(TRUE);
 
+    $fields['revision_created'] = BaseFieldDefinition::create('created')
+      ->setLabel(t('Revision create time'))
+      ->setDescription(t('The time that the current revision was created.'))
+      ->setRevisionable(TRUE);
+
+    $fields['revision_user'] = BaseFieldDefinition::create('entity_reference')
+      ->setLabel(t('Revision user'))
+      ->setDescription(t('The user ID of the author of the current revision.'))
+      ->setSetting('target_type', 'user')
+      ->setRevisionable(TRUE);
+
     return $fields;
   }
 
diff --git a/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php b/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
index 5e09be8b58..ef0bd96ea2 100644
--- a/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
+++ b/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
@@ -2,12 +2,10 @@
 
 namespace Drupal\block_content\Plugin\Block;
 
-use Drupal\block_content\BlockContentUuidLookup;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Block\BlockManagerInterface;
-use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
@@ -34,11 +32,11 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
   protected $blockManager;
 
   /**
-   * The entity type manager service.
+   * The entity manager service.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   * @var \Drupal\Core\Entity\EntityManagerInterface
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The Drupal account to use for checking for access to block.
@@ -61,20 +59,6 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    */
   protected $urlGenerator;
 
-  /**
-   * The block content UUID lookup service.
-   *
-   * @var \Drupal\block_content\BlockContentUuidLookup
-   */
-  protected $uuidLookup;
-
-  /**
-   * The entity display repository.
-   *
-   * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
-   */
-  protected $entityDisplayRepository;
-
   /**
    * Constructs a new BlockContentBlock.
    *
@@ -86,26 +70,20 @@ class BlockContentBlock extends BlockBase implements ContainerFactoryPluginInter
    *   The plugin implementation definition.
    * @param \Drupal\Core\Block\BlockManagerInterface $block_manager
    *   The Plugin Block Manager.
-   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   The entity type manager service.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager service.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The account for which view access should be checked.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The URL generator.
-   * @param \Drupal\block_content\BlockContentUuidLookup $uuid_lookup
-   *   The block content UUID lookup service.
-   * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
-   *   The entity display repository.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, BlockManagerInterface $block_manager, EntityTypeManagerInterface $entity_type_manager, AccountInterface $account, UrlGeneratorInterface $url_generator, BlockContentUuidLookup $uuid_lookup, EntityDisplayRepositoryInterface $entity_display_repository) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, BlockManagerInterface $block_manager, EntityManagerInterface $entity_manager, AccountInterface $account, UrlGeneratorInterface $url_generator) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->blockManager = $block_manager;
-    $this->entityTypeManager = $entity_type_manager;
+    $this->entityManager = $entity_manager;
     $this->account = $account;
     $this->urlGenerator = $url_generator;
-    $this->uuidLookup = $uuid_lookup;
-    $this->entityDisplayRepository = $entity_display_repository;
   }
 
   /**
@@ -117,11 +95,9 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('plugin.manager.block'),
-      $container->get('entity_type.manager'),
+      $container->get('entity.manager'),
       $container->get('current_user'),
-      $container->get('url_generator'),
-      $container->get('block_content.uuid_lookup'),
-      $container->get('entity_display.repository')
+      $container->get('url_generator')
     );
   }
 
@@ -142,11 +118,9 @@ public function defaultConfiguration() {
    * Adds body and description fields to the block configuration form.
    */
   public function blockForm($form, FormStateInterface $form_state) {
-    $block = $this->getEntity();
-    if (!$block) {
-      return $form;
-    }
-    $options = $this->entityDisplayRepository->getViewModeOptionsByBundle('block_content', $block->bundle());
+    $uuid = $this->getDerivativeId();
+    $block = $this->entityManager->loadEntityByUuid('block_content', $uuid);
+    $options = $this->entityManager->getViewModeOptionsByBundle('block_content', $block->bundle());
 
     $form['view_mode'] = [
       '#type' => 'select',
@@ -184,7 +158,7 @@ protected function blockAccess(AccountInterface $account) {
    */
   public function build() {
     if ($block = $this->getEntity()) {
-      return $this->entityTypeManager->getViewBuilder($block->getEntityTypeId())->view($block, $this->configuration['view_mode']);
+      return $this->entityManager->getViewBuilder($block->getEntityTypeId())->view($block, $this->configuration['view_mode']);
     }
     else {
       return [
@@ -206,9 +180,7 @@ public function build() {
   protected function getEntity() {
     if (!isset($this->blockContent)) {
       $uuid = $this->getDerivativeId();
-      if ($id = $this->uuidLookup->get($uuid)) {
-        $this->blockContent = $this->entityTypeManager->getStorage('block_content')->load($id);
-      }
+      $this->blockContent = $this->entityManager->loadEntityByUuid('block_content', $uuid);
     }
     return $this->blockContent;
   }
diff --git a/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php b/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
index 0a1da1920e..a28927bd58 100644
--- a/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
+++ b/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
@@ -8,8 +8,7 @@
  * Drupal 6 block source from database.
  *
  * @MigrateSource(
- *   id = "d6_box",
- *   source_module = "block"
+ *   id = "d6_box"
  * )
  */
 class Box extends DrupalSqlBase {
diff --git a/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php b/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
index 7c166e9d3d..ea336829bf 100644
--- a/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
+++ b/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
@@ -8,8 +8,7 @@
  * Drupal 7 custom block source from database.
  *
  * @MigrateSource(
- *   id = "d7_block_custom",
- *   source_module = "block"
+ *   id = "d7_block_custom"
  * )
  */
 class BlockCustom extends DrupalSqlBase {
diff --git a/core/modules/block_content/tests/src/Functional/Update/BlockContentUpdateTest.php b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php
similarity index 56%
rename from core/modules/block_content/tests/src/Functional/Update/BlockContentUpdateTest.php
rename to core/modules/block_content/src/Tests/BlockContentUpdateTest.php
index f2653b72f7..77c12c653b 100644
--- a/core/modules/block_content/tests/src/Functional/Update/BlockContentUpdateTest.php
+++ b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\block_content\Functional\Update;
+namespace Drupal\block_content\Tests;
 
 use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests update functions for the Block Content module.
@@ -17,7 +17,7 @@ class BlockContentUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
@@ -43,27 +43,4 @@ public function testSimpleUpdates() {
     $this->assertEqual('block_content_field_revision', $entity_type->getRevisionDataTable());
   }
 
-  /**
-   * Tests adding a status field to the block content entity type.
-   *
-   * @see block_content_update_8400()
-   */
-  public function testStatusFieldAddition() {
-    $schema = \Drupal::database()->schema();
-    $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
-
-    // Run updates.
-    $this->runUpdates();
-
-    // Check that the field exists and has the correct label.
-    $updated_field = $entity_definition_update_manager->getFieldStorageDefinition('status', 'block_content');
-    $this->assertEqual('Publishing status', $updated_field->getLabel());
-
-    $content_translation_status = $entity_definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content');
-    $this->assertNull($content_translation_status);
-
-    $this->assertFalse($schema->fieldExists('block_content_field_revision', 'content_translation_status'));
-    $this->assertFalse($schema->fieldExists('block_content_field_data', 'content_translation_status'));
-  }
-
 }
diff --git a/core/modules/block_content/tests/src/Functional/BlockContentCreationTest.php b/core/modules/block_content/tests/src/Functional/BlockContentCreationTest.php
index 0f89b86e6a..562a4bd102 100644
--- a/core/modules/block_content/tests/src/Functional/BlockContentCreationTest.php
+++ b/core/modules/block_content/tests/src/Functional/BlockContentCreationTest.php
@@ -63,9 +63,7 @@ public function testBlockContentCreation() {
     $this->assertNoFieldByXPath('//select[@name="settings[view_mode]"]', NULL, 'View mode setting hidden because only one exists');
 
     // Check that the block exists in the database.
-    $blocks = \Drupal::entityTypeManager()
-      ->getStorage('block_content')
-      ->loadByProperties(['info' => $edit['info[0][value]']]);
+    $blocks = entity_load_multiple_by_properties('block_content', ['info' => $edit['info[0][value]']]);
     $block = reset($blocks);
     $this->assertTrue($block, 'Custom Block found in database.');
 
@@ -145,9 +143,7 @@ public function testBlockContentCreationMultipleViewModes() {
     $this->assertFieldByXPath('//select[@name="settings[view_mode]"]/option[@selected="selected"]', 'test_view_mode', 'View mode changed to Test View Mode');
 
     // Check that the block exists in the database.
-    $blocks = \Drupal::entityTypeManager()
-      ->getStorage('block_content')
-      ->loadByProperties(['info' => $edit['info[0][value]']]);
+    $blocks = entity_load_multiple_by_properties('block_content', ['info' => $edit['info[0][value]']]);
     $block = reset($blocks);
     $this->assertTrue($block, 'Custom Block found in database.');
 
@@ -182,9 +178,7 @@ public function testDefaultBlockContentCreation() {
     ]), 'Basic block created.');
 
     // Check that the block exists in the database.
-    $blocks = \Drupal::entityTypeManager()
-      ->getStorage('block_content')
-      ->loadByProperties(['info' => $edit['info[0][value]']]);
+    $blocks = entity_load_multiple_by_properties('block_content', ['info' => $edit['info[0][value]']]);
     $block = reset($blocks);
     $this->assertTrue($block, 'Default Custom Block found in database.');
   }
diff --git a/core/modules/block_content/tests/src/Functional/UnpublishedBlockTest.php b/core/modules/block_content/tests/src/Functional/UnpublishedBlockTest.php
deleted file mode 100644
index 026b0e5c21..0000000000
--- a/core/modules/block_content/tests/src/Functional/UnpublishedBlockTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace Drupal\Tests\block_content\Functional;
-
-use Drupal\block_content\Entity\BlockContent;
-use Drupal\simpletest\BlockCreationTrait;
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Tests unpublishing of block_content entities.
- *
- * @group block_content
- */
-class UnpublishedBlockTest extends BrowserTestBase {
-
-  use BlockCreationTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['block_content'];
-
-  /**
-   * Tests unpublishing of block_content entities.
-   */
-  public function testViewShowsCorrectStates() {
-    $block_content = BlockContent::create([
-      'info' => 'Test block',
-      'type' => 'basic',
-    ]);
-    $block_content->save();
-
-    $this->placeBlock('block_content:' . $block_content->uuid());
-
-    $this->drupalGet('<front>');
-    $page = $this->getSession()->getPage();
-    $this->assertTrue($page->has('css', '.block-block-content' . $block_content->uuid()));
-
-    $block_content->setPublished(FALSE);
-    $block_content->save();
-
-    $this->drupalGet('<front>');
-    $page = $this->getSession()->getPage();
-    $this->assertFalse($page->has('css', '.block-block-content' . $block_content->uuid()));
-  }
-
-}
diff --git a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
index 8fed905848..84e1fe3a49 100644
--- a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
+++ b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
@@ -35,7 +35,7 @@ protected function setUp() {
    *
    * @param string $id
    *   The entity ID.
-   * @param string $component_id
+   * @param string $component
    *   The ID of the form component.
    */
   protected function assertDisplay($id, $component_id) {
diff --git a/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php b/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php
index 30b7c253f5..ced7e84c30 100644
--- a/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php
+++ b/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php
@@ -19,9 +19,9 @@ protected function setUp() {
     ];
     parent::setUp();
 
-    $config_factory = $this->getConfigFactoryStub([
-      'system.theme' => ['default' => 'test_c'],
-    ]);
+    $config_factory = $this->getConfigFactoryStub(['system.theme' => [
+      'default' => 'test_c',
+    ]]);
 
     $themes = [];
     $themes['test_a'] = (object) [
diff --git a/core/modules/book/migration_templates/d6_book_settings.yml b/core/modules/book/migration_templates/d6_book_settings.yml
index d205b8de50..16e6695398 100644
--- a/core/modules/book/migration_templates/d6_book_settings.yml
+++ b/core/modules/book/migration_templates/d6_book_settings.yml
@@ -8,7 +8,6 @@ source:
     - book_child_type
     - book_block_mode
     - book_allowed_types
-  source_module: book
 process:
   child_type: book_child_type
   'block/navigation/mode': book_block_mode
diff --git a/core/modules/book/src/Plugin/migrate/source/d6/Book.php b/core/modules/book/src/Plugin/migrate/source/d6/Book.php
index 87ae972140..f41bb42dfa 100644
--- a/core/modules/book/src/Plugin/migrate/source/d6/Book.php
+++ b/core/modules/book/src/Plugin/migrate/source/d6/Book.php
@@ -8,8 +8,7 @@
  * Drupal 6 book source.
  *
  * @MigrateSource(
- *   id = "d6_book",
- *   source_module = "book"
+ *   id = "d6_book"
  * )
  */
 class Book extends DrupalSqlBase {
diff --git a/core/modules/book/tests/src/Functional/BookTestTrait.php b/core/modules/book/tests/src/Functional/BookTestTrait.php
index 26e1613f20..f694406324 100644
--- a/core/modules/book/tests/src/Functional/BookTestTrait.php
+++ b/core/modules/book/tests/src/Functional/BookTestTrait.php
@@ -72,15 +72,15 @@ public function createBook($edit = []) {
    * @param $nodes
    *   Nodes that should be in outline.
    * @param $previous
-   *   Previous link node.
+   *   (optional) Previous link node. Defaults to FALSE.
    * @param $up
-   *   Up link node.
+   *   (optional) Up link node. Defaults to FALSE.
    * @param $next
-   *   Next link node.
+   *   (optional) Next link node. Defaults to FALSE.
    * @param array $breadcrumb
    *   The nodes that should be displayed in the breadcrumb.
    */
-  public function checkBookNode(EntityInterface $node, $nodes, $previous, $up, $next, array $breadcrumb) {
+  public function checkBookNode(EntityInterface $node, $nodes, $previous = FALSE, $up = FALSE, $next = FALSE, array $breadcrumb) {
     // $number does not use drupal_static as it should not be reset
     // since it uniquely identifies each call to checkBookNode().
     static $number = 0;
diff --git a/core/modules/ckeditor/ckeditor.module b/core/modules/ckeditor/ckeditor.module
index 6ab6f6dce7..7905253440 100644
--- a/core/modules/ckeditor/ckeditor.module
+++ b/core/modules/ckeditor/ckeditor.module
@@ -17,7 +17,7 @@ function ckeditor_help($route_name, RouteMatchInterface $route_match) {
     case 'help.page.ckeditor':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The CKEditor module provides a highly-accessible, highly-usable visual text editor and adds a toolbar to text fields. Users can use buttons to format content and to create semantically correct and valid HTML. The CKEditor module uses the framework provided by the <a href=":text_editor">Text Editor module</a>. It requires JavaScript to be enabled in the browser. For more information, see the <a href=":doc_url">online documentation for the CKEditor module</a> and the <a href=":cke_url">CKEditor website</a>.', [':doc_url' => 'https://www.drupal.org/documentation/modules/ckeditor', ':cke_url' => 'http://ckeditor.com', ':text_editor' => \Drupal::url('help.page', ['name' => 'editor'])]) . '</p>';
+      $output .= '<p>' . t('The CKEditor module provides a highly-accessible, highly-usable visual text editor and adds a toolbar to text fields. Users can use buttons to format content and to create semantically correct and valid HTML. The CKEditor module uses the framework provided by the <a href=":text_editor">Text Editor module</a>. It requires JavaScript to be enabled in the browser. For more information, see the <a href=":doc_url">online documentation for the CKEditor module</a> and the <a href=":cke_url">CKEditor website</a>.', [ ':doc_url' => 'https://www.drupal.org/documentation/modules/ckeditor', ':cke_url' => 'http://ckeditor.com', ':text_editor' => \Drupal::url('help.page', ['name' => 'editor'])]) . '</p>';
       $output .= '<h3>' . t('Uses') . '</h3>';
       $output .= '<dl>';
       $output .= '<dt>' . t('Enabling CKEditor for individual text formats') . '</dt>';
@@ -29,7 +29,7 @@ function ckeditor_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dt>' . t('Toggling between formatted text and HTML source') . '</dt>';
       $output .= '<dd>' . t('If the <em>Source</em> button is available in the toolbar, users can click this button to disable the visual editor and edit the HTML source directly. After toggling back, the visual editor uses the allowed HTML tags to format the text — independent of whether buttons for these tags are available in the toolbar. If the text format is set to <em>limit the use of HTML tags</em>, then all excluded tags will be stripped out of the HTML source when the user toggles back to the text editor.') . '</dd>';
       $output .= '<dt>' . t('Check my spelling as I type') . '</dt>';
-      $output .= '<dd>' . t("By default, CKEditor is configured to leverage your browser's spell check capability. Make sure your browser's spell checker is enabled in your browser's settings. To access suggested corrections for misspelled words, it may be necessary to hold the <em>Control</em> or <em>command</em> (Mac) key while right-clicking the misspelling.") . '</dd>';
+      $output .= '<dd>' . t('By default, CKEditor is configured to leverage your browser\'s spell check capability. Make sure your browser\'s spell checker is enabled in your browser\'s settings. To access suggested corrections for misspelled words, it may be necessary to hold the <em>Control</em> or <em>command</em> (Mac) key while right-clicking the misspelling.') . '</dd>';
       $output .= '<dt>' . t('Accessibility features') . '</dt>';
       $output .= '<dd>' . t('The built in WYSIWYG editor (CKEditor) comes with a number of <a href=":features">accessibility features</a>. CKEditor comes with built in <a href=":shortcuts">keyboard shortcuts</a>, which can be beneficial for both power users and keyboard only users.', [':features' => 'http://docs.ckeditor.com/#!/guide/dev_a11y', ':shortcuts' => 'http://docs.ckeditor.com/#!/guide/dev_shortcuts']) . '</dd>';
       $output .= '<dt>' . t('Generating accessible content') . '</dt>';
diff --git a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
index 2f14bca89a..7b3386efe0 100644
--- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
+++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
@@ -101,9 +101,7 @@ public function validateStylesValue(array $element, FormStateInterface $form_sta
       $form_state->setError($element, $this->t('The provided list of styles is syntactically incorrect.'));
     }
     else {
-      $style_names = array_map(function ($style) {
-        return $style['name'];
-      }, $styles_setting);
+      $style_names = array_map(function ($style) { return $style['name']; }, $styles_setting);
       if (count($style_names) !== count(array_unique($style_names))) {
         $form_state->setError($element, $this->t('Each style must have a unique label.'));
       }
diff --git a/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php b/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
index 4f1da31834..4fbead9a35 100644
--- a/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
+++ b/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php
@@ -479,7 +479,7 @@ protected function getDefaultToolbarConfig() {
       ],
       [
         'name' => 'Tools',
-        'items' => ['Source'],
+        'items' => ['Source', ],
       ],
       '/',
     ];
diff --git a/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php b/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
index cad0947dcf..9d6607111f 100644
--- a/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
+++ b/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
@@ -101,17 +101,13 @@ public function testLoading() {
     list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck();
     $ckeditor_plugin = $this->container->get('plugin.manager.editor')->createInstance('ckeditor');
     $editor = Editor::load('filtered_html');
-    $expected = [
-      'formats' => [
-        'filtered_html' => [
-          'format' => 'filtered_html',
-          'editor' => 'ckeditor',
-          'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)),
-          'editorSupportsContentFiltering' => TRUE,
-          'isXssSafe' => FALSE,
-        ],
-      ],
-    ];
+    $expected = ['formats' => ['filtered_html' => [
+      'format' => 'filtered_html',
+      'editor' => 'ckeditor',
+      'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)),
+      'editorSupportsContentFiltering' => TRUE,
+      'isXssSafe' => FALSE,
+    ]]];
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertIdentical($expected, $this->castSafeStrings($settings['editor']), "Text Editor module's JavaScript settings on the page are correct.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
@@ -142,9 +138,7 @@ public function testLoading() {
           'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)),
           'editorSupportsContentFiltering' => TRUE,
           'isXssSafe' => FALSE,
-        ],
-      ],
-    ];
+    ]]];
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertIdentical($expected, $this->castSafeStrings($settings['editor']), "Text Editor module's JavaScript settings on the page are correct.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
diff --git a/core/modules/color/color.module b/core/modules/color/color.module
index 2de53f5c17..20d099abcf 100644
--- a/core/modules/color/color.module
+++ b/core/modules/color/color.module
@@ -28,7 +28,7 @@ function color_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dl>';
       $output .= '<dt>' . t('Changing colors') . '</dt>';
       $output .= '<dd><p>' . t('To change the color settings, select the <em>Settings</em> link for your theme on the <a href=":appearance">Appearance</a> page. If the color picker does not appear then the theme is not compatible with the Color module.', [':appearance' => \Drupal::url('system.themes_page')]) . '</p>';
-      $output .= '<p>' . t("The Color module saves a modified copy of the theme's specified stylesheets in the files directory. If you make any manual changes to your theme's stylesheet, <em>you must save your color settings again, even if you haven't changed the colors</em>. This step is required because the module stylesheets in the files directory need to be recreated to reflect your changes.") . '</p></dd>';
+      $output .= '<p>' . t('The Color module saves a modified copy of the theme\'s specified stylesheets in the files directory. If you make any manual changes to your theme\'s stylesheet, <em>you must save your color settings again, even if you haven\'t changed the colors</em>. This step is required because the module stylesheets in the files directory need to be recreated to reflect your changes.') . '</p></dd>';
       $output .= '</dl>';
       return $output;
   }
@@ -80,7 +80,7 @@ function color_library_info_alter(&$libraries, $extension) {
         if (isset($libraries[$name]['css'])) {
           // Override stylesheets.
           foreach ($libraries[$name]['css'] as $category => $css_assets) {
-            foreach ($css_assets as $path => $metadata) {
+            foreach ($css_assets as $path  => $metadata) {
               // Loop over the path array with recolored CSS files to find matching
               // paths which could replace the non-recolored paths.
               foreach ($color_paths as $color_path) {
diff --git a/core/modules/color/tests/src/Functional/ColorTest.php b/core/modules/color/tests/src/Functional/ColorTest.php
index c11a92262e..11ff1e737f 100644
--- a/core/modules/color/tests/src/Functional/ColorTest.php
+++ b/core/modules/color/tests/src/Functional/ColorTest.php
@@ -117,7 +117,7 @@ public function _testColor($theme, $test_values) {
     $stylesheets = $this->config('color.theme.' . $theme)->get('stylesheets');
     foreach ($stylesheets as $stylesheet) {
       $this->assertPattern('|' . file_url_transform_relative(file_create_url($stylesheet)) . '|', 'Make sure the color stylesheet is included in the content. (' . $theme . ')');
-      $stylesheet_content = implode("\n", file($stylesheet));
+      $stylesheet_content = join("\n", file($stylesheet));
       $this->assertTrue(strpos($stylesheet_content, 'color: #123456') !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');
     }
 
@@ -129,7 +129,7 @@ public function _testColor($theme, $test_values) {
     $this->drupalGet('<front>');
     $stylesheets = $this->config('color.theme.' . $theme)->get('stylesheets');
     foreach ($stylesheets as $stylesheet) {
-      $stylesheet_content = implode("\n", file($stylesheet));
+      $stylesheet_content = join("\n", file($stylesheet));
       $this->assertTrue(strpos($stylesheet_content, 'color: ' . $test_values['scheme_color']) !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');
     }
 
@@ -141,7 +141,7 @@ public function _testColor($theme, $test_values) {
     $stylesheets = \Drupal::state()->get('drupal_css_cache_files') ?: [];
     $stylesheet_content = '';
     foreach ($stylesheets as $uri) {
-      $stylesheet_content .= implode("\n", file(drupal_realpath($uri)));
+      $stylesheet_content .= join("\n", file(drupal_realpath($uri)));
     }
     $this->assertTrue(strpos($stylesheet_content, 'public://') === FALSE, 'Make sure the color paths have been translated to local paths. (' . $theme . ')');
     $config->set('css.preprocess', 0);
diff --git a/core/modules/comment/config/optional/views.view.comment.yml b/core/modules/comment/config/optional/views.view.comment.yml
index 4dbfb66022..478986f653 100644
--- a/core/modules/comment/config/optional/views.view.comment.yml
+++ b/core/modules/comment/config/optional/views.view.comment.yml
@@ -854,10 +854,10 @@ display:
       cacheable: false
       max-age: 0
       tags: {  }
-  page_published:
+  page_1:
     display_plugin: page
-    id: page_published
-    display_title: 'Published comments'
+    id: page_1
+    display_title: 'Published Comments'
     position: 1
     display_options:
       path: admin/content/comment
@@ -883,10 +883,10 @@ display:
       cacheable: false
       max-age: 0
       tags: {  }
-  page_unapproved:
+  page_2:
     display_plugin: page
-    id: page_unapproved
-    display_title: 'Unapproved comments'
+    id: page_2
+    display_title: 'Unapproved Comments'
     position: 2
     display_options:
       path: admin/content/comment/approval
diff --git a/core/modules/comment/migration_templates/d7_comment.yml b/core/modules/comment/migration_templates/d7_comment.yml
index 5e609a6556..94a2884477 100644
--- a/core/modules/comment/migration_templates/d7_comment.yml
+++ b/core/modules/comment/migration_templates/d7_comment.yml
@@ -16,15 +16,8 @@ process:
     source: pid
   entity_id: nid
   entity_type: 'constants/entity_type'
-  comment_type:
-    -
-      plugin: migration_lookup
-      source: comment_type
-      migration: d7_comment_type
-    -
-      plugin: skip_on_empty
-      method: row
-  field_name: '@comment_type'
+  comment_type: comment_type
+  field_name: comment_type
   subject: subject
   uid: uid
   name: name
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_display.yml b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
index 3ae948ecb3..2004505f3c 100644
--- a/core/modules/comment/migration_templates/d7_comment_entity_display.yml
+++ b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
@@ -13,14 +13,7 @@ source:
       weight: 20
 process:
   entity_type: 'constants/entity_type'
-  field_name:
-    -
-      plugin: migration_lookup
-      source: bundle
-      migration: d7_comment_type
-    -
-      plugin: skip_on_empty
-      method: row
+  field_name: bundle
   view_mode: 'constants/view_mode'
   options: 'constants/options'
   bundle: node_type
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
index 46f231d0f8..c27303e876 100644
--- a/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
+++ b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
@@ -22,14 +22,7 @@ process:
     map:
       0: true
       1: false
-  bundle:
-    -
-      plugin: migration_lookup
-      source: bundle
-      migration: d7_comment_type
-    -
-      plugin: skip_on_empty
-      method: row
+  bundle: bundle
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
diff --git a/core/modules/comment/migration_templates/d7_comment_field.yml b/core/modules/comment/migration_templates/d7_comment_field.yml
index 95a4602349..b4b3543db1 100644
--- a/core/modules/comment/migration_templates/d7_comment_field.yml
+++ b/core/modules/comment/migration_templates/d7_comment_field.yml
@@ -9,16 +9,9 @@ source:
     type: comment
 process:
   entity_type: 'constants/entity_type'
-  field_name:
-    -
-      plugin: migration_lookup
-      source: bundle
-      migration: d7_comment_type
-    -
-      plugin: skip_on_empty
-      method: row
+  field_name: bundle
   type: 'constants/type'
-  'settings/comment_type': '@field_name'
+  'settings/comment_type': bundle
 destination:
   plugin: entity:field_storage_config
 migration_dependencies:
diff --git a/core/modules/comment/migration_templates/d7_comment_field_instance.yml b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
index 147efcf25c..80a1a5198c 100644
--- a/core/modules/comment/migration_templates/d7_comment_field_instance.yml
+++ b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
@@ -12,14 +12,7 @@ process:
   entity_type: 'constants/entity_type'
   label: 'constants/label'
   required: 'constants/required'
-  field_name:
-    -
-      plugin: migration_lookup
-      source: bundle
-      migration: d7_comment_type
-    -
-      plugin: skip_on_empty
-      method: row
+  field_name: bundle
   bundle: node_type
   'default_value/0/status': 'constants/required'
   'settings/default_mode': default_mode
diff --git a/core/modules/comment/migration_templates/d7_comment_type.yml b/core/modules/comment/migration_templates/d7_comment_type.yml
index f94a59d211..090bfdde29 100644
--- a/core/modules/comment/migration_templates/d7_comment_type.yml
+++ b/core/modules/comment/migration_templates/d7_comment_type.yml
@@ -8,14 +8,7 @@ source:
     entity_type: node
 process:
   target_entity_type_id: 'constants/entity_type'
-  id:
-    plugin: static_map
-    source: bundle
-    bypass: true
-    # The Forum module provides its own comment type (comment_forum), which we
-    # want to reuse if it exists.
-    map:
-      comment_node_forum: comment_forum
+  id: bundle
   label: label
 destination:
   plugin: entity:comment_type
diff --git a/core/modules/comment/src/CommentViewBuilder.php b/core/modules/comment/src/CommentViewBuilder.php
index 51a9185853..ec6d49a5b0 100644
--- a/core/modules/comment/src/CommentViewBuilder.php
+++ b/core/modules/comment/src/CommentViewBuilder.php
@@ -126,15 +126,12 @@ public function buildComponents(array &$build, array $entities, array $displays,
       $display = $displays[$entity->bundle()];
       if ($display->getComponent('links')) {
         $build[$id]['links'] = [
-          '#lazy_builder' => [
-            'comment.lazy_builders:renderLinks',
-            [
-              $entity->id(),
-              $view_mode,
-              $entity->language()->getId(),
-              !empty($entity->in_preview),
-            ],
-          ],
+          '#lazy_builder' => ['comment.lazy_builders:renderLinks', [
+            $entity->id(),
+            $view_mode,
+            $entity->language()->getId(),
+            !empty($entity->in_preview),
+          ]],
           '#create_placeholder' => TRUE,
         ];
       }
diff --git a/core/modules/comment/src/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php
index a01106d77f..c834fa67a1 100644
--- a/core/modules/comment/src/Controller/CommentController.php
+++ b/core/modules/comment/src/Controller/CommentController.php
@@ -288,7 +288,7 @@ public function replyFormAccess(EntityInterface $entity, $field_name, $pid = NUL
       // Check if the user has the proper permissions.
       $access = $access->andIf(AccessResult::allowedIfHasPermission($account, 'access comments'));
 
-      // Load the parent comment.
+      /// Load the parent comment.
       $comment = $this->entityManager()->getStorage('comment')->load($pid);
       // Check if the parent comment is published and belongs to the entity.
       $access = $access->andIf(AccessResult::allowedIf($comment && $comment->isPublished() && $comment->getCommentedEntityId() == $entity->id()));
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index c2643fe025..821b30d0ba 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -82,6 +82,14 @@ class Comment extends ContentEntityBase implements CommentInterface {
   public function preSave(EntityStorageInterface $storage) {
     parent::preSave($storage);
 
+    if (is_null($this->get('status')->value)) {
+      if (\Drupal::currentUser()->hasPermission('skip comment approval')) {
+        $this->setPublished();
+      }
+      else {
+        $this->setUnpublished();
+      }
+    }
     if ($this->isNew()) {
       // Add the comment to database. This next section builds the thread field.
       // @see \Drupal\comment\CommentViewBuilder::buildComponents()
@@ -139,20 +147,17 @@ public function preSave(EntityStorageInterface $storage) {
         } while (!\Drupal::lock()->acquire($lock_name));
         $this->threadLock = $lock_name;
       }
+      // We test the value with '===' because we need to modify anonymous
+      // users as well.
+      if ($this->getOwnerId() === \Drupal::currentUser()->id() && \Drupal::currentUser()->isAuthenticated()) {
+        $this->setAuthorName(\Drupal::currentUser()->getUsername());
+      }
       $this->setThread($thread);
       if (!$this->getHostname()) {
         // Ensure a client host from the current request.
         $this->setHostname(\Drupal::request()->getClientIP());
       }
     }
-    // The entity fields for name and mail have no meaning if the user is not
-    // Anonymous. Set them to NULL to make it clearer that they are not used.
-    // For anonymous users see \Drupal\comment\CommentForm::form() for mail,
-    // and \Drupal\comment\CommentForm::buildEntity() for name setting.
-    if (!$this->getOwner()->isAnonymous()) {
-      $this->set('name', NULL);
-      $this->set('mail', NULL);
-    }
   }
 
   /**
@@ -233,9 +238,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
 
     $fields['langcode']->setDescription(t('The comment language code.'));
 
-    // Set the default value callback for the status field.
-    $fields['status']->setDefaultValueCallback('Drupal\comment\Entity\Comment::getDefaultStatus');
-
     $fields['pid'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Parent ID'))
       ->setDescription(t('The parent comment ID if this is a reply to a comment.'))
@@ -557,16 +559,4 @@ public function getTypeId() {
     return $this->bundle();
   }
 
-  /**
-   * Default value callback for 'status' base field definition.
-   *
-   * @see ::baseFieldDefinitions()
-   *
-   * @return bool
-   *   TRUE if the comment should be published, FALSE otherwise.
-   */
-  public static function getDefaultStatus() {
-    return \Drupal::currentUser()->hasPermission('skip comment approval') ? CommentInterface::PUBLISHED : CommentInterface::NOT_PUBLISHED;
-  }
-
 }
diff --git a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
index 414c5b2311..2492fc4336 100644
--- a/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
+++ b/core/modules/comment/src/Plugin/EntityReferenceSelection/CommentSelection.php
@@ -66,8 +66,6 @@ public function validateReferenceableNewEntities(array $entities) {
    * {@inheritdoc}
    */
   public function entityQueryAlter(SelectInterface $query) {
-    parent::entityQueryAlter($query);
-
     $tables = $query->getTables();
     $data_table = 'comment_field_data';
     if (!isset($tables['comment_field_data']['alias'])) {
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index 702148867a..b03accc489 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -192,15 +192,12 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
         $elements['#cache']['contexts'][] = 'user.roles';
         if ($this->currentUser->hasPermission('post comments')) {
           $output['comment_form'] = [
-            '#lazy_builder' => [
-              'comment.lazy_builders:renderForm',
-              [
-                $entity->getEntityTypeId(),
-                $entity->id(),
-                $field_name,
-                $this->getFieldSetting('comment_type'),
-              ],
-            ],
+            '#lazy_builder' => ['comment.lazy_builders:renderForm', [
+              $entity->getEntityTypeId(),
+              $entity->id(),
+              $field_name,
+              $this->getFieldSetting('comment_type'),
+            ]],
             '#create_placeholder' => TRUE,
           ];
         }
diff --git a/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php b/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php
index 50a14c1065..93f77a0e3f 100644
--- a/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php
+++ b/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_comment",
- *   source_module = "comment"
+ *   source_provider = "comment"
  * )
  */
 class Comment extends DrupalSqlBase {
@@ -21,9 +21,8 @@ class Comment extends DrupalSqlBase {
   public function query() {
     $query = $this->select('comments', 'c')
       ->fields('c', ['cid', 'pid', 'nid', 'uid', 'subject',
-      'comment', 'hostname', 'timestamp', 'status', 'thread', 'name',
-      'mail', 'homepage', 'format',
-    ]);
+        'comment', 'hostname', 'timestamp', 'status', 'thread', 'name',
+        'mail', 'homepage', 'format']);
     $query->innerJoin('node', 'n', 'c.nid = n.nid');
     $query->fields('n', ['type']);
     $query->orderBy('c.timestamp');
diff --git a/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariable.php b/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariable.php
index 398895b541..a56fb4dc21 100644
--- a/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariable.php
+++ b/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariable.php
@@ -7,8 +7,7 @@
 
 /**
  * @MigrateSource(
- *   id = "d6_comment_variable",
- *   source_module = "comment"
+ *   id = "d6_comment_variable"
  * )
  */
 class CommentVariable extends DrupalSqlBase {
diff --git a/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariablePerCommentType.php b/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariablePerCommentType.php
index 0096ecd185..0eea68608c 100644
--- a/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariablePerCommentType.php
+++ b/core/modules/comment/src/Plugin/migrate/source/d6/CommentVariablePerCommentType.php
@@ -4,8 +4,7 @@
 
 /**
  * @MigrateSource(
- *   id = "d6_comment_variable_per_comment_type",
- *   source_module = "comment"
+ *   id = "d6_comment_variable_per_comment_type"
  * )
  */
 class CommentVariablePerCommentType extends CommentVariable {
diff --git a/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php b/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php
index 4e3f3caa05..e643eb178c 100644
--- a/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php
+++ b/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d7_comment",
- *   source_module = "comment"
+ *   source_provider = "comment"
  * )
  */
 class Comment extends FieldableEntity {
diff --git a/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php b/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php
index a64fc8e065..2ac7c97a05 100644
--- a/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php
+++ b/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php
@@ -11,7 +11,7 @@
  *
  * @MigrateSource(
  *   id = "d7_comment_type",
- *   source_module = "comment"
+ *   source_provider = "comment"
  * )
  */
 class CommentType extends DrupalSqlBase {
diff --git a/core/modules/comment/src/Plugin/views/sort/Thread.php b/core/modules/comment/src/Plugin/views/sort/Thread.php
index 44fba2989c..1984934d47 100644
--- a/core/modules/comment/src/Plugin/views/sort/Thread.php
+++ b/core/modules/comment/src/Plugin/views/sort/Thread.php
@@ -16,14 +16,14 @@ class Thread extends SortPluginBase {
   public function query() {
     $this->ensureMyTable();
 
-    // Read comment_render() in comment.module for an explanation of the
-    // thinking behind this sort.
+    //Read comment_render() in comment.module for an explanation of the
+    //thinking behind this sort.
     if ($this->options['order'] == 'DESC') {
       $this->query->addOrderBy($this->tableAlias, $this->realField, $this->options['order']);
     }
     else {
       $alias = $this->tableAlias . '_' . $this->realField . 'asc';
-      // @todo is this secure?
+      //@todo is this secure?
       $this->query->addOrderBy(NULL, "SUBSTRING({$this->tableAlias}.{$this->realField}, 1, (LENGTH({$this->tableAlias}.{$this->realField}) - 1))", $this->options['order'], $alias);
     }
   }
diff --git a/core/modules/comment/src/Plugin/views/wizard/Comment.php b/core/modules/comment/src/Plugin/views/wizard/Comment.php
index a74168d096..61d92c591a 100644
--- a/core/modules/comment/src/Plugin/views/wizard/Comment.php
+++ b/core/modules/comment/src/Plugin/views/wizard/Comment.php
@@ -28,6 +28,14 @@ class Comment extends WizardPluginBase {
    * Set default values for the filters.
    */
   protected $filters = [
+    'status' => [
+      'value' => TRUE,
+      'table' => 'comment_field_data',
+      'field' => 'status',
+      'plugin_id' => 'boolean',
+      'entity_type' => 'comment',
+      'entity_field' => 'status',
+    ],
     'status_node' => [
       'value' => TRUE,
       'table' => 'node_field_data',
diff --git a/core/modules/comment/tests/src/Functional/CommentActionsTest.php b/core/modules/comment/src/Tests/CommentActionsTest.php
similarity index 97%
rename from core/modules/comment/tests/src/Functional/CommentActionsTest.php
rename to core/modules/comment/src/Tests/CommentActionsTest.php
index 79786fcc05..56d34e4a59 100644
--- a/core/modules/comment/tests/src/Functional/CommentActionsTest.php
+++ b/core/modules/comment/src/Tests/CommentActionsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\system\Entity\Action;
diff --git a/core/modules/comment/tests/src/Functional/CommentAdminTest.php b/core/modules/comment/src/Tests/CommentAdminTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentAdminTest.php
rename to core/modules/comment/src/Tests/CommentAdminTest.php
index 93cff3c6ce..7c4aae0373 100644
--- a/core/modules/comment/tests/src/Functional/CommentAdminTest.php
+++ b/core/modules/comment/src/Tests/CommentAdminTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Component\Utility\Html;
diff --git a/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php b/core/modules/comment/src/Tests/CommentAnonymousTest.php
similarity index 98%
rename from core/modules/comment/tests/src/Functional/CommentAnonymousTest.php
rename to core/modules/comment/src/Tests/CommentAnonymousTest.php
index bd0453796f..d60c0739f3 100644
--- a/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php
+++ b/core/modules/comment/src/Tests/CommentAnonymousTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\user\RoleInterface;
 
@@ -43,7 +43,7 @@ public function testAnonymous() {
     $edit['comment_body[0][value]'] = $body;
     $this->drupalPostForm($this->node->urlInfo(), $edit, t('Preview'));
     // Cannot use assertRaw here since both title and body are in the form.
-    $preview = (string) $this->cssSelect('.preview')[0]->getHtml();
+    $preview = (string) $this->cssSelect('.preview')[0]->asXML();
     $this->assertTrue(strpos($preview, $title) !== FALSE, 'Anonymous user can preview comment title.');
     $this->assertTrue(strpos($preview, $body) !== FALSE, 'Anonymous user can preview comment body.');
 
@@ -56,7 +56,7 @@ public function testAnonymous() {
     $edit['comment_body[0][value]'] = $body;
     $this->drupalPostForm($this->node->urlInfo(), $edit, t('Preview'));
     // Cannot use assertRaw here since both title and body are in the form.
-    $preview = (string) $this->cssSelect('.preview')[0]->getHtml();
+    $preview = (string) $this->cssSelect('.preview')[0]->asXML();
     $this->assertTrue(strpos($preview, $title) !== FALSE, 'Anonymous user can preview comment title.');
     $this->assertTrue(strpos($preview, $body) !== FALSE, 'Anonymous user can preview comment body.');
     user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, ['skip comment approval']);
diff --git a/core/modules/comment/tests/src/Functional/CommentBlockTest.php b/core/modules/comment/src/Tests/CommentBlockTest.php
similarity index 98%
rename from core/modules/comment/tests/src/Functional/CommentBlockTest.php
rename to core/modules/comment/src/Tests/CommentBlockTest.php
index db7d1bd827..37cc5de620 100644
--- a/core/modules/comment/tests/src/Functional/CommentBlockTest.php
+++ b/core/modules/comment/src/Tests/CommentBlockTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\user\RoleInterface;
diff --git a/core/modules/comment/tests/src/Functional/CommentBookTest.php b/core/modules/comment/src/Tests/CommentBookTest.php
similarity index 92%
rename from core/modules/comment/tests/src/Functional/CommentBookTest.php
rename to core/modules/comment/src/Tests/CommentBookTest.php
index 45693b57fb..4afd07ed83 100644
--- a/core/modules/comment/tests/src/Functional/CommentBookTest.php
+++ b/core/modules/comment/src/Tests/CommentBookTest.php
@@ -1,11 +1,10 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentInterface;
-use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\node\Entity\Node;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 use Drupal\comment\Entity\Comment;
 
 /**
@@ -13,7 +12,7 @@
  *
  * @group comment
  */
-class CommentBookTest extends BrowserTestBase {
+class CommentBookTest extends WebTestBase {
 
   use CommentTestTrait;
 
diff --git a/core/modules/comment/tests/src/Functional/CommentCSSTest.php b/core/modules/comment/src/Tests/CommentCSSTest.php
similarity index 97%
rename from core/modules/comment/tests/src/Functional/CommentCSSTest.php
rename to core/modules/comment/src/Tests/CommentCSSTest.php
index e17534a721..b50e9527a0 100644
--- a/core/modules/comment/tests/src/Functional/CommentCSSTest.php
+++ b/core/modules/comment/src/Tests/CommentCSSTest.php
@@ -1,12 +1,11 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\comment\CommentInterface;
 use Drupal\user\RoleInterface;
 use Drupal\comment\Entity\Comment;
-use Drupal\Tests\Traits\Core\GeneratePermutationsTrait;
 
 /**
  * Tests CSS classes on comments.
@@ -15,8 +14,6 @@
  */
 class CommentCSSTest extends CommentTestBase {
 
-  use GeneratePermutationsTrait;
-
   protected function setUp() {
     parent::setUp();
 
diff --git a/core/modules/comment/tests/src/Functional/CommentFieldsTest.php b/core/modules/comment/src/Tests/CommentFieldsTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentFieldsTest.php
rename to core/modules/comment/src/Tests/CommentFieldsTest.php
index 2df9973348..a463314a72 100644
--- a/core/modules/comment/tests/src/Functional/CommentFieldsTest.php
+++ b/core/modules/comment/src/Tests/CommentFieldsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\field\Entity\FieldStorageConfig;
diff --git a/core/modules/comment/tests/src/Functional/CommentInterfaceTest.php b/core/modules/comment/src/Tests/CommentInterfaceTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentInterfaceTest.php
rename to core/modules/comment/src/Tests/CommentInterfaceTest.php
index 7342633bbc..6f67ca84db 100644
--- a/core/modules/comment/tests/src/Functional/CommentInterfaceTest.php
+++ b/core/modules/comment/src/Tests/CommentInterfaceTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentManagerInterface;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
diff --git a/core/modules/comment/tests/src/Functional/CommentLanguageTest.php b/core/modules/comment/src/Tests/CommentLanguageTest.php
similarity index 97%
rename from core/modules/comment/tests/src/Functional/CommentLanguageTest.php
rename to core/modules/comment/src/Tests/CommentLanguageTest.php
index ce9a9abb04..eee0862ec6 100644
--- a/core/modules/comment/tests/src/Functional/CommentLanguageTest.php
+++ b/core/modules/comment/src/Tests/CommentLanguageTest.php
@@ -1,19 +1,18 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests for comment language.
  *
  * @group comment
  */
-class CommentLanguageTest extends BrowserTestBase {
+class CommentLanguageTest extends WebTestBase {
 
   use CommentTestTrait;
 
diff --git a/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php b/core/modules/comment/src/Tests/CommentLinksAlterTest.php
similarity index 94%
rename from core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php
rename to core/modules/comment/src/Tests/CommentLinksAlterTest.php
index e49361b651..88e092f08d 100644
--- a/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php
+++ b/core/modules/comment/src/Tests/CommentLinksAlterTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 /**
  * Tests comment links altering.
diff --git a/core/modules/comment/tests/src/Functional/CommentLinksTest.php b/core/modules/comment/src/Tests/CommentLinksTest.php
similarity index 94%
rename from core/modules/comment/tests/src/Functional/CommentLinksTest.php
rename to core/modules/comment/src/Tests/CommentLinksTest.php
index 3d79d96642..589a355663 100644
--- a/core/modules/comment/tests/src/Functional/CommentLinksTest.php
+++ b/core/modules/comment/src/Tests/CommentLinksTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -108,8 +108,8 @@ public function testCommentLinks() {
     $this->drupalGet($this->node->urlInfo());
     $element = $this->cssSelect('article.js-comment > div');
     // Get last child element.
-    $element = end($element);
-    $this->assertIdentical($element->getTagName(), 'div', 'Last element is comment body.');
+    $element = end($element[0]);
+    $this->assertIdentical($element[0]->getName(), 'div', 'Last element is comment body.');
 
     // Change weight to make links go after comment body.
     entity_get_display('comment', 'comment', 'default')
@@ -118,8 +118,8 @@ public function testCommentLinks() {
     $this->drupalGet($this->node->urlInfo());
     $element = $this->cssSelect('article.js-comment > div');
     // Get last child element.
-    $element = end($element);
-    $this->assertNotEmpty($element->find('css', 'ul.links'), 'Last element is comment links.');
+    $element = end($element[0]);
+    $this->assertIdentical($element[0]->getName(), 'ul', 'Last element is comment links.');
 
     // Make sure we can hide node links.
     entity_get_display('node', $this->node->bundle(), 'default')
diff --git a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
index 318e17c57c..55609e3778 100644
--- a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
+++ b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
@@ -129,12 +129,10 @@ public function testCommentNewCommentsIndicator() {
     $response = $this->renderNewCommentsNodeLinks([$this->node->id()]);
     $this->assertResponse(200);
     $json = Json::decode($response);
-    $expected = [
-      $this->node->id() => [
-        'new_comment_count' => 1,
-        'first_new_comment_link' => $this->node->url('canonical', ['fragment' => 'new']),
-      ],
-    ];
+    $expected = [$this->node->id() => [
+      'new_comment_count' => 1,
+      'first_new_comment_link' => $this->node->url('canonical', ['fragment' => 'new']),
+    ]];
     $this->assertIdentical($expected, $json);
 
     // Failing to specify node IDs for the endpoint should return a 404.
diff --git a/core/modules/comment/tests/src/Functional/CommentNodeAccessTest.php b/core/modules/comment/src/Tests/CommentNodeAccessTest.php
similarity index 98%
rename from core/modules/comment/tests/src/Functional/CommentNodeAccessTest.php
rename to core/modules/comment/src/Tests/CommentNodeAccessTest.php
index 6842dc137f..ffbffa1ff9 100644
--- a/core/modules/comment/tests/src/Functional/CommentNodeAccessTest.php
+++ b/core/modules/comment/src/Tests/CommentNodeAccessTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentManagerInterface;
 
diff --git a/core/modules/comment/tests/src/Functional/CommentNodeChangesTest.php b/core/modules/comment/src/Tests/CommentNodeChangesTest.php
similarity index 96%
rename from core/modules/comment/tests/src/Functional/CommentNodeChangesTest.php
rename to core/modules/comment/src/Tests/CommentNodeChangesTest.php
index a63ce8bc05..148198d001 100644
--- a/core/modules/comment/tests/src/Functional/CommentNodeChangesTest.php
+++ b/core/modules/comment/src/Tests/CommentNodeChangesTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\field\Entity\FieldConfig;
diff --git a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php b/core/modules/comment/src/Tests/CommentNonNodeTest.php
similarity index 95%
rename from core/modules/comment/tests/src/Functional/CommentNonNodeTest.php
rename to core/modules/comment/src/Tests/CommentNonNodeTest.php
index 257b7333fb..c75da84f62 100644
--- a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php
+++ b/core/modules/comment/src/Tests/CommentNonNodeTest.php
@@ -1,17 +1,16 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentInterface;
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\Entity\CommentType;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\field_ui\Tests\FieldUiTestTrait;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\user\RoleInterface;
 
@@ -20,7 +19,7 @@
  *
  * @group comment
  */
-class CommentNonNodeTest extends BrowserTestBase {
+class CommentNonNodeTest extends WebTestBase {
 
   use FieldUiTestTrait;
   use CommentTestTrait;
@@ -157,7 +156,7 @@ public function postComment(EntityInterface $entity, $comment, $subject = '', $c
     preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
 
     // Get comment.
-    if ($contact !== TRUE) {// If true then attempting to find error message.
+    if ($contact !== TRUE) { // If true then attempting to find error message.
       if ($subject) {
         $this->assertText($subject, 'Comment subject posted.');
       }
@@ -274,7 +273,7 @@ public function testCommentFunctionality() {
     // Test breadcrumb on comment add page.
     $this->drupalGet('comment/reply/entity_test/' . $this->entity->id() . '/comment');
     $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a';
-    $this->assertEqual(current($this->xpath($xpath))->getText(), $this->entity->label(), 'Last breadcrumb item is equal to node title on comment reply page.');
+    $this->assertEqual(current($this->xpath($xpath)), $this->entity->label(), 'Last breadcrumb item is equal to node title on comment reply page.');
 
     // Post a comment.
     /** @var \Drupal\comment\CommentInterface $comment1 */
@@ -284,17 +283,17 @@ public function testCommentFunctionality() {
     // Test breadcrumb on comment reply page.
     $this->drupalGet('comment/reply/entity_test/' . $this->entity->id() . '/comment/' . $comment1->id());
     $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a';
-    $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment title on comment reply page.');
+    $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment title on comment reply page.');
 
     // Test breadcrumb on comment edit page.
     $this->drupalGet('comment/' . $comment1->id() . '/edit');
     $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a';
-    $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on edit page.');
+    $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on edit page.');
 
     // Test breadcrumb on comment delete page.
     $this->drupalGet('comment/' . $comment1->id() . '/delete');
     $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a';
-    $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on delete confirm page.');
+    $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on delete confirm page.');
 
     // Unpublish the comment.
     $this->performCommentOperation($comment1, 'unpublish');
diff --git a/core/modules/comment/tests/src/Functional/CommentPreviewTest.php b/core/modules/comment/src/Tests/CommentPreviewTest.php
similarity index 92%
rename from core/modules/comment/tests/src/Functional/CommentPreviewTest.php
rename to core/modules/comment/src/Tests/CommentPreviewTest.php
index 89ac6681de..1b07fe600b 100644
--- a/core/modules/comment/tests/src/Functional/CommentPreviewTest.php
+++ b/core/modules/comment/src/Tests/CommentPreviewTest.php
@@ -1,12 +1,11 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentManagerInterface;
 use Drupal\Component\Render\MarkupInterface;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\comment\Entity\Comment;
-use Drupal\Tests\TestFileCreationTrait;
 
 /**
  * Tests comment preview.
@@ -15,10 +14,6 @@
  */
 class CommentPreviewTest extends CommentTestBase {
 
-  use TestFileCreationTrait {
-    getTestFiles as drupalGetTestFiles;
-  }
-
   /**
    * The profile to install as a basis for testing.
    *
@@ -110,13 +105,16 @@ public function testCommentPreviewDuplicateSubmission() {
     $this->assertFieldByName('comment_body[0][value]', $edit['comment_body[0][value]'], 'Comment field displayed.');
 
     // Store the content of this page.
+    $content = $this->getRawContent();
     $this->drupalPostForm(NULL, [], 'Save');
     $this->assertText('Your comment has been posted.');
     $elements = $this->xpath('//section[contains(@class, "comment-wrapper")]/article');
     $this->assertEqual(1, count($elements));
 
-    // Go back and re-submit the form.
-    $this->getSession()->getDriver()->back();
+    // Reset the content of the page to simulate the browser's back button, and
+    // re-submit the form.
+    $this->setRawContent($content);
+    $this->drupalPostForm(NULL, [], 'Save');
     $this->assertText('Your comment has been posted.');
     $elements = $this->xpath('//section[contains(@class, "comment-wrapper")]/article');
     $this->assertEqual(2, count($elements));
@@ -175,11 +173,11 @@ public function testCommentEditPreviewSave() {
 
     // Submit the form using the displayed values.
     $displayed = [];
-    $displayed['subject[0][value]'] = current($this->xpath("//input[@id='edit-subject-0-value']"))->getValue();
-    $displayed['comment_body[0][value]'] = current($this->xpath("//textarea[@id='edit-comment-body-0-value']"))->getValue();
-    $displayed['uid'] = current($this->xpath("//input[@id='edit-uid']"))->getValue();
-    $displayed['date[date]'] = current($this->xpath("//input[@id='edit-date-date']"))->getValue();
-    $displayed['date[time]'] = current($this->xpath("//input[@id='edit-date-time']"))->getValue();
+    $displayed['subject[0][value]'] = (string) current($this->xpath("//input[@id='edit-subject-0-value']/@value"));
+    $displayed['comment_body[0][value]'] = (string) current($this->xpath("//textarea[@id='edit-comment-body-0-value']"));
+    $displayed['uid'] = (string) current($this->xpath("//input[@id='edit-uid']/@value"));
+    $displayed['date[date]'] = (string) current($this->xpath("//input[@id='edit-date-date']/@value"));
+    $displayed['date[time]'] = (string) current($this->xpath("//input[@id='edit-date-time']/@value"));
     $this->drupalPostForm('comment/' . $comment->id() . '/edit', $displayed, t('Save'));
 
     // Check that the saved comment is still correct.
diff --git a/core/modules/comment/tests/src/Functional/CommentRssTest.php b/core/modules/comment/src/Tests/CommentRssTest.php
similarity index 97%
rename from core/modules/comment/tests/src/Functional/CommentRssTest.php
rename to core/modules/comment/src/Tests/CommentRssTest.php
index 60708bd4a8..35cad71fa9 100644
--- a/core/modules/comment/tests/src/Functional/CommentRssTest.php
+++ b/core/modules/comment/src/Tests/CommentRssTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Core\Cache\Cache;
diff --git a/core/modules/comment/tests/src/Functional/CommentStatisticsTest.php b/core/modules/comment/src/Tests/CommentStatisticsTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentStatisticsTest.php
rename to core/modules/comment/src/Tests/CommentStatisticsTest.php
index 4a0eae0879..0d1ec3a045 100644
--- a/core/modules/comment/tests/src/Functional/CommentStatisticsTest.php
+++ b/core/modules/comment/src/Tests/CommentStatisticsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentManagerInterface;
 use Drupal\comment\Entity\Comment;
diff --git a/core/modules/comment/src/Tests/CommentTestBase.php b/core/modules/comment/src/Tests/CommentTestBase.php
index 1b0f95981b..e15915ff93 100644
--- a/core/modules/comment/src/Tests/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/CommentTestBase.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\comment\Tests;
 
-@trigger_error(__NAMESPACE__ . '\CommentTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Use \Drupal\Tests\comment\Functional\CommentTestBase instead. See http://www.drupal.org/node/2908490', E_USER_DEPRECATED);
-
 use Drupal\comment\Entity\CommentType;
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\CommentInterface;
@@ -14,11 +12,6 @@
 
 /**
  * Provides setup and helper methods for comment tests.
- *
- * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\Tests\comment\Functional\CommentTestBase instead.
- *
- * @see https://www.drupal.org/node/2908490
  */
 abstract class CommentTestBase extends WebTestBase {
 
@@ -166,7 +159,7 @@ public function postComment($entity, $comment, $subject = '', $contact = NULL, $
     preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
 
     // Get comment.
-    if ($contact !== TRUE) {// If true then attempting to find error message.
+    if ($contact !== TRUE) { // If true then attempting to find error message.
       if ($subject) {
         $this->assertText($subject, 'Comment subject posted.');
       }
@@ -199,12 +192,12 @@ public function commentExists(CommentInterface $comment = NULL, $reply = FALSE)
       }
 
       $comment_title = $comment_element[0]->xpath('div/h3/a');
-      if (empty($comment_title) || ((string) $comment_title[0]) !== $comment->getSubject()) {
+      if (empty($comment_title) || ((string)$comment_title[0]) !== $comment->getSubject()) {
         return FALSE;
       }
 
       $comment_body = $comment_element[0]->xpath('div/div/p');
-      if (empty($comment_body) || ((string) $comment_body[0]) !== $comment->comment_body->value) {
+      if (empty($comment_body) || ((string)$comment_body[0]) !== $comment->comment_body->value) {
         return FALSE;
       }
 
diff --git a/core/modules/comment/tests/src/Functional/CommentThreadingTest.php b/core/modules/comment/src/Tests/CommentThreadingTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentThreadingTest.php
rename to core/modules/comment/src/Tests/CommentThreadingTest.php
index cff22ba22c..8f412b22f7 100644
--- a/core/modules/comment/tests/src/Functional/CommentThreadingTest.php
+++ b/core/modules/comment/src/Tests/CommentThreadingTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\CommentManagerInterface;
 
diff --git a/core/modules/comment/tests/src/Functional/CommentTitleTest.php b/core/modules/comment/src/Tests/CommentTitleTest.php
similarity index 85%
rename from core/modules/comment/tests/src/Functional/CommentTitleTest.php
rename to core/modules/comment/src/Tests/CommentTitleTest.php
index 65c4937e39..30d39357ba 100644
--- a/core/modules/comment/tests/src/Functional/CommentTitleTest.php
+++ b/core/modules/comment/src/Tests/CommentTitleTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 /**
  * Tests to ensure that appropriate and accessible markup is created for comment
@@ -29,12 +29,6 @@ public function testCommentEmptyTitles() {
     $subject_text = $this->randomMachineName();
     $comment_text = $this->randomMachineName();
     $comment = $this->postComment($this->node, $comment_text, $subject_text, TRUE);
-
-    // The entity fields for name and mail have no meaning if the user is not
-    // Anonymous.
-    $this->assertNull($comment->name->value);
-    $this->assertNull($comment->mail->value);
-
     // Confirm that the comment was created.
     $regex = '/<a id="comment-' . $comment->id() . '"(.*?)';
     $regex .= $comment->comment_body->value . '(.*?)';
@@ -61,19 +55,13 @@ public function testCommentPopulatedTitles() {
     $subject_text = $this->randomMachineName();
     $comment_text = $this->randomMachineName();
     $comment1 = $this->postComment($this->node, $comment_text, $subject_text, TRUE);
-
-    // The entity fields for name and mail have no meaning if the user is not
-    // Anonymous.
-    $this->assertNull($comment1->name->value);
-    $this->assertNull($comment1->mail->value);
-
     // Confirm that the comment was created.
     $this->assertTrue($this->commentExists($comment1), 'Comment #1. Comment found.');
     // Tests that markup is created for comment with heading.
     $this->assertPattern('|<h3[^>]*><a[^>]*>' . $subject_text . '</a></h3>|', 'Comment title is rendered in h3 when title populated.');
     // Tests that the comment's title link is the permalink of the comment.
     $comment_permalink = $this->cssSelect('.permalink');
-    $comment_permalink = $comment_permalink[0]->getAttribute('href');
+    $comment_permalink = (string) $comment_permalink[0]['href'];
     // Tests that the comment's title link contains the url fragment.
     $this->assertTrue(strpos($comment_permalink, '#comment-' . $comment1->id()), "The comment's title link contains the url fragment.");
     $this->assertEqual($comment1->permalink()->toString(), $comment_permalink, "The comment's title has the correct link.");
diff --git a/core/modules/comment/tests/src/Functional/CommentTokenReplaceTest.php b/core/modules/comment/src/Tests/CommentTokenReplaceTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentTokenReplaceTest.php
rename to core/modules/comment/src/Tests/CommentTokenReplaceTest.php
index a7fe6b5e07..6caea1789c 100644
--- a/core/modules/comment/tests/src/Functional/CommentTokenReplaceTest.php
+++ b/core/modules/comment/src/Tests/CommentTokenReplaceTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Component\Render\FormattableMarkup;
diff --git a/core/modules/comment/tests/src/Functional/CommentTranslationUITest.php b/core/modules/comment/src/Tests/CommentTranslationUITest.php
similarity index 97%
rename from core/modules/comment/tests/src/Functional/CommentTranslationUITest.php
rename to core/modules/comment/src/Tests/CommentTranslationUITest.php
index daac938fa3..4613d66ecc 100644
--- a/core/modules/comment/tests/src/Functional/CommentTranslationUITest.php
+++ b/core/modules/comment/src/Tests/CommentTranslationUITest.php
@@ -1,11 +1,10 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\comment\Tests\CommentTestTrait;
+use Drupal\content_translation\Tests\ContentTranslationUITestBase;
 use Drupal\language\Entity\ConfigurableLanguage;
-use Drupal\Tests\content_translation\Functional\ContentTranslationUITestBase;
 
 /**
  * Tests the Comment Translation UI.
diff --git a/core/modules/comment/tests/src/Functional/CommentTypeTest.php b/core/modules/comment/src/Tests/CommentTypeTest.php
similarity index 99%
rename from core/modules/comment/tests/src/Functional/CommentTypeTest.php
rename to core/modules/comment/src/Tests/CommentTypeTest.php
index e4ff2ea6ea..343bb9148c 100644
--- a/core/modules/comment/tests/src/Functional/CommentTypeTest.php
+++ b/core/modules/comment/src/Tests/CommentTypeTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\Entity\CommentType;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
diff --git a/core/modules/comment/tests/src/Functional/CommentUninstallTest.php b/core/modules/comment/src/Tests/CommentUninstallTest.php
similarity index 93%
rename from core/modules/comment/tests/src/Functional/CommentUninstallTest.php
rename to core/modules/comment/src/Tests/CommentUninstallTest.php
index 6e0c8a2b30..7873915f03 100644
--- a/core/modules/comment/tests/src/Functional/CommentUninstallTest.php
+++ b/core/modules/comment/src/Tests/CommentUninstallTest.php
@@ -1,18 +1,17 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional;
+namespace Drupal\comment\Tests;
 
-use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\Core\Extension\ModuleUninstallValidatorException;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests comment module uninstallation.
  *
  * @group comment
  */
-class CommentUninstallTest extends BrowserTestBase {
+class CommentUninstallTest extends WebTestBase {
 
   use CommentTestTrait;
 
diff --git a/core/modules/comment/tests/src/Functional/Update/CommentAdminViewUpdateTest.php b/core/modules/comment/src/Tests/Update/CommentAdminViewUpdateTest.php
similarity index 88%
rename from core/modules/comment/tests/src/Functional/Update/CommentAdminViewUpdateTest.php
rename to core/modules/comment/src/Tests/Update/CommentAdminViewUpdateTest.php
index 7e2ba6278f..87f8f23a09 100644
--- a/core/modules/comment/tests/src/Functional/Update/CommentAdminViewUpdateTest.php
+++ b/core/modules/comment/src/Tests/Update/CommentAdminViewUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Update;
+namespace Drupal\comment\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that comment admin view is enabled after update.
@@ -23,7 +23,7 @@ class CommentAdminViewUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/comment/tests/src/Functional/Update/CommentUpdateTest.php b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php
similarity index 92%
rename from core/modules/comment/tests/src/Functional/Update/CommentUpdateTest.php
rename to core/modules/comment/src/Tests/Update/CommentUpdateTest.php
index e623132bbb..3db9c4a67b 100644
--- a/core/modules/comment/tests/src/Functional/Update/CommentUpdateTest.php
+++ b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Update;
+namespace Drupal\comment\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that comment settings are properly updated during database updates.
@@ -16,7 +16,7 @@ class CommentUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/comment/tests/src/Functional/Views/ArgumentUserUIDTest.php b/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
similarity index 96%
rename from core/modules/comment/tests/src/Functional/Views/ArgumentUserUIDTest.php
rename to core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
index ad08f4fa91..d3526dc284 100644
--- a/core/modules/comment/tests/src/Functional/Views/ArgumentUserUIDTest.php
+++ b/core/modules/comment/src/Tests/Views/ArgumentUserUIDTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\user\Entity\User;
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentAdminTest.php b/core/modules/comment/src/Tests/Views/CommentAdminTest.php
similarity index 98%
rename from core/modules/comment/tests/src/Functional/Views/CommentAdminTest.php
rename to core/modules/comment/src/Tests/Views/CommentAdminTest.php
index ee42dcaddd..c834bca98c 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentAdminTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentAdminTest.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\Component\Render\FormattableMarkup;
-use Drupal\Tests\comment\Functional\CommentTestBase as CommentBrowserTestBase;
+use Drupal\comment\Tests\CommentTestBase as CommentWebTestBase;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\Unicode;
 use Drupal\user\RoleInterface;
@@ -18,7 +18,7 @@
  *
  * @group comment
  */
-class CommentAdminTest extends CommentBrowserTestBase {
+class CommentAdminTest extends CommentWebTestBase {
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentEditTest.php b/core/modules/comment/src/Tests/Views/CommentEditTest.php
similarity index 75%
rename from core/modules/comment/tests/src/Functional/Views/CommentEditTest.php
rename to core/modules/comment/src/Tests/Views/CommentEditTest.php
index fb5f736a87..2a11ef9628 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentEditTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentEditTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
-use Drupal\Tests\comment\Functional\CommentTestBase as CommentBrowserTestBase;
+use Drupal\comment\Tests\CommentTestBase as CommentWebTestBase;
 
 /**
  * Tests comment edit functionality.
  *
  * @group comment
  */
-class CommentEditTest extends CommentBrowserTestBase {
+class CommentEditTest extends CommentWebTestBase {
 
   /**
    * {@inheritdoc}
@@ -25,7 +25,7 @@ public function testCommentEdit() {
     $node_comment = $this->postComment($this->node, $this->randomMachineName(), $this->randomMachineName(), TRUE);
     $this->drupalGet('admin/content/comment');
     $this->assertText($this->adminUser->label());
-    $this->drupalGet($node_comment->toUrl('edit-form'));
+    $this->drupalGet($node_comment->toUrl('edit-form')->toString());
     $edit = [
       'comment_body[0][value]' => $this->randomMachineName(),
     ];
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php b/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
similarity index 96%
rename from core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php
rename to core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
index dabacc3bed..48f7d6d255 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\comment\Entity\Comment;
@@ -31,8 +31,8 @@ class CommentFieldFilterTest extends CommentTestBase {
    */
   public $commentTitles = [];
 
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  public function setUp() {
+    parent::setUp();
     $this->drupalLogin($this->drupalCreateUser(['access comments']));
 
     // Add two new languages.
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentFieldNameTest.php b/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
similarity index 94%
rename from core/modules/comment/tests/src/Functional/Views/CommentFieldNameTest.php
rename to core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
index a5e25be69c..870a4f4f86 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentFieldNameTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\Core\Render\RenderContext;
@@ -39,8 +39,8 @@ class CommentFieldNameTest extends CommentTestBase {
   /**
    * {@inheritdoc}
    */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
     $this->addDefaultCommentField('node', 'page', $this->fieldName);
     $this->customComment = Comment::create([
       'entity_id' => $this->nodeUserCommented->id(),
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentOperationsTest.php b/core/modules/comment/src/Tests/Views/CommentOperationsTest.php
similarity index 94%
rename from core/modules/comment/tests/src/Functional/Views/CommentOperationsTest.php
rename to core/modules/comment/src/Tests/Views/CommentOperationsTest.php
index 4bef37edc2..89dc364d28 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentOperationsTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentOperationsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 /**
  * Tests comment operations.
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentRestExportTest.php b/core/modules/comment/src/Tests/Views/CommentRestExportTest.php
similarity index 85%
rename from core/modules/comment/tests/src/Functional/Views/CommentRestExportTest.php
rename to core/modules/comment/src/Tests/Views/CommentRestExportTest.php
index 17e04b5c5c..ed7ce55e35 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentRestExportTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentRestExportTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\comment\Entity\Comment;
@@ -24,8 +24,8 @@ class CommentRestExportTest extends CommentTestBase {
    */
   public static $modules = ['node', 'comment', 'comment_test_views', 'rest', 'hal'];
 
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
     // Add another anonymous comment.
     $comment = [
       'uid' => 0,
@@ -51,7 +51,7 @@ protected function setUp($import_test_views = TRUE) {
    * Test comment row.
    */
   public function testCommentRestExport() {
-    $this->drupalGet(sprintf('node/%d/comments', $this->nodeUserCommented->id()), ['query' => ['_format' => 'hal_json']]);
+    $this->drupalGetWithFormat(sprintf('node/%d/comments', $this->nodeUserCommented->id()), 'hal_json');
     $this->assertResponse(200);
     $contents = Json::decode($this->getRawContent());
     $this->assertEqual($contents[0]['subject'], 'How much wood would a woodchuck chuck');
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentRowTest.php b/core/modules/comment/src/Tests/Views/CommentRowTest.php
similarity index 91%
rename from core/modules/comment/tests/src/Functional/Views/CommentRowTest.php
rename to core/modules/comment/src/Tests/Views/CommentRowTest.php
index 7cf3ef3b24..d73811e51e 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentRowTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentRowTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 /**
  * Tests the comment row plugin.
diff --git a/core/modules/comment/src/Tests/Views/CommentTestBase.php b/core/modules/comment/src/Tests/Views/CommentTestBase.php
index 3d10858351..d7bec04812 100644
--- a/core/modules/comment/src/Tests/Views/CommentTestBase.php
+++ b/core/modules/comment/src/Tests/Views/CommentTestBase.php
@@ -2,20 +2,13 @@
 
 namespace Drupal\comment\Tests\Views;
 
-@trigger_error(__NAMESPACE__ . '\CommentTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Use \Drupal\Tests\comment\Functional\Views\CommentTestBase instead. See http://www.drupal.org/node/2908490', E_USER_DEPRECATED);
-
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
 use Drupal\comment\Entity\Comment;
 
 /**
- * Provides setup and helper methods for comment views tests.
- *
- * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\Tests\comment\Functional\Views\CommentTestBase instead.
- *
- * @see https://www.drupal.org/node/2908490
+ * Tests the argument_comment_user_uid handler.
  */
 abstract class CommentTestBase extends ViewTestBase {
 
diff --git a/core/modules/comment/tests/src/Functional/Views/DefaultViewRecentCommentsTest.php b/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
similarity index 93%
rename from core/modules/comment/tests/src/Functional/Views/DefaultViewRecentCommentsTest.php
rename to core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
index 5cb9680514..3e5f26b0e8 100644
--- a/core/modules/comment/tests/src/Functional/Views/DefaultViewRecentCommentsTest.php
+++ b/core/modules/comment/src/Tests/Views/DefaultViewRecentCommentsTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\CommentInterface;
 use Drupal\comment\Entity\Comment;
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\views\Views;
-use Drupal\Tests\views\Functional\ViewTestBase;
+use Drupal\views\Tests\ViewTestBase;
 
 /**
  * Tests results for the Recent Comments view shipped with the module.
@@ -59,8 +59,8 @@ class DefaultViewRecentCommentsTest extends ViewTestBase {
    */
   public $node;
 
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
 
     // Create a new content type
     $content_type = $this->drupalCreateContentType();
@@ -130,7 +130,7 @@ public function testBlockDisplay() {
     $this->assertIdenticalResultset($view, $expected_result, $map);
 
     // Check the number of results given by the display is the expected.
-    $this->assertEqual(count($view->result), $this->blockDisplayResults,
+    $this->assertEqual(sizeof($view->result), $this->blockDisplayResults,
       format_string('There are exactly @results comments. Expected @expected',
         ['@results' => count($view->result), '@expected' => $this->blockDisplayResults]
       )
diff --git a/core/modules/comment/tests/src/Functional/Views/FilterUserUIDTest.php b/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
similarity index 96%
rename from core/modules/comment/tests/src/Functional/Views/FilterUserUIDTest.php
rename to core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
index 719c5978a5..442a0e762b 100644
--- a/core/modules/comment/tests/src/Functional/Views/FilterUserUIDTest.php
+++ b/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Entity\Comment;
 use Drupal\user\Entity\User;
diff --git a/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php b/core/modules/comment/src/Tests/Views/NodeCommentsTest.php
similarity index 93%
rename from core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php
rename to core/modules/comment/src/Tests/Views/NodeCommentsTest.php
index e2c5d15ef5..b0ee315629 100644
--- a/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php
+++ b/core/modules/comment/src/Tests/Views/NodeCommentsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 /**
  * Tests comments on nodes.
diff --git a/core/modules/comment/tests/src/Functional/Views/RowRssTest.php b/core/modules/comment/src/Tests/Views/RowRssTest.php
similarity index 55%
rename from core/modules/comment/tests/src/Functional/Views/RowRssTest.php
rename to core/modules/comment/src/Tests/Views/RowRssTest.php
index 7d61852ef8..343b797cf5 100644
--- a/core/modules/comment/tests/src/Functional/Views/RowRssTest.php
+++ b/core/modules/comment/src/Tests/Views/RowRssTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 /**
  * Tests the comment rss row plugin.
@@ -23,12 +23,10 @@ class RowRssTest extends CommentTestBase {
   public function testRssRow() {
     $this->drupalGet('test-comment-rss');
 
-    // Because the response is XML we can't use the page which depends on an
-    // HTML tag being present.
-    $result = $this->getSession()->getDriver()->find('//item');
+    $result = $this->xpath('//item');
     $this->assertEqual(count($result), 1, 'Just one comment was found in the rss output.');
 
-    $this->assertEqual($result[0]->find('xpath', '//pubDate')->getHtml(), gmdate('r', $this->comment->getCreatedTime()), 'The right pubDate appears in the rss output.');
+    $this->assertEqual($result[0]->pubdate, gmdate('r', $this->comment->getCreatedTime()), 'The right pubDate appears in the rss output.');
   }
 
 }
diff --git a/core/modules/comment/tests/src/Functional/Views/WizardTest.php b/core/modules/comment/src/Tests/Views/WizardTest.php
similarity index 92%
rename from core/modules/comment/tests/src/Functional/Views/WizardTest.php
rename to core/modules/comment/src/Tests/Views/WizardTest.php
index 62fada9fd0..a7f14c82ea 100644
--- a/core/modules/comment/tests/src/Functional/Views/WizardTest.php
+++ b/core/modules/comment/src/Tests/Views/WizardTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\comment\Functional\Views;
+namespace Drupal\comment\Tests\Views;
 
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\views\Views;
-use Drupal\Tests\views\Functional\Wizard\WizardTestBase;
+use Drupal\views\Tests\Wizard\WizardTestBase;
 
 /**
  * Tests the comment module integration into the wizard.
@@ -27,8 +27,8 @@ class WizardTest extends WizardTestBase {
   /**
    * {@inheritdoc}
    */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
     $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
     // Add comment field to page node type.
     $this->addDefaultCommentField('node', 'page');
@@ -63,7 +63,7 @@ public function testCommentWizard() {
     foreach ($fields as $field) {
       $items = $this->getAllOptions($field);
       foreach ($items as $item) {
-        $options[] = $item->getValue();
+        $options[] = $item->attributes()->value;
       }
     }
     $expected_options = ['entity:comment', 'fields'];
diff --git a/core/modules/comment/tests/src/Functional/CommentTestBase.php b/core/modules/comment/tests/src/Functional/CommentTestBase.php
deleted file mode 100644
index 97ba9d577d..0000000000
--- a/core/modules/comment/tests/src/Functional/CommentTestBase.php
+++ /dev/null
@@ -1,402 +0,0 @@
-<?php
-
-namespace Drupal\Tests\comment\Functional;
-
-use Drupal\comment\Entity\CommentType;
-use Drupal\comment\Entity\Comment;
-use Drupal\comment\CommentInterface;
-use Drupal\comment\Tests\CommentTestTrait;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\node\Entity\NodeType;
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Provides setup and helper methods for comment tests.
- */
-abstract class CommentTestBase extends BrowserTestBase {
-
-  use CommentTestTrait;
-
-  /**
-   * Modules to install.
-   *
-   * @var array
-   */
-  public static $modules = ['block', 'comment', 'node', 'history', 'field_ui', 'datetime'];
-
-  /**
-   * An administrative user with permission to configure comment settings.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $adminUser;
-
-  /**
-   * A normal user with permission to post comments.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $webUser;
-
-  /**
-   * A test node to which comments will be posted.
-   *
-   * @var \Drupal\node\NodeInterface
-   */
-  protected $node;
-
-  protected function setUp() {
-    parent::setUp();
-
-    // Create an article content type only if it does not yet exist, so that
-    // child classes may specify the standard profile.
-    $types = NodeType::loadMultiple();
-    if (empty($types['article'])) {
-      $this->drupalCreateContentType(['type' => 'article', 'name' => t('Article')]);
-    }
-
-    // Create two test users.
-    $this->adminUser = $this->drupalCreateUser([
-      'administer content types',
-      'administer comments',
-      'administer comment types',
-      'administer comment fields',
-      'administer comment display',
-      'skip comment approval',
-      'post comments',
-      'access comments',
-      // Usernames aren't shown in comment edit form autocomplete unless this
-      // permission is granted.
-      'access user profiles',
-      'access content',
-     ]);
-    $this->webUser = $this->drupalCreateUser([
-      'access comments',
-      'post comments',
-      'create article content',
-      'edit own comments',
-      'skip comment approval',
-      'access content',
-    ]);
-
-    // Create comment field on article.
-    $this->addDefaultCommentField('node', 'article');
-
-    // Create a test node authored by the web user.
-    $this->node = $this->drupalCreateNode(['type' => 'article', 'promote' => 1, 'uid' => $this->webUser->id()]);
-    $this->drupalPlaceBlock('local_tasks_block');
-  }
-
-  /**
-   * Posts a comment.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface|null $entity
-   *   Node to post comment on or NULL to post to the previously loaded page.
-   * @param string $comment
-   *   Comment body.
-   * @param string $subject
-   *   Comment subject.
-   * @param string $contact
-   *   Set to NULL for no contact info, TRUE to ignore success checking, and
-   *   array of values to set contact info.
-   * @param string $field_name
-   *   (optional) Field name through which the comment should be posted.
-   *   Defaults to 'comment'.
-   *
-   * @return \Drupal\comment\CommentInterface|null
-   *   The posted comment or NULL when posted comment was not found.
-   */
-  public function postComment($entity, $comment, $subject = '', $contact = NULL, $field_name = 'comment') {
-    $edit = [];
-    $edit['comment_body[0][value]'] = $comment;
-
-    if ($entity !== NULL) {
-      $field = FieldConfig::loadByName($entity->getEntityTypeId(), $entity->bundle(), $field_name);
-    }
-    else {
-      $field = FieldConfig::loadByName('node', 'article', $field_name);
-    }
-    $preview_mode = $field->getSetting('preview');
-
-    // Must get the page before we test for fields.
-    if ($entity !== NULL) {
-      $this->drupalGet('comment/reply/' . $entity->getEntityTypeId() . '/' . $entity->id() . '/' . $field_name);
-    }
-
-    // Determine the visibility of subject form field.
-    if (entity_get_form_display('comment', 'comment', 'default')->getComponent('subject')) {
-      // Subject input allowed.
-      $edit['subject[0][value]'] = $subject;
-    }
-    else {
-      $this->assertNoFieldByName('subject[0][value]', '', 'Subject field not found.');
-    }
-
-    if ($contact !== NULL && is_array($contact)) {
-      $edit += $contact;
-    }
-    switch ($preview_mode) {
-      case DRUPAL_REQUIRED:
-        // Preview required so no save button should be found.
-        $this->assertNoFieldByName('op', t('Save'), 'Save button not found.');
-        $this->drupalPostForm(NULL, $edit, t('Preview'));
-        // Don't break here so that we can test post-preview field presence and
-        // function below.
-      case DRUPAL_OPTIONAL:
-        $this->assertFieldByName('op', t('Preview'), 'Preview button found.');
-        $this->assertFieldByName('op', t('Save'), 'Save button found.');
-        $this->drupalPostForm(NULL, $edit, t('Save'));
-        break;
-
-      case DRUPAL_DISABLED:
-        $this->assertNoFieldByName('op', t('Preview'), 'Preview button not found.');
-        $this->assertFieldByName('op', t('Save'), 'Save button found.');
-        $this->drupalPostForm(NULL, $edit, t('Save'));
-        break;
-    }
-    $match = [];
-    // Get comment ID
-    preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
-
-    // Get comment.
-    if ($contact !== TRUE) {// If true then attempting to find error message.
-      if ($subject) {
-        $this->assertText($subject, 'Comment subject posted.');
-      }
-      $this->assertText($comment, 'Comment body posted.');
-      $this->assertTrue((!empty($match) && !empty($match[1])), 'Comment id found.');
-    }
-
-    if (isset($match[1])) {
-      \Drupal::entityManager()->getStorage('comment')->resetCache([$match[1]]);
-      return Comment::load($match[1]);
-    }
-  }
-
-  /**
-   * Checks current page for specified comment.
-   *
-   * @param \Drupal\comment\CommentInterface $comment
-   *   The comment object.
-   * @param bool $reply
-   *   Boolean indicating whether the comment is a reply to another comment.
-   *
-   * @return bool
-   *   Boolean indicating whether the comment was found.
-   */
-  public function commentExists(CommentInterface $comment = NULL, $reply = FALSE) {
-    if ($comment) {
-      $comment_element = $this->cssSelect('.comment-wrapper ' . ($reply ? '.indented ' : '') . '#comment-' . $comment->id() . ' ~ article');
-      if (empty($comment_element)) {
-        return FALSE;
-      }
-
-      $comment_title = $comment_element[0]->find('xpath', 'div/h3/a');
-      if (empty($comment_title) || $comment_title->getText() !== $comment->getSubject()) {
-        return FALSE;
-      }
-
-      $comment_body = $comment_element[0]->find('xpath', 'div/div/p');
-      if (empty($comment_body) || $comment_body->getText() !== $comment->comment_body->value) {
-        return FALSE;
-      }
-
-      return TRUE;
-    }
-    else {
-      return FALSE;
-    }
-  }
-
-  /**
-   * Deletes a comment.
-   *
-   * @param \Drupal\comment\CommentInterface $comment
-   *   Comment to delete.
-   */
-  public function deleteComment(CommentInterface $comment) {
-    $this->drupalPostForm('comment/' . $comment->id() . '/delete', [], t('Delete'));
-    $this->assertText(t('The comment and all its replies have been deleted.'), 'Comment deleted.');
-  }
-
-  /**
-   * Sets the value governing whether the subject field should be enabled.
-   *
-   * @param bool $enabled
-   *   Boolean specifying whether the subject field should be enabled.
-   */
-  public function setCommentSubject($enabled) {
-    $form_display = entity_get_form_display('comment', 'comment', 'default');
-    if ($enabled) {
-      $form_display->setComponent('subject', [
-        'type' => 'string_textfield',
-      ]);
-    }
-    else {
-      $form_display->removeComponent('subject');
-    }
-    $form_display->save();
-    // Display status message.
-    $this->pass('Comment subject ' . ($enabled ? 'enabled' : 'disabled') . '.');
-  }
-
-  /**
-   * Sets the value governing the previewing mode for the comment form.
-   *
-   * @param int $mode
-   *   The preview mode: DRUPAL_DISABLED, DRUPAL_OPTIONAL or DRUPAL_REQUIRED.
-   * @param string $field_name
-   *   (optional) Field name through which the comment should be posted.
-   *   Defaults to 'comment'.
-   */
-  public function setCommentPreview($mode, $field_name = 'comment') {
-    switch ($mode) {
-      case DRUPAL_DISABLED:
-        $mode_text = 'disabled';
-        break;
-
-      case DRUPAL_OPTIONAL:
-        $mode_text = 'optional';
-        break;
-
-      case DRUPAL_REQUIRED:
-        $mode_text = 'required';
-        break;
-    }
-    $this->setCommentSettings('preview', $mode, format_string('Comment preview @mode_text.', ['@mode_text' => $mode_text]), $field_name);
-  }
-
-  /**
-   * Sets the value governing whether the comment form is on its own page.
-   *
-   * @param bool $enabled
-   *   TRUE if the comment form should be displayed on the same page as the
-   *   comments; FALSE if it should be displayed on its own page.
-   * @param string $field_name
-   *   (optional) Field name through which the comment should be posted.
-   *   Defaults to 'comment'.
-   */
-  public function setCommentForm($enabled, $field_name = 'comment') {
-    $this->setCommentSettings('form_location', ($enabled ? CommentItemInterface::FORM_BELOW : CommentItemInterface::FORM_SEPARATE_PAGE), 'Comment controls ' . ($enabled ? 'enabled' : 'disabled') . '.', $field_name);
-  }
-
-  /**
-   * Sets the value governing restrictions on anonymous comments.
-   *
-   * @param int $level
-   *   The level of the contact information allowed for anonymous comments:
-   *   - 0: No contact information allowed.
-   *   - 1: Contact information allowed but not required.
-   *   - 2: Contact information required.
-   */
-  public function setCommentAnonymous($level) {
-    $this->setCommentSettings('anonymous', $level, format_string('Anonymous commenting set to level @level.', ['@level' => $level]));
-  }
-
-  /**
-   * Sets the value specifying the default number of comments per page.
-   *
-   * @param int $number
-   *   Comments per page value.
-   * @param string $field_name
-   *   (optional) Field name through which the comment should be posted.
-   *   Defaults to 'comment'.
-   */
-  public function setCommentsPerPage($number, $field_name = 'comment') {
-    $this->setCommentSettings('per_page', $number, format_string('Number of comments per page set to @number.', ['@number' => $number]), $field_name);
-  }
-
-  /**
-   * Sets a comment settings variable for the article content type.
-   *
-   * @param string $name
-   *   Name of variable.
-   * @param string $value
-   *   Value of variable.
-   * @param string $message
-   *   Status message to display.
-   * @param string $field_name
-   *   (optional) Field name through which the comment should be posted.
-   *   Defaults to 'comment'.
-   */
-  public function setCommentSettings($name, $value, $message, $field_name = 'comment') {
-    $field = FieldConfig::loadByName('node', 'article', $field_name);
-    $field->setSetting($name, $value);
-    $field->save();
-    // Display status message.
-    $this->pass($message);
-  }
-
-  /**
-   * Checks whether the commenter's contact information is displayed.
-   *
-   * @return bool
-   *   Contact info is available.
-   */
-  public function commentContactInfoAvailable() {
-    return preg_match('/(input).*?(name="name").*?(input).*?(name="mail").*?(input).*?(name="homepage")/s', $this->getRawContent());
-  }
-
-  /**
-   * Performs the specified operation on the specified comment.
-   *
-   * @param \Drupal\comment\CommentInterface $comment
-   *   Comment to perform operation on.
-   * @param string $operation
-   *   Operation to perform.
-   * @param bool $approval
-   *   Operation is found on approval page.
-   */
-  public function performCommentOperation(CommentInterface $comment, $operation, $approval = FALSE) {
-    $edit = [];
-    $edit['operation'] = $operation;
-    $edit['comments[' . $comment->id() . ']'] = TRUE;
-    $this->drupalPostForm('admin/content/comment' . ($approval ? '/approval' : ''), $edit, t('Update'));
-
-    if ($operation == 'delete') {
-      $this->drupalPostForm(NULL, [], t('Delete'));
-      $this->assertRaw(\Drupal::translation()->formatPlural(1, 'Deleted 1 comment.', 'Deleted @count comments.'), format_string('Operation "@operation" was performed on comment.', ['@operation' => $operation]));
-    }
-    else {
-      $this->assertText(t('The update has been performed.'), format_string('Operation "@operation" was performed on comment.', ['@operation' => $operation]));
-    }
-  }
-
-  /**
-   * Gets the comment ID for an unapproved comment.
-   *
-   * @param string $subject
-   *   Comment subject to find.
-   *
-   * @return int
-   *   Comment id.
-   */
-  public function getUnapprovedComment($subject) {
-    $this->drupalGet('admin/content/comment/approval');
-    preg_match('/href="(.*?)#comment-([^"]+)"(.*?)>(' . $subject . ')/', $this->getRawContent(), $match);
-
-    return $match[2];
-  }
-
-  /**
-   * Creates a comment comment type (bundle).
-   *
-   * @param string $label
-   *   The comment type label.
-   *
-   * @return \Drupal\comment\Entity\CommentType
-   *   Created comment type.
-   */
-  protected function createCommentType($label) {
-    $bundle = CommentType::create([
-      'id' => $label,
-      'label' => $label,
-      'description' => '',
-      'target_entity_type_id' => 'node',
-    ]);
-    $bundle->save();
-    return $bundle;
-  }
-
-}
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentTestBase.php b/core/modules/comment/tests/src/Functional/Views/CommentTestBase.php
deleted file mode 100644
index a9444a2320..0000000000
--- a/core/modules/comment/tests/src/Functional/Views/CommentTestBase.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-namespace Drupal\Tests\comment\Functional\Views;
-
-use Drupal\comment\Tests\CommentTestTrait;
-use Drupal\Tests\views\Functional\ViewTestBase;
-use Drupal\views\Tests\ViewTestData;
-use Drupal\comment\Entity\Comment;
-
-/**
- * Provides setup and helper methods for comment views tests.
- */
-abstract class CommentTestBase extends ViewTestBase {
-
-  use CommentTestTrait;
-
-  /**
-   * Modules to install.
-   *
-   * @var array
-   */
-  public static $modules = ['node', 'comment', 'comment_test_views'];
-
-  /**
-   * A normal user with permission to post comments (without approval).
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $account;
-
-  /**
-   * A second normal user that will author a node for $account to comment on.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $account2;
-
-  /**
-   * Stores a node posted by the user created as $account.
-   *
-   * @var \Drupal\node\NodeInterface
-   */
-  protected $nodeUserPosted;
-
-  /**
-   * Stores a node posted by the user created as $account2.
-   *
-   * @var \Drupal\node\NodeInterface
-   */
-  protected $nodeUserCommented;
-
-  /**
-   * Stores a comment used by the tests.
-   *
-   * @var \Drupal\comment\Entity\Comment
-   */
-  protected $comment;
-
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
-
-    ViewTestData::createTestViews(get_class($this), ['comment_test_views']);
-
-    // Add two users, create a node with the user1 as author and another node
-    // with user2 as author. For the second node add a comment from user1.
-    $this->account = $this->drupalCreateUser(['skip comment approval']);
-    $this->account2 = $this->drupalCreateUser();
-    $this->drupalLogin($this->account);
-
-    $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
-    $this->addDefaultCommentField('node', 'page');
-
-    $this->nodeUserPosted = $this->drupalCreateNode();
-    $this->nodeUserCommented = $this->drupalCreateNode(['uid' => $this->account2->id()]);
-
-    $comment = [
-      'uid' => $this->loggedInUser->id(),
-      'entity_id' => $this->nodeUserCommented->id(),
-      'entity_type' => 'node',
-      'field_name' => 'comment',
-      'subject' => 'How much wood would a woodchuck chuck',
-      'cid' => '',
-      'pid' => '',
-      'mail' => 'someone@example.com',
-    ];
-    $this->comment = Comment::create($comment);
-    $this->comment->save();
-  }
-
-}
diff --git a/core/modules/comment/tests/src/Kernel/CommentBundlesTest.php b/core/modules/comment/tests/src/Kernel/CommentBundlesTest.php
deleted file mode 100644
index d907233409..0000000000
--- a/core/modules/comment/tests/src/Kernel/CommentBundlesTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-namespace Drupal\Tests\comment\Kernel;
-
-use Drupal\comment\Entity\CommentType;
-use Drupal\KernelTests\KernelTestBase;
-
-/**
- * Tests that comment bundles behave as expected.
- *
- * @group comment
- */
-class CommentBundlesTest extends KernelTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['comment', 'node', 'taxonomy', 'user'];
-
-  /**
-   * Entity type ids to use for target_entity_type_id on comment bundles.
-   *
-   * @var array
-   */
-  protected $targetEntityTypes;
-
-  /**
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
-   */
-  protected $entityFieldManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->entityFieldManager = $this->container->get('entity_field.manager');
-
-    $this->installEntitySchema('comment');
-
-    // Create multiple comment bundles,
-    // each of which has a different target entity type.
-    $this->targetEntityTypes = [
-      'comment' => 'Comment',
-      'node' => 'Node',
-      'taxonomy_term' => 'Taxonomy Term',
-    ];
-    foreach ($this->targetEntityTypes as $id => $label) {
-      CommentType::create([
-        'id' => 'comment_on_' . $id,
-        'label' => 'Comment on ' . $label,
-        'target_entity_type_id' => $id,
-      ])->save();
-    }
-  }
-
-  /**
-   * Test that the entity_id field is set correctly for each comment bundle.
-   */
-  public function testEntityIdField() {
-    $field_definitions = [];
-
-    foreach (array_keys($this->targetEntityTypes) as $id) {
-      $bundle = 'comment_on_' . $id;
-      $field_definitions[$bundle] = $this->entityFieldManager
-        ->getFieldDefinitions('comment', $bundle);
-    }
-    // Test that the value of the entity_id field for each bundle is correct.
-    foreach ($field_definitions as $bundle => $definition) {
-      $entity_type_id = str_replace('comment_on_', '', $bundle);
-      $target_type = $definition['entity_id']->getSetting('target_type');
-      $this->assertEquals($entity_type_id, $target_type);
-
-      // Verify that the target type remains correct
-      // in the deeply-nested object properties.
-      $nested_target_type = $definition['entity_id']->getItemDefinition()->getFieldDefinition()->getSetting('target_type');
-      $this->assertEquals($entity_type_id, $nested_target_type);
-    }
-
-  }
-
-}
diff --git a/core/modules/comment/tests/src/Kernel/CommentItemTest.php b/core/modules/comment/tests/src/Kernel/CommentItemTest.php
index 1a7fc655d5..7b9a263c2d 100644
--- a/core/modules/comment/tests/src/Kernel/CommentItemTest.php
+++ b/core/modules/comment/tests/src/Kernel/CommentItemTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\comment\Kernel;
 
-use Drupal\comment\Entity\Comment;
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\Core\Field\FieldItemListInterface;
@@ -65,52 +64,4 @@ public function testCommentItem() {
     $this->assertEqual('status', $mainProperty);
   }
 
-  /**
-   * Tests comment author name.
-   */
-  public function testCommentAuthorName() {
-    $this->installEntitySchema('comment');
-
-    // Create some comments.
-    $comment = Comment::create([
-      'subject' => 'My comment title',
-      'uid' => 1,
-      'name' => 'entity-test',
-      'mail' => 'entity@localhost',
-      'entity_type' => 'entity_test',
-      'comment_type' => 'entity_test',
-      'status' => 1,
-    ]);
-    $comment->save();
-
-    // The entity fields for name and mail have no meaning if the user is not
-    // Anonymous.
-    $this->assertNull($comment->name->value);
-    $this->assertNull($comment->mail->value);
-
-    $comment_anonymous = Comment::create([
-      'subject' => 'Anonymous comment title',
-      'uid' => 0,
-      'name' => 'barry',
-      'mail' => 'test@example.com',
-      'homepage' => 'https://example.com',
-      'entity_type' => 'entity_test',
-      'comment_type' => 'entity_test',
-      'status' => 1,
-    ]);
-    $comment_anonymous->save();
-
-    // The entity fields for name and mail have retained their values when
-    // comment belongs to an anonymous user.
-    $this->assertNotNull($comment_anonymous->name->value);
-    $this->assertNotNull($comment_anonymous->mail->value);
-
-    $comment_anonymous->setOwnerId(1)
-      ->save();
-    // The entity fields for name and mail have no meaning if the user is not
-    // Anonymous.
-    $this->assertNull($comment_anonymous->name->value);
-    $this->assertNull($comment_anonymous->mail->value);
-  }
-
 }
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
index 8857f57871..871765b834 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
@@ -53,7 +53,7 @@ public function testMigration() {
     $this->assertDisplay('node.article.default', 'comment_node_article');
     $this->assertDisplay('node.book.default', 'comment_node_book');
     $this->assertDisplay('node.blog.default', 'comment_node_blog');
-    $this->assertDisplay('node.forum.default', 'comment_forum');
+    $this->assertDisplay('node.forum.default', 'comment_node_forum');
     $this->assertDisplay('node.test_content_type.default', 'comment_node_test_content_type');
   }
 
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
index c713a45b72..8ce439a9cf 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
@@ -48,7 +48,7 @@ public function testMigration() {
     $this->assertDisplay('comment.comment_node_article.default');
     $this->assertDisplay('comment.comment_node_book.default');
     $this->assertDisplay('comment.comment_node_blog.default');
-    $this->assertDisplay('comment.comment_forum.default');
+    $this->assertDisplay('comment.comment_node_forum.default');
     $this->assertDisplay('comment.comment_node_test_content_type.default');
   }
 
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
index 8568913b16..724db6ea45 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
@@ -34,7 +34,7 @@ protected function setUp() {
    *
    * @param string $id
    *   The entity ID.
-   * @param string $component_id
+   * @param string $component
    *   The ID of the form component.
    */
   protected function assertDisplay($id, $component_id) {
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
index f7e10d0ec8..cc82c82766 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
@@ -79,7 +79,7 @@ public function testMigration() {
     $this->assertEntity('node.article.comment_node_article', 'comment_node_article', 'article', TRUE, 50, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
     $this->assertEntity('node.blog.comment_node_blog', 'comment_node_blog', 'blog', TRUE, 50, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
     $this->assertEntity('node.book.comment_node_book', 'comment_node_book', 'book', TRUE, 50, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
-    $this->assertEntity('node.forum.comment_forum', 'comment_forum', 'forum', TRUE, 50, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
+    $this->assertEntity('node.forum.comment_node_forum', 'comment_node_forum', 'forum', TRUE, 50, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
     $this->assertEntity('node.test_content_type.comment_node_test_content_type', 'comment_node_test_content_type', 'test_content_type', TRUE, 30, FALSE, CommentItemInterface::FORM_BELOW, TRUE);
   }
 
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
index 6f94df1abb..b995bdb0a5 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
@@ -54,7 +54,7 @@ public function testMigration() {
     $this->assertEntity('node.comment_node_article', 'comment_node_article');
     $this->assertEntity('node.comment_node_blog', 'comment_node_blog');
     $this->assertEntity('node.comment_node_book', 'comment_node_book');
-    $this->assertEntity('node.comment_forum', 'comment_forum');
+    $this->assertEntity('node.comment_node_forum', 'comment_node_forum');
     $this->assertEntity('node.comment_node_test_content_type', 'comment_node_test_content_type');
   }
 
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
index 8d2e576dbc..60f640d297 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
@@ -51,7 +51,7 @@ public function testMigration() {
     $this->assertEntity('comment_node_article', 'Article comment');
     $this->assertEntity('comment_node_blog', 'Blog entry comment');
     $this->assertEntity('comment_node_book', 'Book page comment');
-    $this->assertEntity('comment_forum', 'Forum topic comment');
+    $this->assertEntity('comment_node_forum', 'Forum topic comment');
     $this->assertEntity('comment_node_test_content_type', 'Test content type comment');
 
     $migration = $this->getMigration('d7_comment_type');
diff --git a/core/modules/comment/tests/src/Kernel/Views/CommentAdminViewTest.php b/core/modules/comment/tests/src/Kernel/Views/CommentAdminViewTest.php
index 86e8949905..ec617ffea2 100644
--- a/core/modules/comment/tests/src/Kernel/Views/CommentAdminViewTest.php
+++ b/core/modules/comment/tests/src/Kernel/Views/CommentAdminViewTest.php
@@ -126,13 +126,13 @@ protected function setUp($import_test_views = TRUE) {
    * Tests comment admin view filters.
    */
   public function testFilters() {
-    $this->doTestFilters('page_published');
+    $this->doTestFilters('page_1');
     // Unpublish the comments to test the Unapproved comments tab.
     foreach ($this->comments as $comment) {
       $comment->setUnpublished();
       $comment->save();
     }
-    $this->doTestFilters('page_unapproved');
+    $this->doTestFilters('page_2');
   }
 
   /**
diff --git a/core/modules/comment/tests/src/Kernel/Views/CommentUserNameTest.php b/core/modules/comment/tests/src/Kernel/Views/CommentUserNameTest.php
index e1b3c94336..cad7b2b981 100644
--- a/core/modules/comment/tests/src/Kernel/Views/CommentUserNameTest.php
+++ b/core/modules/comment/tests/src/Kernel/Views/CommentUserNameTest.php
@@ -144,14 +144,7 @@ public function testUsername() {
 
     $this->assertLink('My comment title');
     $this->assertLink('Anonymous comment title');
-    // Display plugin of the view is showing the name field. When comment
-    // belongs to an authenticated user the name field has no value.
-    $comment_author = $this->xpath('//div[contains(@class, :class)]/span[normalize-space(text())=""]', [
-      ':class' => 'views-field-subject',
-    ]);
-    $this->assertTrue(!empty($comment_author));
-    // When comment belongs to an anonymous user the name field has a value and
-    // it is rendered correctly.
+    $this->assertLink($this->adminUser->label());
     $this->assertLink('barry (not verified)');
 
     $account_switcher->switchTo(new AnonymousUserSession());
diff --git a/core/modules/comment/tests/src/Unit/Entity/CommentLockTest.php b/core/modules/comment/tests/src/Unit/Entity/CommentLockTest.php
index 1289a8e8c6..e724dc6b89 100644
--- a/core/modules/comment/tests/src/Unit/Entity/CommentLockTest.php
+++ b/core/modules/comment/tests/src/Unit/Entity/CommentLockTest.php
@@ -69,14 +69,6 @@ public function testLocks() {
       ->method('getThread')
       ->will($this->returnValue(''));
 
-    $anon_user = $this->getMock('Drupal\Core\Session\AccountInterface');
-    $anon_user->expects($this->any())
-      ->method('isAnonymous')
-      ->will($this->returnValue(TRUE));
-    $comment->expects($this->any())
-      ->method('getOwner')
-      ->will($this->returnValue($anon_user));
-
     $parent_entity = $this->getMock('\Drupal\Core\Entity\ContentEntityInterface');
     $parent_entity->expects($this->atLeastOnce())
       ->method('getCacheTagsToInvalidate')
@@ -89,6 +81,10 @@ public function testLocks() {
     $comment->expects($this->any())
       ->method('getEntityType')
       ->will($this->returnValue($entity_type));
+    $comment->expects($this->at(1))
+      ->method('get')
+      ->with('status')
+      ->will($this->returnValue((object) ['value' => NULL]));
     $storage = $this->getMock('Drupal\comment\CommentStorageInterface');
 
     // preSave() should acquire the lock. (This is what's really being tested.)
diff --git a/core/modules/config/src/Tests/ConfigEntityListTest.php b/core/modules/config/src/Tests/ConfigEntityListTest.php
index 46c0c064b6..e9950ea424 100644
--- a/core/modules/config/src/Tests/ConfigEntityListTest.php
+++ b/core/modules/config/src/Tests/ConfigEntityListTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\config\Tests;
 
-use Drupal\Core\Routing\RedirectDestinationTrait;
 use Drupal\simpletest\WebTestBase;
 use Drupal\config_test\Entity\ConfigTest;
 use Drupal\Core\Entity\EntityStorageInterface;
@@ -14,8 +13,6 @@
  */
 class ConfigEntityListTest extends WebTestBase {
 
-  use RedirectDestinationTrait;
-
   /**
    * Modules to enable.
    *
@@ -57,17 +54,17 @@ public function testList() {
       'edit' => [
         'title' => t('Edit'),
         'weight' => 10,
-        'url' => $entity->toUrl()->setOption('query', $this->getRedirectDestination()->getAsArray()),
+        'url' => $entity->urlInfo(),
       ],
       'disable' => [
         'title' => t('Disable'),
         'weight' => 40,
-        'url' => $entity->toUrl('disable')->setOption('query', $this->getRedirectDestination()->getAsArray()),
+        'url' => $entity->urlInfo('disable'),
       ],
       'delete' => [
         'title' => t('Delete'),
         'weight' => 100,
-        'url' => $entity->toUrl('delete-form')->setOption('query', $this->getRedirectDestination()->getAsArray()),
+        'url' => $entity->urlInfo('delete-form'),
       ],
     ];
 
@@ -132,12 +129,12 @@ public function testList() {
       'edit' => [
         'title' => t('Edit'),
         'weight' => 10,
-        'url' => $entity->toUrl()->setOption('query', $this->getRedirectDestination()->getAsArray()),
+        'url' => $entity->urlInfo(),
       ],
       'delete' => [
         'title' => t('Delete'),
         'weight' => 100,
-        'url' => $entity->toUrl('delete-form')->setOption('query', $this->getRedirectDestination()->getAsArray()),
+        'url' => $entity->urlInfo('delete-form'),
       ],
     ];
 
diff --git a/core/modules/config/src/Tests/ConfigEntityTest.php b/core/modules/config/src/Tests/ConfigEntityTest.php
index 2cd47ff8bf..c0dc97bc7b 100644
--- a/core/modules/config/src/Tests/ConfigEntityTest.php
+++ b/core/modules/config/src/Tests/ConfigEntityTest.php
@@ -147,8 +147,8 @@ public function testCRUD() {
     try {
       $id_length_config_test->save();
       $this->pass(SafeMarkup::format("config_test entity with ID length @length was saved.", [
-        '@length' => strlen($id_length_config_test->id()),
-      ]));
+        '@length' => strlen($id_length_config_test->id())]
+      ));
     }
     catch (ConfigEntityIdLengthException $e) {
       $this->fail($e->getMessage());
@@ -318,18 +318,28 @@ public function testCRUDUI() {
     $this->assertFalse(entity_load('config_test', '0'), 'Test entity deleted');
 
     // Create a configuration entity with a property that uses AJAX to show
-    // extra form elements. Test this scenario in a non-JS case by using a
-    // 'js-hidden' submit button.
-    // @see \Drupal\Tests\config\FunctionalJavascript\ConfigEntityTest::testAjaxOnAddPage()
+    // extra form elements.
     $this->drupalGet('admin/structure/config_test/add');
 
+    // Test that the dependent element is not shown initially.
+    $this->assertFieldByName('size');
+    $this->assertNoFieldByName('size_value');
+
     $id = strtolower($this->randomMachineName());
     $edit = [
       'id' => $id,
       'label' => $this->randomString(),
       'size' => 'custom',
     ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'size');
 
+    // Check that the dependent element is shown after selecting a 'size' value.
+    $this->assertFieldByName('size');
+    $this->assertFieldByName('size_value');
+
+    // Test the same scenario but it in a non-JS case by using a 'js-hidden'
+    // submit button.
+    $this->drupalGet('admin/structure/config_test/add');
     $this->assertFieldByName('size');
     $this->assertNoFieldByName('size_value');
 
diff --git a/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php b/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php
index 1156b00f22..b8109db682 100644
--- a/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php
+++ b/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php
@@ -18,13 +18,13 @@ public function loadOverrides($names) {
     $overrides = [];
     if (!empty($GLOBALS['config_test_run_module_overrides'])) {
       if (in_array('system.site', $names)) {
-        $overrides = [
-          'system.site' => [
+        $overrides = ['system.site' =>
+          [
             'name' => 'Should not apply because of higher priority listener',
             // This override should apply because it is not overridden by the
             // higher priority listener.
             'slogan' => 'Yay for overrides!',
-          ],
+          ]
         ];
       }
     }
diff --git a/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php b/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php
deleted file mode 100644
index 110c9f894e..0000000000
--- a/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace Drupal\Tests\config\FunctionalJavascript;
-
-use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
-
-/**
- * Tests the Config operations through the UI.
- *
- * @group config
- */
-class ConfigEntityTest extends JavascriptTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['config_test'];
-
-  /**
-   * Tests ajax operations through the UI on 'Add' page.
-   */
-  public function testAjaxOnAddPage() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
-
-    $page = $this->getSession()->getPage();
-    $assert_session = $this->assertSession();
-
-    $this->drupalGet('admin/structure/config_test/add');
-    // Test that 'size value' field is not show initially, and it is show after
-    // selecting value in the 'size' field.
-    $this->assertNull($page->findField('size_value'));
-    $page->findField('size')->setValue('custom');
-    $this->assertNotNull($assert_session->waitForField('size_value'));
-  }
-
-}
diff --git a/core/modules/config_translation/migration_templates/d6_system_maintenance_translation.yml b/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
similarity index 74%
rename from core/modules/config_translation/migration_templates/d6_system_maintenance_translation.yml
rename to core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
index e3aa7f17a0..1c99961cc8 100644
--- a/core/modules/config_translation/migration_templates/d6_system_maintenance_translation.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
@@ -1,12 +1,11 @@
-id: d6_system_maintenance_translation
+id: d6_i18n_system_maintenance
 label: Maintenance page configuration
 migration_tags:
   - Drupal 6
 source:
-  plugin: variable_translation
+  plugin: i18n_variable
   variables:
     - site_offline_message
-  source_module: i18n
 process:
   langcode: language
   message: site_offline_message
diff --git a/core/modules/config_translation/migration_templates/d6_system_site_translation.yml b/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
similarity index 88%
rename from core/modules/config_translation/migration_templates/d6_system_site_translation.yml
rename to core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
index f967f98df9..3c80821337 100644
--- a/core/modules/config_translation/migration_templates/d6_system_site_translation.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
@@ -1,9 +1,9 @@
-id: d6_system_site_translation
+id: d6_i18n_system_site
 label: Site configuration
 migration_tags:
   - Drupal 6
 source:
-  plugin: variable_translation
+  plugin: i18n_variable
   constants:
     slash: '/'
   variables:
@@ -13,7 +13,6 @@ source:
     - site_frontpage
     - site_403
     - site_404
-  source_module: i18n
 process:
   langcode: language
   name: site_name
diff --git a/core/modules/config_translation/migration_templates/d6_user_mail_translation.yml b/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
similarity index 96%
rename from core/modules/config_translation/migration_templates/d6_user_mail_translation.yml
rename to core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
index 450df517d0..d1e5db501b 100644
--- a/core/modules/config_translation/migration_templates/d6_user_mail_translation.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
@@ -1,9 +1,9 @@
-id: d6_user_mail_translation
+id: d6_i18n_user_mail
 label: User mail configuration
 migration_tags:
   - Drupal 6
 source:
-  plugin: variable_translation
+  plugin: i18n_variable
   variables:
     - user_mail_status_activated_subject
     - user_mail_status_activated_body
@@ -19,7 +19,6 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
-  source_module: i18n
 process:
   langcode: language
   'status_activated/subject':
diff --git a/core/modules/config_translation/migration_templates/d6_user_profile_field_instance_translation.yml b/core/modules/config_translation/migration_templates/d6_i18n_user_profile_field_instance.yml
similarity index 87%
rename from core/modules/config_translation/migration_templates/d6_user_profile_field_instance_translation.yml
rename to core/modules/config_translation/migration_templates/d6_i18n_user_profile_field_instance.yml
index 5a3d7cc41e..f2c6f95f3e 100644
--- a/core/modules/config_translation/migration_templates/d6_user_profile_field_instance_translation.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_user_profile_field_instance.yml
@@ -1,9 +1,9 @@
-id: d6_user_profile_field_instance_translation
+id: d6_i18n_user_profile_field_instance
 label: User profile field instance configuration
 migration_tags:
   - Drupal 6
 source:
-  plugin: d6_profile_field_translation
+  plugin: d6_i18n_profile_field
   constants:
     entity_type: user
     bundle: user
diff --git a/core/modules/config_translation/migration_templates/d6_user_settings_translation.yml b/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
similarity index 89%
rename from core/modules/config_translation/migration_templates/d6_user_settings_translation.yml
rename to core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
index 21822206fd..36b0fa6c88 100644
--- a/core/modules/config_translation/migration_templates/d6_user_settings_translation.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
@@ -1,16 +1,15 @@
-id: d6_user_settings_translation
+id: d6_i18n_user_settings
 label: User configuration
 migration_tags:
   - Drupal 6
 source:
-  plugin: variable_translation
+  plugin: i18n_variable
   variables:
     - user_mail_status_blocked_notify
     - user_mail_status_activated_notify
     - user_email_verification
     - user_register
     - anonymous
-  source_module: i18n
 process:
   langcode: language
   'notify/status_blocked': user_mail_status_blocked_notify
diff --git a/core/modules/config_translation/src/Plugin/migrate/source/d6/I18nProfileField.php b/core/modules/config_translation/src/Plugin/migrate/source/d6/I18nProfileField.php
index c27f1d5674..2989f967b5 100644
--- a/core/modules/config_translation/src/Plugin/migrate/source/d6/I18nProfileField.php
+++ b/core/modules/config_translation/src/Plugin/migrate/source/d6/I18nProfileField.php
@@ -2,20 +2,52 @@
 
 namespace Drupal\config_translation\Plugin\migrate\source\d6;
 
-@trigger_error('The ' . __NAMESPACE__ . '\I18nProfileField is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use ' . __NAMESPACE__ . '\ProfileFieldTranslation', E_USER_DEPRECATED);
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 
 /**
  * i18n strings profile field source from database.
  *
  * @MigrateSource(
  *   id = "d6_i18n_profile_field",
- *   source_module = "i18nprofile"
+ *   source_provider = "i18n"
  * )
- *
- * @deprecated in Drupal 8.4.x and will be removed in Drupal 9.0.x. Use
- * \Drupal\config_translation\Plugin\migrate\source\d6\ProfileFieldTranslation
- * instead.
- *
- * @see https://www.drupal.org/node/2898649
  */
-class I18nProfileField extends ProfileFieldTranslation {}
+class I18nProfileField extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('profile_fields', 'pf')
+      ->fields('pf', ['fid', 'name'])
+      ->fields('i18n', ['property'])
+      ->fields('lt', ['lid', 'translation', 'language']);
+    $query->leftJoin('i18n_strings', 'i18n', 'i18n.objectid = pf.name');
+    $query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [
+      'fid' => $this->t('Profile field ID.'),
+      'lid' => $this->t('Locales target language ID.'),
+      'language' => $this->t('Language for this field.'),
+      'translation' => $this->t('Translation of either the title or explanation.'),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['fid']['type'] = 'integer';
+    $ids['language']['type'] = 'string';
+    $ids['lid']['type'] = 'integer';
+    $ids['lid']['alias'] = 'lt';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/config_translation/src/Plugin/migrate/source/d6/ProfileFieldTranslation.php b/core/modules/config_translation/src/Plugin/migrate/source/d6/ProfileFieldTranslation.php
deleted file mode 100644
index c0e8447c74..0000000000
--- a/core/modules/config_translation/src/Plugin/migrate/source/d6/ProfileFieldTranslation.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-namespace Drupal\config_translation\Plugin\migrate\source\d6;
-
-use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
-
-/**
- * Gets i18n strings profile field source from database.
- *
- * @MigrateSource(
- *   id = "d6_profile_field_translation",
- *   source_module = "i18nprofile"
- * )
- */
-class ProfileFieldTranslation extends DrupalSqlBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function query() {
-    $query = $this->select('profile_fields', 'pf')
-      ->fields('pf', ['fid', 'name'])
-      ->fields('i18n', ['property'])
-      ->fields('lt', ['lid', 'translation', 'language']);
-    $query->leftJoin('i18n_strings', 'i18n', 'i18n.objectid = pf.name');
-    $query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
-    return $query;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fields() {
-    return [
-      'fid' => $this->t('Profile field ID.'),
-      'lid' => $this->t('Locales target language ID.'),
-      'language' => $this->t('Language for this field.'),
-      'translation' => $this->t('Translation of either the title or explanation.'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getIds() {
-    $ids['fid']['type'] = 'integer';
-    $ids['language']['type'] = 'string';
-    $ids['lid']['type'] = 'integer';
-    $ids['lid']['alias'] = 'lt';
-    return $ids;
-  }
-
-}
diff --git a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemMaintenanceTranslationTest.php b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemMaintenanceTest.php
similarity index 82%
rename from core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemMaintenanceTranslationTest.php
rename to core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemMaintenanceTest.php
index 37cd4a9ec2..d1c586715a 100644
--- a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemMaintenanceTranslationTest.php
+++ b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemMaintenanceTest.php
@@ -8,9 +8,8 @@
  * Upgrade i18n maintenance variables to system.*.yml.
  *
  * @group migrate_drupal_6
- * @group legacy
  */
-class MigrateSystemMaintenanceTranslationTest extends MigrateDrupal6TestBase {
+class MigrateI18nSystemMaintenanceTest extends MigrateDrupal6TestBase {
 
   public static $modules = ['language', 'config_translation'];
 
@@ -19,7 +18,7 @@ class MigrateSystemMaintenanceTranslationTest extends MigrateDrupal6TestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->executeMigration('d6_system_maintenance_translation');
+    $this->executeMigration('d6_i18n_system_maintenance');
   }
 
   /**
diff --git a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemSiteTranslationTest.php b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemSiteTest.php
similarity index 92%
rename from core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemSiteTranslationTest.php
rename to core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemSiteTest.php
index 326e1bb7e4..770b33ca11 100644
--- a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateSystemSiteTranslationTest.php
+++ b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nSystemSiteTest.php
@@ -8,9 +8,8 @@
  * Upgrade i18n_strings site variables to system.*.yml.
  *
  * @group migrate_drupal_6
- * @group legacy
  */
-class MigrateSystemSiteTranslationTest extends MigrateDrupal6TestBase {
+class MigrateI18nSystemSiteTest extends MigrateDrupal6TestBase {
 
   public static $modules = ['language', 'config_translation'];
 
@@ -19,7 +18,7 @@ class MigrateSystemSiteTranslationTest extends MigrateDrupal6TestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->executeMigration('d6_system_site_translation');
+    $this->executeMigration('d6_i18n_system_site');
   }
 
   /**
diff --git a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserConfigsTranslationTest.php b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserConfigsTest.php
similarity index 97%
rename from core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserConfigsTranslationTest.php
rename to core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserConfigsTest.php
index bc622e1b6a..f48e44ff48 100644
--- a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserConfigsTranslationTest.php
+++ b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserConfigsTest.php
@@ -9,9 +9,8 @@
  * Upgrade i18n variables to user.*.yml.
  *
  * @group migrate_drupal_6
- * @group legacy
  */
-class MigrateUserConfigsTranslationTest extends MigrateDrupal6TestBase {
+class MigrateI18nUserConfigsTest extends MigrateDrupal6TestBase {
 
   use SchemaCheckTestTrait;
 
@@ -24,7 +23,7 @@ protected function setUp() {
     parent::setUp();
     $this->installSchema('locale',
       ['locales_source', 'locales_target', 'locales_location']);
-    $this->executeMigrations(['d6_user_mail_translation', 'd6_user_settings_translation']);
+    $this->executeMigrations(['d6_i18n_user_mail', 'd6_i18n_user_settings']);
   }
 
   /**
diff --git a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserProfileFieldInstanceTranslationTest.php b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserProfileFieldInstanceTest.php
similarity index 95%
rename from core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserProfileFieldInstanceTranslationTest.php
rename to core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserProfileFieldInstanceTest.php
index 01d5ec929d..057c14af49 100644
--- a/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateUserProfileFieldInstanceTranslationTest.php
+++ b/core/modules/config_translation/tests/src/Kernel/Migrate/d6/MigrateI18nUserProfileFieldInstanceTest.php
@@ -8,9 +8,8 @@
  * Tests the user profile field instance migration.
  *
  * @group migrate_drupal_6
- * @group legacy
  */
-class MigrateUserProfileFieldInstanceTranslationTest extends MigrateDrupal6TestBase {
+class MigrateI18nUserProfileFieldInstanceTest extends MigrateDrupal6TestBase {
 
   /**
    * {@inheritdoc}
@@ -24,7 +23,7 @@ public function testUserProfileFields() {
     $this->executeMigrations([
       'user_profile_field',
       'user_profile_field_instance',
-      'd6_user_profile_field_instance_translation',
+      'd6_i18n_user_profile_field_instance',
     ]);
     $language_manager = $this->container->get('language_manager');
 
diff --git a/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/I18nProfileFieldTest.php b/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/I18nProfileFieldTest.php
index b783accf97..bd8d451d18 100644
--- a/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/I18nProfileFieldTest.php
+++ b/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/I18nProfileFieldTest.php
@@ -9,7 +9,6 @@
  *
  * @covers \Drupal\config_translation\Plugin\migrate\source\d6\I18nProfileField
  * @group migrate_drupal
- * @group legacy
  */
 class I18nProfileFieldTest extends MigrateSqlSourceTestBase {
 
diff --git a/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/ProfileFieldTranslationTest.php b/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/ProfileFieldTranslationTest.php
deleted file mode 100644
index 02cdd9909c..0000000000
--- a/core/modules/config_translation/tests/src/Kernel/Plugin/migrate/source/d6/ProfileFieldTranslationTest.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-namespace Drupal\Tests\config_translation\Kernel\Plugin\migrate\source\d6;
-
-use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
-
-/**
- * Tests the i18nProfileField source plugin.
- *
- * @covers \Drupal\config_translation\Plugin\migrate\source\d6\ProfileFieldTranslation
- * @group migrate_drupal
- */
-class ProfileFieldTranslationTest extends MigrateSqlSourceTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['config_translation', 'migrate_drupal', 'user'];
-
-  /**
-   * {@inheritdoc}
-   */
-  public function providerSource() {
-    $test = [];
-    $test[0]['source_data'] = [
-      'profile_fields' => [
-        [
-          'fid' => 42,
-          'title' => 'I love migrations',
-          'name' => 'profile_love_migrations',
-        ],
-      ],
-      'i18n_strings' => [
-        [
-          'lid' => 10,
-          'objectid' => 'profile_love_migrations',
-          'type' => 'field',
-          'property' => 'title',
-        ],
-        [
-          'lid' => 11,
-          'objectid' => 'profile_love_migrations',
-          'type' => 'field',
-          'property' => 'explanation'
-        ]
-      ],
-      'locales_target' => [
-        [
-          'lid' => 10,
-          'translation' => "J'aime les migrations.",
-          'language' => 'fr',
-        ],
-        [
-          'lid' => 11,
-          'translation' => 'Si vous cochez cette case, vous aimez les migrations.',
-          'language' => 'fr',
-        ],
-      ],
-    ];
-    $test[0]['expected_results'] = [
-      [
-        'property' => 'title',
-        'translation' => "J'aime les migrations.",
-        'language' => 'fr',
-        'fid' => '42',
-        'name' => 'profile_love_migrations',
-      ],
-      [
-        'property' => 'explanation',
-        'translation' => 'Si vous cochez cette case, vous aimez les migrations.',
-        'language' => 'fr',
-        'fid' => '42',
-        'name' => 'profile_love_migrations',
-      ],
-    ];
-    return $test;
-  }
-
-}
diff --git a/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php b/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php
index e72c61f6dc..9f064aca21 100644
--- a/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php
+++ b/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php
@@ -88,52 +88,44 @@ public function providerTestHasTranslatable() {
       [$this->getElement(['aaa' => 'bbb']), FALSE],
       [$this->getElement(['translatable' => FALSE]), FALSE],
       [$this->getElement(['translatable' => TRUE]), TRUE],
-      [$this->getNestedElement([$this->getElement([])]), FALSE],
-      [$this->getNestedElement([$this->getElement(['translatable' => TRUE])]), TRUE],
-      [
+      [$this->getNestedElement([
+        $this->getElement([]),
+      ]), FALSE],
+      [$this->getNestedElement([
+        $this->getElement(['translatable' => TRUE]),
+      ]), TRUE],
+      [$this->getNestedElement([
+        $this->getElement(['aaa' => 'bbb']),
+        $this->getElement(['ccc' => 'ddd']),
+        $this->getElement(['eee' => 'fff']),
+      ]), FALSE],
+      [$this->getNestedElement([
+        $this->getElement(['aaa' => 'bbb']),
+        $this->getElement(['ccc' => 'ddd']),
+        $this->getElement(['translatable' => TRUE]),
+      ]), TRUE],
+      [$this->getNestedElement([
+        $this->getElement(['aaa' => 'bbb']),
         $this->getNestedElement([
-          $this->getElement(['aaa' => 'bbb']),
           $this->getElement(['ccc' => 'ddd']),
           $this->getElement(['eee' => 'fff']),
         ]),
-        FALSE,
-      ],
-      [
         $this->getNestedElement([
-          $this->getElement(['aaa' => 'bbb']),
-          $this->getElement(['ccc' => 'ddd']),
-          $this->getElement(['translatable' => TRUE]),
+          $this->getElement(['ggg' => 'hhh']),
+          $this->getElement(['iii' => 'jjj']),
         ]),
-        TRUE,
-      ],
-      [
+      ]), FALSE],
+      [$this->getNestedElement([
+        $this->getElement(['aaa' => 'bbb']),
         $this->getNestedElement([
-          $this->getElement(['aaa' => 'bbb']),
-          $this->getNestedElement([
-            $this->getElement(['ccc' => 'ddd']),
-            $this->getElement(['eee' => 'fff']),
-          ]),
-          $this->getNestedElement([
-            $this->getElement(['ggg' => 'hhh']),
-            $this->getElement(['iii' => 'jjj']),
-          ]),
+          $this->getElement(['ccc' => 'ddd']),
+          $this->getElement(['eee' => 'fff']),
         ]),
-        FALSE
-      ],
-      [
         $this->getNestedElement([
-          $this->getElement(['aaa' => 'bbb']),
-          $this->getNestedElement([
-            $this->getElement(['ccc' => 'ddd']),
-            $this->getElement(['eee' => 'fff']),
-          ]),
-          $this->getNestedElement([
-            $this->getElement(['ggg' => 'hhh']),
-            $this->getElement(['translatable' => TRUE]),
-          ]),
+          $this->getElement(['ggg' => 'hhh']),
+          $this->getElement(['translatable' => TRUE]),
         ]),
-        TRUE,
-      ],
+      ]), TRUE],
     ];
   }
 
diff --git a/core/modules/contact/src/ContactFormAccessControlHandler.php b/core/modules/contact/src/ContactFormAccessControlHandler.php
index 320eed697f..ea2501b573 100644
--- a/core/modules/contact/src/ContactFormAccessControlHandler.php
+++ b/core/modules/contact/src/ContactFormAccessControlHandler.php
@@ -20,12 +20,12 @@ class ContactFormAccessControlHandler extends EntityAccessControlHandler {
   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
     if ($operation == 'view') {
       // Do not allow access personal form via site-wide route.
-      return AccessResult::allowedIfHasPermission($account, 'access site-wide contact form')->andIf(AccessResult::allowedIf($entity->id() !== 'personal'));
+      return AccessResult::allowedIf($account->hasPermission('access site-wide contact form') && $entity->id() !== 'personal')->cachePerPermissions();
     }
     elseif ($operation == 'delete' || $operation == 'update') {
       // Do not allow the 'personal' form to be deleted, as it's used for
       // the personal contact form.
-      return AccessResult::allowedIfHasPermission($account, 'administer contact forms')->andIf(AccessResult::allowedIf($entity->id() !== 'personal'));
+      return AccessResult::allowedIf($account->hasPermission('administer contact forms') && $entity->id() !== 'personal')->cachePerPermissions();
     }
 
     return parent::checkAccess($entity, $operation, $account);
diff --git a/core/modules/contact/src/Controller/ContactController.php b/core/modules/contact/src/Controller/ContactController.php
index 35655342f6..b8b69d5f19 100644
--- a/core/modules/contact/src/Controller/ContactController.php
+++ b/core/modules/contact/src/Controller/ContactController.php
@@ -65,8 +65,7 @@ public function contactSitePage(ContactFormInterface $contact_form = NULL) {
       if (empty($contact_form)) {
         if ($this->currentUser()->hasPermission('administer contact forms')) {
           drupal_set_message($this->t('The contact form has not been configured. <a href=":add">Add one or more forms</a> .', [
-            ':add' => $this->url('contact.form_add'),
-          ]), 'error');
+            ':add' => $this->url('contact.form_add')]), 'error');
           return [];
         }
         else {
diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index b1086602d8..d75496ba72 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -13,7 +13,6 @@
  * @ContentEntityType(
  *   id = "contact_message",
  *   label = @Translation("Contact message"),
- *   bundle_label = @Translation("Contact form"),
  *   handlers = {
  *     "access" = "Drupal\contact\ContactMessageAccessControlHandler",
  *     "storage" = "Drupal\Core\Entity\ContentEntityNullStorage",
@@ -108,7 +107,7 @@ public function setMessage($message) {
    * {@inheritdoc}
    */
   public function copySender() {
-    return (bool) $this->get('copy')->value;
+    return (bool)$this->get('copy')->value;
   }
 
   /**
diff --git a/core/modules/contact/src/Plugin/migrate/source/ContactCategory.php b/core/modules/contact/src/Plugin/migrate/source/ContactCategory.php
index c361588efc..0b9f7b3b83 100644
--- a/core/modules/contact/src/Plugin/migrate/source/ContactCategory.php
+++ b/core/modules/contact/src/Plugin/migrate/source/ContactCategory.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "contact_category",
- *   source_module = "contact"
+ *   source_provider = "contact"
  * )
  */
 class ContactCategory extends DrupalSqlBase {
diff --git a/core/modules/contact/src/Plugin/migrate/source/ContactSettings.php b/core/modules/contact/src/Plugin/migrate/source/ContactSettings.php
index 8297be6ae9..911f3bd9c9 100644
--- a/core/modules/contact/src/Plugin/migrate/source/ContactSettings.php
+++ b/core/modules/contact/src/Plugin/migrate/source/ContactSettings.php
@@ -7,7 +7,7 @@
 /**
  * @MigrateSource(
  *   id = "contact_settings",
- *   source_module = "contact"
+ *   source_provider = "contact"
  * )
  */
 class ContactSettings extends Variable {
diff --git a/core/modules/contact/tests/src/Functional/Update/ContactUpdateTest.php b/core/modules/contact/src/Tests/Update/ContactUpdateTest.php
similarity index 90%
rename from core/modules/contact/tests/src/Functional/Update/ContactUpdateTest.php
rename to core/modules/contact/src/Tests/Update/ContactUpdateTest.php
index 676f938c19..4cbfd64aaa 100644
--- a/core/modules/contact/tests/src/Functional/Update/ContactUpdateTest.php
+++ b/core/modules/contact/src/Tests/Update/ContactUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\contact\Functional\Update;
+namespace Drupal\contact\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests contact update path.
@@ -16,7 +16,7 @@ class ContactUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/contact/tests/src/Unit/MailHandlerTest.php b/core/modules/contact/tests/src/Unit/MailHandlerTest.php
index ba3bfad816..898ea226c8 100644
--- a/core/modules/contact/tests/src/Unit/MailHandlerTest.php
+++ b/core/modules/contact/tests/src/Unit/MailHandlerTest.php
@@ -234,7 +234,7 @@ public function getSendMailMessages() {
     $results[] = $result + $default_result;
     $data[] = [$message, $sender, $results];
 
-    // For authenticated user.
+    //For authenticated user.
     $results = [];
     $message = $this->getAuthenticatedMockMessage();
     $sender = $this->getMockSender(FALSE, 'user@drupal.org');
diff --git a/core/modules/content_moderation/config/schema/content_moderation.schema.yml b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
index d48ffe439f..5a10d85e9e 100644
--- a/core/modules/content_moderation/config/schema/content_moderation.schema.yml
+++ b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
@@ -1,3 +1,11 @@
+views.filter.latest_revision:
+  type: views_filter
+  label: 'Latest revision'
+  mapping:
+    value:
+      type: string
+      label: 'Value'
+
 content_moderation.state:
   type: workflows.state
   mapping:
diff --git a/core/modules/content_moderation/content_moderation.install b/core/modules/content_moderation/content_moderation.install
deleted file mode 100644
index e33a35973c..0000000000
--- a/core/modules/content_moderation/content_moderation.install
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the Content Moderation module.
- */
-
-/**
- * Remove the 'content_revision_tracker' table.
- */
-function content_moderation_update_8401() {
-  $database_schema = \Drupal::database()->schema();
-  if ($database_schema->tableExists('content_revision_tracker')) {
-    $database_schema->dropTable('content_revision_tracker');
-  }
-}
diff --git a/core/modules/content_moderation/content_moderation.module b/core/modules/content_moderation/content_moderation.module
index 5a7af0e2c9..09ade0d565 100644
--- a/core/modules/content_moderation/content_moderation.module
+++ b/core/modules/content_moderation/content_moderation.module
@@ -129,6 +129,9 @@ function content_moderation_form_alter(&$form, FormStateInterface $form_state, $
 
 /**
  * Implements hook_preprocess_HOOK().
+ *
+ * Many default node templates rely on $page to determine whether to output the
+ * node title as part of the node content.
  */
 function content_moderation_preprocess_node(&$variables) {
   \Drupal::service('class_resolver')
@@ -284,11 +287,7 @@ function content_moderation_workflow_insert(WorkflowInterface $entity) {
  * Implements hook_ENTITY_TYPE_update().
  */
 function content_moderation_workflow_update(WorkflowInterface $entity) {
-  // Clear bundle cache so workflow gets added or removed from the bundle
-  // information.
-  \Drupal::service('entity_type.bundle.info')->clearCachedBundles();
-  // Clear field cache so extra field is added or removed.
-  \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
+  content_moderation_workflow_insert($entity);
 }
 
 /**
diff --git a/core/modules/content_moderation/content_moderation.permissions.yml b/core/modules/content_moderation/content_moderation.permissions.yml
index 0a0d0afd2a..4b193d0721 100644
--- a/core/modules/content_moderation/content_moderation.permissions.yml
+++ b/core/modules/content_moderation/content_moderation.permissions.yml
@@ -1,9 +1,10 @@
 view any unpublished content:
   title: 'View any unpublished content'
+  description: 'This permission is necessary for any users that may moderate content.'
 
 view latest version:
   title: 'View the latest version'
-  description: 'Requires the "View any unpublished content" permission'
+  description: 'View the latest version of an entity. (Also requires "View any unpublished content" permission)'
 
 permission_callbacks:
   - \Drupal\content_moderation\Permissions::transitionPermissions
diff --git a/core/modules/content_moderation/content_moderation.services.yml b/core/modules/content_moderation/content_moderation.services.yml
index 5035b673c5..256095a03a 100644
--- a/core/modules/content_moderation/content_moderation.services.yml
+++ b/core/modules/content_moderation/content_moderation.services.yml
@@ -15,6 +15,11 @@ services:
     arguments: ['@content_moderation.moderation_information']
     tags:
       - { name: access_check, applies_to: _content_moderation_latest_version }
+  content_moderation.revision_tracker:
+    class: Drupal\content_moderation\RevisionTracker
+    arguments: ['@database']
+    tags:
+      - { name: backend_overridable }
   content_moderation.config_import_subscriber:
     class: Drupal\content_moderation\EventSubscriber\ConfigImportSubscriber
     arguments: ['@config.manager', '@entity_type.manager']
diff --git a/core/modules/content_moderation/content_moderation.views.inc b/core/modules/content_moderation/content_moderation.views.inc
index 799af94241..faabc6aaec 100644
--- a/core/modules/content_moderation/content_moderation.views.inc
+++ b/core/modules/content_moderation/content_moderation.views.inc
@@ -16,6 +16,13 @@ function content_moderation_views_data() {
   return _content_moderation_views_data_object()->getViewsData();
 }
 
+/**
+ * Implements hook_views_data_alter().
+ */
+function content_moderation_views_data_alter(array &$data) {
+  _content_moderation_views_data_object()->alterViewsData($data);
+}
+
 /**
  * Creates a ViewsData object to respond to views hooks.
  *
diff --git a/core/modules/content_moderation/src/Access/LatestRevisionCheck.php b/core/modules/content_moderation/src/Access/LatestRevisionCheck.php
index e1719396d4..8ffd9239bc 100644
--- a/core/modules/content_moderation/src/Access/LatestRevisionCheck.php
+++ b/core/modules/content_moderation/src/Access/LatestRevisionCheck.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\content_moderation\Access;
 
-use Drupal\Core\Access\AccessException;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Routing\Access\AccessInterface;
@@ -82,8 +81,10 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
    * @return \Drupal\Core\Entity\ContentEntityInterface
    *   returns the Entity in question.
    *
-   * @throws \Drupal\Core\Access\AccessException
-   *   An AccessException is thrown if the entity couldn't be loaded.
+   * @throws \Exception
+   *   A generic exception is thrown if the entity couldn't be loaded. This
+   *   almost always implies a developer error, so it should get turned into
+   *   an HTTP 500.
    */
   protected function loadEntity(Route $route, RouteMatchInterface $route_match) {
     $entity_type = $route->getOption('_content_moderation_entity_type');
@@ -93,7 +94,7 @@ protected function loadEntity(Route $route, RouteMatchInterface $route_match) {
         return $entity;
       }
     }
-    throw new AccessException(sprintf('%s is not a valid entity route. The LatestRevisionCheck access checker may only be used with a route that has a single entity parameter.', $route_match->getRouteName()));
+    throw new \Exception(sprintf('%s is not a valid entity route. The LatestRevisionCheck access checker may only be used with a route that has a single entity parameter.', $route_match->getRouteName()));
   }
 
 }
diff --git a/core/modules/content_moderation/src/Entity/ContentModerationStateInterface.php b/core/modules/content_moderation/src/ContentModerationStateInterface.php
similarity index 89%
rename from core/modules/content_moderation/src/Entity/ContentModerationStateInterface.php
rename to core/modules/content_moderation/src/ContentModerationStateInterface.php
index bd31360db6..679ab9e5d6 100644
--- a/core/modules/content_moderation/src/Entity/ContentModerationStateInterface.php
+++ b/core/modules/content_moderation/src/ContentModerationStateInterface.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\content_moderation\Entity;
+namespace Drupal\content_moderation;
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\user\EntityOwnerInterface;
diff --git a/core/modules/content_moderation/src/ContentPreprocess.php b/core/modules/content_moderation/src/ContentPreprocess.php
index b8887ef7b9..e986d8fd57 100644
--- a/core/modules/content_moderation/src/ContentPreprocess.php
+++ b/core/modules/content_moderation/src/ContentPreprocess.php
@@ -41,10 +41,10 @@ public static function create(ContainerInterface $container) {
   }
 
   /**
+   * Wrapper for hook_preprocess_HOOK().
+   *
    * @param array $variables
    *   Theme variables to preprocess.
-   *
-   * @see hook_preprocess_HOOK()
    */
   public function preprocessNode(array &$variables) {
     // Set the 'page' template variable when the node is being displayed on the
diff --git a/core/modules/content_moderation/src/Entity/ContentModerationState.php b/core/modules/content_moderation/src/Entity/ContentModerationState.php
index e54fbbe2a8..aedcb5fade 100644
--- a/core/modules/content_moderation/src/Entity/ContentModerationState.php
+++ b/core/modules/content_moderation/src/Entity/ContentModerationState.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\content_moderation\Entity;
 
+use Drupal\content_moderation\ContentModerationStateInterface;
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
@@ -66,6 +67,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The workflow the moderation state is in.'))
       ->setSetting('target_type', 'workflow')
       ->setRequired(TRUE)
+      ->setTranslatable(TRUE)
       ->setRevisionable(TRUE);
 
     $fields['moderation_state'] = BaseFieldDefinition::create('string')
@@ -147,7 +149,7 @@ public static function updateOrCreateFromEntity(ContentModerationState $content_
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   A moderated entity object.
    *
-   * @return \Drupal\content_moderation\Entity\ContentModerationStateInterface|null
+   * @return \Drupal\content_moderation\ContentModerationStateInterface|null
    *   The related content moderation state or NULL if none could be found.
    *
    * @internal
@@ -171,7 +173,7 @@ public static function loadFromModeratedEntity(EntityInterface $entity) {
         ->execute();
 
       if ($ids) {
-        /** @var \Drupal\content_moderation\Entity\ContentModerationStateInterface $content_moderation_state */
+        /** @var \Drupal\content_moderation\ContentModerationStateInterface $content_moderation_state */
         $content_moderation_state = $storage->loadRevision(key($ids));
       }
     }
diff --git a/core/modules/content_moderation/src/Entity/Handler/BlockContentModerationHandler.php b/core/modules/content_moderation/src/Entity/Handler/BlockContentModerationHandler.php
index 10c3fc70b5..b88b415182 100644
--- a/core/modules/content_moderation/src/Entity/Handler/BlockContentModerationHandler.php
+++ b/core/modules/content_moderation/src/Entity/Handler/BlockContentModerationHandler.php
@@ -6,8 +6,6 @@
 
 /**
  * Customizations for block content entities.
- *
- * @internal
  */
 class BlockContentModerationHandler extends ModerationHandler {
 
diff --git a/core/modules/content_moderation/src/Entity/Handler/ModerationHandler.php b/core/modules/content_moderation/src/Entity/Handler/ModerationHandler.php
index f2c6917818..203022dfbe 100644
--- a/core/modules/content_moderation/src/Entity/Handler/ModerationHandler.php
+++ b/core/modules/content_moderation/src/Entity/Handler/ModerationHandler.php
@@ -14,8 +14,6 @@
  * Common customizations for most/all entities.
  *
  * This class is intended primarily as a base class.
- *
- * @internal
  */
 class ModerationHandler implements ModerationHandlerInterface, EntityHandlerInterface {
 
diff --git a/core/modules/content_moderation/src/Entity/Handler/ModerationHandlerInterface.php b/core/modules/content_moderation/src/Entity/Handler/ModerationHandlerInterface.php
index 7e6f109fbd..976fbb29da 100644
--- a/core/modules/content_moderation/src/Entity/Handler/ModerationHandlerInterface.php
+++ b/core/modules/content_moderation/src/Entity/Handler/ModerationHandlerInterface.php
@@ -11,8 +11,6 @@
  * Much of the logic contained in this handler is an indication of flaws
  * in the Entity API that are insufficiently standardized between entity types.
  * Hopefully over time functionality can be removed from this interface.
- *
- * @internal
  */
 interface ModerationHandlerInterface {
 
diff --git a/core/modules/content_moderation/src/Entity/Handler/NodeModerationHandler.php b/core/modules/content_moderation/src/Entity/Handler/NodeModerationHandler.php
index 7e9aca3eb0..1e1c6f67a7 100644
--- a/core/modules/content_moderation/src/Entity/Handler/NodeModerationHandler.php
+++ b/core/modules/content_moderation/src/Entity/Handler/NodeModerationHandler.php
@@ -9,8 +9,6 @@
 
 /**
  * Customizations for node entities.
- *
- * @internal
  */
 class NodeModerationHandler extends ModerationHandler {
 
diff --git a/core/modules/content_moderation/src/EntityOperations.php b/core/modules/content_moderation/src/EntityOperations.php
index a7fcf7e8d9..d276ad74d4 100644
--- a/core/modules/content_moderation/src/EntityOperations.php
+++ b/core/modules/content_moderation/src/EntityOperations.php
@@ -3,7 +3,6 @@
 namespace Drupal\content_moderation;
 
 use Drupal\content_moderation\Entity\ContentModerationState as ContentModerationStateEntity;
-use Drupal\content_moderation\Entity\ContentModerationStateInterface;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -41,6 +40,13 @@ class EntityOperations implements ContainerInjectionInterface {
    */
   protected $formBuilder;
 
+  /**
+   * The Revision Tracker service.
+   *
+   * @var \Drupal\content_moderation\RevisionTrackerInterface
+   */
+  protected $tracker;
+
   /**
    * The entity bundle information service.
    *
@@ -57,13 +63,16 @@ class EntityOperations implements ContainerInjectionInterface {
    *   Entity type manager service.
    * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
    *   The form builder.
+   * @param \Drupal\content_moderation\RevisionTrackerInterface $tracker
+   *   The revision tracker.
    * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info
    *   The entity bundle information service.
    */
-  public function __construct(ModerationInformationInterface $moderation_info, EntityTypeManagerInterface $entity_type_manager, FormBuilderInterface $form_builder, EntityTypeBundleInfoInterface $bundle_info) {
+  public function __construct(ModerationInformationInterface $moderation_info, EntityTypeManagerInterface $entity_type_manager, FormBuilderInterface $form_builder, RevisionTrackerInterface $tracker, EntityTypeBundleInfoInterface $bundle_info) {
     $this->moderationInfo = $moderation_info;
     $this->entityTypeManager = $entity_type_manager;
     $this->formBuilder = $form_builder;
+    $this->tracker = $tracker;
     $this->bundleInfo = $bundle_info;
   }
 
@@ -75,6 +84,7 @@ public static function create(ContainerInterface $container) {
       $container->get('content_moderation.moderation_information'),
       $container->get('entity_type.manager'),
       $container->get('form_builder'),
+      $container->get('content_moderation.revision_tracker'),
       $container->get('entity_type.bundle.info')
     );
   }
@@ -84,8 +94,6 @@ public static function create(ContainerInterface $container) {
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity being saved.
-   *
-   * @see hook_entity_presave()
    */
   public function entityPresave(EntityInterface $entity) {
     if (!$this->moderationInfo->isModeratedEntity($entity)) {
@@ -95,8 +103,7 @@ public function entityPresave(EntityInterface $entity) {
     if ($entity->moderation_state->value) {
       $workflow = $this->moderationInfo->getWorkflowForEntity($entity);
       /** @var \Drupal\content_moderation\ContentModerationState $current_state */
-      $current_state = $workflow->getTypePlugin()
-        ->getState($entity->moderation_state->value);
+      $current_state = $workflow->getTypePlugin()->getState($entity->moderation_state->value);
 
       // This entity is default if it is new, a new translation, the default
       // revision, or the default revision is not published.
@@ -106,13 +113,13 @@ public function entityPresave(EntityInterface $entity) {
         || !$this->moderationInfo->isDefaultRevisionPublished($entity);
 
       // Fire per-entity-type logic for handling the save process.
-      $this->entityTypeManager
-        ->getHandler($entity->getEntityTypeId(), 'moderation')
-        ->onPresave($entity, $update_default_revision, $current_state->isPublishedState());
+      $this->entityTypeManager->getHandler($entity->getEntityTypeId(), 'moderation')->onPresave($entity, $update_default_revision, $current_state->isPublishedState());
     }
   }
 
   /**
+   * Hook bridge.
+   *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity that was just saved.
    *
@@ -121,10 +128,13 @@ public function entityPresave(EntityInterface $entity) {
   public function entityInsert(EntityInterface $entity) {
     if ($this->moderationInfo->isModeratedEntity($entity)) {
       $this->updateOrCreateFromEntity($entity);
+      $this->setLatestRevision($entity);
     }
   }
 
   /**
+   * Hook bridge.
+   *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity that was just saved.
    *
@@ -133,6 +143,7 @@ public function entityInsert(EntityInterface $entity) {
   public function entityUpdate(EntityInterface $entity) {
     if ($this->moderationInfo->isModeratedEntity($entity)) {
       $this->updateOrCreateFromEntity($entity);
+      $this->setLatestRevision($entity);
     }
   }
 
@@ -190,6 +201,24 @@ protected function updateOrCreateFromEntity(EntityInterface $entity) {
   }
 
   /**
+   * Set the latest revision.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The content entity to create content_moderation_state entity for.
+   */
+  protected function setLatestRevision(EntityInterface $entity) {
+    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
+    $this->tracker->setLatestRevision(
+      $entity->getEntityTypeId(),
+      $entity->id(),
+      $entity->language()->getId(),
+      $entity->getRevisionId()
+    );
+  }
+
+  /**
+   * Hook bridge.
+   *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity being deleted.
    *
@@ -203,6 +232,8 @@ public function entityDelete(EntityInterface $entity) {
   }
 
   /**
+   * Hook bridge.
+   *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity revision being deleted.
    *
@@ -221,6 +252,8 @@ public function entityRevisionDelete(EntityInterface $entity) {
   }
 
   /**
+   * Hook bridge.
+   *
    * @param \Drupal\Core\Entity\EntityInterface $translation
    *   The entity translation being deleted.
    *
@@ -241,6 +274,8 @@ public function entityTranslationDelete(EntityInterface $translation) {
   /**
    * Act on entities being assembled before rendering.
    *
+   * This is a hook bridge.
+   *
    * @see hook_entity_view()
    * @see EntityFieldManagerInterface::getExtraFields()
    */
diff --git a/core/modules/content_moderation/src/EntityTypeInfo.php b/core/modules/content_moderation/src/EntityTypeInfo.php
index 4ef25d9b12..af6de45c75 100644
--- a/core/modules/content_moderation/src/EntityTypeInfo.php
+++ b/core/modules/content_moderation/src/EntityTypeInfo.php
@@ -18,7 +18,7 @@
 use Drupal\content_moderation\Entity\Handler\BlockContentModerationHandler;
 use Drupal\content_moderation\Entity\Handler\ModerationHandler;
 use Drupal\content_moderation\Entity\Handler\NodeModerationHandler;
-use Drupal\content_moderation\Entity\Routing\EntityModerationRouteProvider;
+use Drupal\content_moderation\Routing\EntityModerationRouteProvider;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -121,6 +121,8 @@ public static function create(ContainerInterface $container) {
   /**
    * Adds Moderation configuration to appropriate entity types.
    *
+   * This is an alter hook bridge.
+   *
    * @param EntityTypeInterface[] $entity_types
    *   The master entity type list to alter.
    *
@@ -157,6 +159,8 @@ protected function addModerationToEntityType(ContentEntityTypeInterface $type) {
       $type->setLinkTemplate('latest-version', $type->getLinkTemplate('canonical') . '/latest');
     }
 
+    // @todo Core forgot to add a direct way to manipulate route_provider, so
+    // we have to do it the sloppy way for now.
     $providers = $type->getRouteProviderClasses() ?: [];
     if (empty($providers['moderation'])) {
       $providers['moderation'] = EntityModerationRouteProvider::class;
@@ -169,6 +173,10 @@ protected function addModerationToEntityType(ContentEntityTypeInterface $type) {
   /**
    * Gets the "extra fields" for a bundle.
    *
+   * This is a hook bridge.
+   *
+   * @see hook_entity_extra_field_info()
+   *
    * @return array
    *   A nested array of 'pseudo-field' elements. Each list is nested within the
    *   following keys: entity type, bundle name, context (either 'form' or
@@ -187,8 +195,6 @@ protected function addModerationToEntityType(ContentEntityTypeInterface $type) {
    *   - delete: (optional) String containing markup (normally a link) used as
    *     the element's 'delete' operation in the administration interface. Only
    *     for 'form' context.
-   *
-   * @see hook_entity_extra_field_info()
    */
   public function entityExtraFieldInfo() {
     $return = [];
@@ -235,8 +241,6 @@ protected function getModeratedBundles() {
    *
    * @return \Drupal\Core\Field\BaseFieldDefinition[]
    *   New fields added by moderation state.
-   *
-   * @see hook_entity_base_field_info()
    */
   public function entityBaseFieldInfo(EntityTypeInterface $entity_type) {
     if (!$this->moderationInfo->canModerateEntitiesOfEntityType($entity_type)) {
@@ -249,6 +253,7 @@ public function entityBaseFieldInfo(EntityTypeInterface $entity_type) {
       ->setDescription(t('The moderation state of this piece of content.'))
       ->setComputed(TRUE)
       ->setClass(ModerationStateFieldItemList::class)
+      ->setSetting('target_type', 'moderation_state')
       ->setDisplayOptions('view', [
         'label' => 'hidden',
         'region' => 'hidden',
diff --git a/core/modules/content_moderation/src/Form/ContentModerationConfigureEntityTypesForm.php b/core/modules/content_moderation/src/Form/ContentModerationConfigureEntityTypesForm.php
index 445216d965..3efcafb0d5 100644
--- a/core/modules/content_moderation/src/Form/ContentModerationConfigureEntityTypesForm.php
+++ b/core/modules/content_moderation/src/Form/ContentModerationConfigureEntityTypesForm.php
@@ -178,15 +178,9 @@ public function ajaxCallback() {
         $selected_bundles[$bundle_id] = $bundle['label'];
       }
     }
-    $selected_bundles_list = [
-      '#theme' => 'item_list',
-      '#items' => $selected_bundles,
-      '#context' => ['list_style' => 'comma-list'],
-      '#empty' => $this->t('none'),
-    ];
     $response = new AjaxResponse();
     $response->addCommand(new CloseDialogCommand());
-    $response->addCommand(new HtmlCommand('#selected-' . $this->entityType->id(), $selected_bundles_list));
+    $response->addCommand(new HtmlCommand('#selected-' . $this->entityType->id(), !empty($selected_bundles) ? implode(', ', $selected_bundles) : $this->t('none')));
     return $response;
   }
 
@@ -196,9 +190,9 @@ public function ajaxCallback() {
   public function getTitle(WorkflowInterface $workflow = NULL, $entity_type_id) {
     $this->entityType = $this->entityTypeManager->getDefinition($entity_type_id);
 
-    $title = $this->t('Select the @entity_type types for the @workflow workflow', ['@entity_type' => $this->entityType->getLabel(), '@workflow' => $workflow->label()]);
+    $title = $this->t('Select the @entity_type types for the @workflow', ['@entity_type' => $this->entityType->getLabel(), '@workflow' => $workflow->label()]);
     if ($bundle_entity_type_id = $this->entityType->getBundleEntityType()) {
-      $title = $this->t('Select the @entity_type_plural_label for the @workflow workflow', ['@entity_type_plural_label' => $this->entityTypeManager->getDefinition($bundle_entity_type_id)->getPluralLabel(), '@workflow' => $workflow->label()]);
+      $title = $this->t('Select the @entity_type_plural_label for the @workflow', ['@entity_type_plural_label' => $this->entityTypeManager->getDefinition($bundle_entity_type_id)->getPluralLabel(), '@workflow' => $workflow->label()]);
     }
 
     return $title;
diff --git a/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php b/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
index 6006c9abcb..f9520b65ac 100644
--- a/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
+++ b/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
@@ -94,21 +94,14 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         }
       }
 
-      $selected_bundles_list = [
-        '#theme' => 'item_list',
-        '#items' => $selected_bundles,
-        '#context' => ['list_style' => 'comma-list'],
-        '#empty' => $this->t('none'),
-      ];
       $form['entity_types_container']['entity_types'][$entity_type->id()] = [
         'type' => [
-          '#type' => 'inline_template',
-          '#template' => '<strong>{{ label }}</strong></br><span id="selected-{{ entity_type_id }}">{{ selected_bundles }}</span>',
-          '#context' => [
-            'label' => $this->t('@bundle types', ['@bundle' => $entity_type->getLabel()]),
-            'entity_type_id' => $entity_type->id(),
-            'selected_bundles' => $selected_bundles_list,
-          ]
+          'label' => ['#markup' => '<strong>' . $this->t('@bundle types', ['@bundle' => $entity_type->getLabel()]) . '</strong>'],
+          'selected' => [
+            '#prefix' => '<br/><span id="selected-' . $entity_type->id() . '">',
+            '#markup' => !empty($selected_bundles) ? implode(', ', $selected_bundles) : $this->t('none'),
+            '#suffix' => '</span>',
+          ],
         ],
         'operations' => [
           '#type' => 'operations',
diff --git a/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php b/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
index 8e7e3617a3..27592ae79b 100644
--- a/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
+++ b/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php
@@ -28,6 +28,9 @@ class EntityRevisionConverter extends EntityConverter {
    *   The entity manager, needed by the parent class.
    * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_info
    *   The moderation info utility service.
+   *
+   * @todo: If the parent class is ever cleaned up to use EntityTypeManager
+   *   instead of Entity manager, this method will also need to be adjusted.
    */
   public function __construct(EntityManagerInterface $entity_manager, ModerationInformationInterface $moderation_info) {
     parent::__construct($entity_manager);
@@ -75,7 +78,7 @@ protected function isEditFormPage(Route $route) {
         return FALSE;
       }
       $entity_type = $this->entityManager->getDefinition($entity_type_id);
-      return in_array($operation, ['default', 'edit']) && $entity_type && $entity_type->isRevisionable();
+      return $operation == 'edit' && $entity_type && $entity_type->isRevisionable();
     }
   }
 
diff --git a/core/modules/content_moderation/src/Permissions.php b/core/modules/content_moderation/src/Permissions.php
index a6d6ce505d..22cebf586d 100644
--- a/core/modules/content_moderation/src/Permissions.php
+++ b/core/modules/content_moderation/src/Permissions.php
@@ -26,9 +26,9 @@ public function transitionPermissions() {
     foreach (Workflow::loadMultipleByType('content_moderation') as $id => $workflow) {
       foreach ($workflow->getTypePlugin()->getTransitions() as $transition) {
         $permissions['use ' . $workflow->id() . ' transition ' . $transition->id()] = [
-          'title' => $this->t('%workflow workflow: Use %transition transition.', [
-            '%workflow' => $workflow->label(),
+          'title' => $this->t('Use %transition transition from %workflow workflow.', [
             '%transition' => $transition->label(),
+            '%workflow' => $workflow->label(),
           ]),
         ];
       }
diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
index 4270a1fb53..de622244b1 100644
--- a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
+++ b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
@@ -48,7 +48,7 @@ protected function getModerationStateId() {
    * @param \Drupal\Core\Entity\ContentEntityInterface $entity
    *   The entity the content moderation state entity will be loaded from.
    *
-   * @return \Drupal\content_moderation\Entity\ContentModerationStateInterface|null
+   * @return \Drupal\content_moderation\ContentModerationStateInterface|null
    *   The content_moderation_state revision or FALSE if none exists.
    */
   protected function loadContentModerationStateRevision(ContentEntityInterface $entity) {
@@ -69,7 +69,7 @@ protected function loadContentModerationStateRevision(ContentEntityInterface $en
       return NULL;
     }
 
-    /** @var \Drupal\content_moderation\Entity\ContentModerationStateInterface $content_moderation_state */
+    /** @var \Drupal\content_moderation\ContentModerationStateInterface $content_moderation_state */
     $content_moderation_state = $content_moderation_storage->loadRevision(key($revisions));
     if ($entity->getEntityType()->hasKey('langcode')) {
       $langcode = $entity->language()->getId();
diff --git a/core/modules/content_moderation/src/Plugin/Validation/Constraint/ModerationStateConstraintValidator.php b/core/modules/content_moderation/src/Plugin/Validation/Constraint/ModerationStateConstraintValidator.php
index 4b879737da..bfbdac5eb3 100644
--- a/core/modules/content_moderation/src/Plugin/Validation/Constraint/ModerationStateConstraintValidator.php
+++ b/core/modules/content_moderation/src/Plugin/Validation/Constraint/ModerationStateConstraintValidator.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\content_moderation\ModerationInformationInterface;
+use Drupal\content_moderation\StateTransitionValidation;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
@@ -15,6 +16,13 @@
  */
 class ModerationStateConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
 
+  /**
+   * The state transition validation.
+   *
+   * @var \Drupal\content_moderation\StateTransitionValidation
+   */
+  protected $validation;
+
   /**
    * The entity type manager.
    *
@@ -34,10 +42,13 @@ class ModerationStateConstraintValidator extends ConstraintValidator implements
    *
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
    *   The entity type manager.
+   * @param \Drupal\content_moderation\StateTransitionValidation $validation
+   *   The state transition validation.
    * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_information
    *   The moderation information.
    */
-  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModerationInformationInterface $moderation_information) {
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, StateTransitionValidation $validation, ModerationInformationInterface $moderation_information) {
+    $this->validation = $validation;
     $this->entityTypeManager = $entity_type_manager;
     $this->moderationInformation = $moderation_information;
   }
@@ -48,6 +59,7 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Mod
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('entity_type.manager'),
+      $container->get('content_moderation.state_transition_validation'),
       $container->get('content_moderation.moderation_information')
     );
   }
diff --git a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php b/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
index 358314a4ca..1515cb46d8 100644
--- a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
+++ b/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
@@ -31,7 +31,7 @@
  *   },
  * )
  */
-class ContentModeration extends WorkflowTypeBase implements ContentModerationInterface, ContainerFactoryPluginInterface {
+class ContentModeration extends WorkflowTypeBase implements ContainerFactoryPluginInterface {
 
   use StringTranslationTrait;
 
@@ -135,28 +135,52 @@ public function workflowStateHasData(WorkflowInterface $workflow, StateInterface
   }
 
   /**
-   * {@inheritdoc}
+   * Gets the entity types the workflow is applied to.
+   *
+   * @return string[]
+   *   The entity types the workflow is applied to.
    */
   public function getEntityTypes() {
     return array_keys($this->configuration['entity_types']);
   }
 
   /**
-   * {@inheritdoc}
+   * Gets any bundles the workflow is applied to for the given entity type.
+   *
+   * @param string $entity_type_id
+   *   The entity type ID to get the bundles for.
+   *
+   * @return string[]
+   *   The bundles of the entity type the workflow is applied to or an empty
+   *   array if the entity type is not applied to the workflow.
    */
   public function getBundlesForEntityType($entity_type_id) {
     return isset($this->configuration['entity_types'][$entity_type_id]) ? $this->configuration['entity_types'][$entity_type_id] : [];
   }
 
   /**
-   * {@inheritdoc}
+   * Checks if the workflow applies to the supplied entity type and bundle.
+   *
+   * @param string $entity_type_id
+   *   The entity type ID to check.
+   * @param string $bundle_id
+   *   The bundle ID to check.
+   *
+   * @return bool
+   *   TRUE if the workflow applies to the supplied entity type ID and bundle
+   *   ID. FALSE if not.
    */
   public function appliesToEntityTypeAndBundle($entity_type_id, $bundle_id) {
     return in_array($bundle_id, $this->getBundlesForEntityType($entity_type_id), TRUE);
   }
 
   /**
-   * {@inheritdoc}
+   * Removes an entity type ID / bundle ID from the workflow.
+   *
+   * @param string $entity_type_id
+   *   The entity type ID to remove.
+   * @param string $bundle_id
+   *   The bundle ID to remove.
    */
   public function removeEntityTypeAndBundle($entity_type_id, $bundle_id) {
     if (!isset($this->configuration['entity_types'][$entity_type_id])) {
@@ -175,7 +199,14 @@ public function removeEntityTypeAndBundle($entity_type_id, $bundle_id) {
   }
 
   /**
-   * {@inheritdoc}
+   * Add an entity type ID / bundle ID to the workflow.
+   *
+   * @param string $entity_type_id
+   *   The entity type ID to add. It is responsibility of the caller to provide
+   *   a valid entity type ID.
+   * @param string $bundle_id
+   *   The bundle ID to add. It is responsibility of the caller to provide a
+   *   valid bundle ID.
    */
   public function addEntityTypeAndBundle($entity_type_id, $bundle_id) {
     if (!$this->appliesToEntityTypeAndBundle($entity_type_id, $bundle_id)) {
diff --git a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModerationInterface.php b/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModerationInterface.php
deleted file mode 100644
index 0188a87e20..0000000000
--- a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModerationInterface.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-namespace Drupal\content_moderation\Plugin\WorkflowType;
-
-use Drupal\workflows\WorkflowTypeInterface;
-
-/**
- * Interface for ContentModeration WorkflowType plugin.
- */
-interface ContentModerationInterface extends WorkflowTypeInterface {
-
-  /**
-   * Gets the entity types the workflow is applied to.
-   *
-   * @return string[]
-   *   The entity types the workflow is applied to.
-   */
-  public function getEntityTypes();
-
-  /**
-   * Gets any bundles the workflow is applied to for the given entity type.
-   *
-   * @param string $entity_type_id
-   *   The entity type ID to get the bundles for.
-   *
-   * @return string[]
-   *   The bundles of the entity type the workflow is applied to or an empty
-   *   array if the entity type is not applied to the workflow.
-   */
-  public function getBundlesForEntityType($entity_type_id);
-
-  /**
-   * Checks if the workflow applies to the supplied entity type and bundle.
-   *
-   * @param string $entity_type_id
-   *   The entity type ID to check.
-   * @param string $bundle_id
-   *   The bundle ID to check.
-   *
-   * @return bool
-   *   TRUE if the workflow applies to the supplied entity type ID and bundle
-   *   ID. FALSE if not.
-   */
-  public function appliesToEntityTypeAndBundle($entity_type_id, $bundle_id);
-
-  /**
-   * Removes an entity type ID / bundle ID from the workflow.
-   *
-   * @param string $entity_type_id
-   *   The entity type ID to remove.
-   * @param string $bundle_id
-   *   The bundle ID to remove.
-   */
-  public function removeEntityTypeAndBundle($entity_type_id, $bundle_id);
-
-  /**
-   * Add an entity type ID / bundle ID to the workflow.
-   *
-   * @param string $entity_type_id
-   *   The entity type ID to add. It is responsibility of the caller to provide
-   *   a valid entity type ID.
-   * @param string $bundle_id
-   *   The bundle ID to add. It is responsibility of the caller to provide a
-   *   valid bundle ID.
-   */
-  public function addEntityTypeAndBundle($entity_type_id, $bundle_id);
-
-  /**
-   * {@inheritdoc}
-   *
-   * @param $entity
-   *   Content Moderation uses this parameter to determine the initial state
-   *   based on publishing status.
-   */
-  public function getInitialState($entity = NULL);
-
-}
diff --git a/core/modules/views/src/Plugin/views/filter/LatestRevision.php b/core/modules/content_moderation/src/Plugin/views/filter/LatestRevision.php
similarity index 61%
rename from core/modules/views/src/Plugin/views/filter/LatestRevision.php
rename to core/modules/content_moderation/src/Plugin/views/filter/LatestRevision.php
index 7930a7fb1c..64400197ec 100644
--- a/core/modules/views/src/Plugin/views/filter/LatestRevision.php
+++ b/core/modules/content_moderation/src/Plugin/views/filter/LatestRevision.php
@@ -1,10 +1,12 @@
 <?php
 
-namespace Drupal\views\Plugin\views\filter;
+namespace Drupal\content_moderation\Plugin\views\filter;
 
+use Drupal\Core\Database\Connection;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
 use Drupal\views\Plugin\ViewsHandlerManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -31,6 +33,13 @@ class LatestRevision extends FilterPluginBase implements ContainerFactoryPluginI
    */
   protected $joinHandler;
 
+  /**
+   * Database Connection.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $connection;
+
   /**
    * Constructs a new LatestRevision.
    *
@@ -44,12 +53,14 @@ class LatestRevision extends FilterPluginBase implements ContainerFactoryPluginI
    *   Entity Type Manager Service.
    * @param \Drupal\views\Plugin\ViewsHandlerManager $join_handler
    *   Views Handler Plugin Manager.
+   * @param \Drupal\Core\Database\Connection $connection
+   *   Database Connection.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ViewsHandlerManager $join_handler) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ViewsHandlerManager $join_handler, Connection $connection) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
-
     $this->entityTypeManager = $entity_type_manager;
     $this->joinHandler = $join_handler;
+    $this->connection = $connection;
   }
 
   /**
@@ -59,7 +70,8 @@ public static function create(ContainerInterface $container, array $configuratio
     return new static(
       $configuration, $plugin_id, $plugin_definition,
       $container->get('entity_type.manager'),
-      $container->get('plugin.manager.views.join')
+      $container->get('plugin.manager.views.join'),
+      $container->get('database')
     );
   }
 
@@ -86,28 +98,39 @@ public function canExpose() {
    * {@inheritdoc}
    */
   public function query() {
+    // The table doesn't exist until a moderated node has been saved at least
+    // once. Just in case, disable this filter until then. Note that this means
+    // the view will still show all revisions, not just latest, but this is
+    // sufficiently edge-case-y that it's probably not worth the time to
+    // handle more robustly.
+    if (!$this->connection->schema()->tableExists('content_revision_tracker')) {
+      return;
+    }
+
+    $table = $this->ensureMyTable();
+
     /** @var \Drupal\views\Plugin\views\query\Sql $query */
     $query = $this->query;
-    $query_base_table = $this->relationship ?: $this->view->storage->get('base_table');
 
-    $entity_type = $this->entityTypeManager->getDefinition($this->getEntityType());
-    $keys = $entity_type->getKeys();
+    $definition = $this->entityTypeManager->getDefinition($this->getEntityType());
+    $keys = $definition->getKeys();
 
     $definition = [
-      'table' => $query_base_table,
-      'type' => 'LEFT',
-      'field' => $keys['id'],
-      'left_table' => $query_base_table,
+      'table' => 'content_revision_tracker',
+      'type' => 'INNER',
+      'field' => 'entity_id',
+      'left_table' => $table,
       'left_field' => $keys['id'],
       'extra' => [
-        ['left_field' => $keys['revision'], 'field' => $keys['revision'], 'operator' => '>'],
+        ['left_field' => $keys['langcode'], 'field' => 'langcode'],
+        ['left_field' => $keys['revision'], 'field' => 'revision_id'],
+        ['field' => 'entity_type', 'value' => $this->getEntityType()],
       ],
     ];
 
     $join = $this->joinHandler->createInstance('standard', $definition);
 
-    $join_table_alias = $query->addTable($query_base_table, $this->relationship, $join);
-    $query->addWhere($this->options['group'], "$join_table_alias.{$keys['id']}", NULL, 'IS NULL');
+    $query->ensureTable('content_revision_tracker', $this->relationship, $join);
   }
 
 }
diff --git a/core/modules/content_moderation/src/RevisionTracker.php b/core/modules/content_moderation/src/RevisionTracker.php
new file mode 100644
index 0000000000..3f82fdd362
--- /dev/null
+++ b/core/modules/content_moderation/src/RevisionTracker.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace Drupal\content_moderation;
+
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Database\DatabaseExceptionWrapper;
+use Drupal\Core\Database\SchemaObjectExistsException;
+
+/**
+ * Tracks metadata about revisions across entities.
+ *
+ * @internal
+ */
+class RevisionTracker implements RevisionTrackerInterface {
+
+  /**
+   * The name of the SQL table we use for tracking.
+   *
+   * @var string
+   */
+  protected $tableName;
+
+  /**
+   * The database connection.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $connection;
+
+  /**
+   * Constructs a new RevisionTracker.
+   *
+   * @param \Drupal\Core\Database\Connection $connection
+   *   The database connection.
+   * @param string $table
+   *   The table that should be used for tracking.
+   */
+  public function __construct(Connection $connection, $table = 'content_revision_tracker') {
+    $this->connection = $connection;
+    $this->tableName = $table;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setLatestRevision($entity_type_id, $entity_id, $langcode, $revision_id) {
+    try {
+      $this->recordLatestRevision($entity_type_id, $entity_id, $langcode, $revision_id);
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      $this->ensureTableExists();
+      $this->recordLatestRevision($entity_type_id, $entity_id, $langcode, $revision_id);
+    }
+
+    return $this;
+  }
+
+  /**
+   * Records the latest revision of a given entity.
+   *
+   * @param string $entity_type_id
+   *   The machine name of the type of entity.
+   * @param string $entity_id
+   *   The Entity ID in question.
+   * @param string $langcode
+   *   The langcode of the revision we're saving. Each language has its own
+   *   effective tree of entity revisions, so in different languages
+   *   different revisions will be "latest".
+   * @param int $revision_id
+   *   The revision ID that is now the latest revision.
+   *
+   * @return int
+   *   One of the valid returns from a merge query's execute method.
+   */
+  protected function recordLatestRevision($entity_type_id, $entity_id, $langcode, $revision_id) {
+    return $this->connection->merge($this->tableName)
+      ->keys([
+        'entity_type' => $entity_type_id,
+        'entity_id' => $entity_id,
+        'langcode' => $langcode,
+      ])
+      ->fields([
+        'revision_id' => $revision_id,
+      ])
+      ->execute();
+  }
+
+  /**
+   * Checks if the table exists and create it if not.
+   *
+   * @return bool
+   *   TRUE if the table was created, FALSE otherwise.
+   */
+  protected function ensureTableExists() {
+    try {
+      if (!$this->connection->schema()->tableExists($this->tableName)) {
+        $this->connection->schema()->createTable($this->tableName, $this->schemaDefinition());
+        return TRUE;
+      }
+    }
+    catch (SchemaObjectExistsException $e) {
+      // If another process has already created the table, attempting to
+      // recreate it will throw an exception. In this case just catch the
+      // exception and do nothing.
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * Defines the schema for the tracker table.
+   *
+   * @return array
+   *   The schema API definition for the SQL storage table.
+   */
+  protected function schemaDefinition() {
+    $schema = [
+      'description' => 'Tracks the latest revision for any entity',
+      'fields' => [
+        'entity_type' => [
+          'description' => 'The entity type',
+          'type' => 'varchar_ascii',
+          'length' => 255,
+          'not null' => TRUE,
+          'default' => '',
+        ],
+        'entity_id' => [
+          'description' => 'The entity ID',
+          'type' => 'int',
+          'length' => 255,
+          'not null' => TRUE,
+          'default' => 0,
+        ],
+        'langcode' => [
+          'description' => 'The language of the entity revision',
+          'type' => 'varchar',
+          'length' => 12,
+          'not null' => TRUE,
+          'default' => '',
+        ],
+        'revision_id' => [
+          'description' => 'The latest revision ID for this entity',
+          'type' => 'int',
+          'not null' => TRUE,
+          'default' => 0,
+        ],
+      ],
+      'primary key' => ['entity_type', 'entity_id', 'langcode'],
+    ];
+
+    return $schema;
+  }
+
+}
diff --git a/core/modules/content_moderation/src/RevisionTrackerInterface.php b/core/modules/content_moderation/src/RevisionTrackerInterface.php
new file mode 100644
index 0000000000..5079151ae8
--- /dev/null
+++ b/core/modules/content_moderation/src/RevisionTrackerInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\content_moderation;
+
+/**
+ * Tracks metadata about revisions across content entities.
+ *
+ * @internal
+ */
+interface RevisionTrackerInterface {
+
+  /**
+   * Sets the latest revision of a given entity.
+   *
+   * @param string $entity_type_id
+   *   The machine name of the type of entity.
+   * @param string $entity_id
+   *   The Entity ID in question.
+   * @param string $langcode
+   *   The langcode of the revision we're saving. Each language has its own
+   *   effective tree of entity revisions, so in different languages
+   *   different revisions will be "latest".
+   * @param int $revision_id
+   *   The revision ID that is now the latest revision.
+   *
+   * @return static
+   */
+  public function setLatestRevision($entity_type_id, $entity_id, $langcode, $revision_id);
+
+}
diff --git a/core/modules/content_moderation/src/Entity/Routing/EntityModerationRouteProvider.php b/core/modules/content_moderation/src/Routing/EntityModerationRouteProvider.php
similarity index 98%
rename from core/modules/content_moderation/src/Entity/Routing/EntityModerationRouteProvider.php
rename to core/modules/content_moderation/src/Routing/EntityModerationRouteProvider.php
index f72a47ede7..c60fcdf1a7 100644
--- a/core/modules/content_moderation/src/Entity/Routing/EntityModerationRouteProvider.php
+++ b/core/modules/content_moderation/src/Routing/EntityModerationRouteProvider.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\content_moderation\Entity\Routing;
+namespace Drupal\content_moderation\Routing;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityHandlerInterface;
diff --git a/core/modules/content_moderation/src/ViewsData.php b/core/modules/content_moderation/src/ViewsData.php
index 57d6d76160..189562dd8c 100644
--- a/core/modules/content_moderation/src/ViewsData.php
+++ b/core/modules/content_moderation/src/ViewsData.php
@@ -51,13 +51,137 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Mod
   public function getViewsData() {
     $data = [];
 
+    $data['content_revision_tracker']['table']['group'] = $this->t('Content moderation (tracker)');
+
+    $data['content_revision_tracker']['entity_type'] = [
+      'title' => $this->t('Entity type'),
+      'field' => [
+        'id' => 'standard',
+      ],
+      'filter' => [
+        'id' => 'string',
+      ],
+      'argument' => [
+        'id' => 'string',
+      ],
+      'sort' => [
+        'id' => 'standard',
+      ],
+    ];
+
+    $data['content_revision_tracker']['entity_id'] = [
+      'title' => $this->t('Entity ID'),
+      'field' => [
+        'id' => 'standard',
+      ],
+      'filter' => [
+        'id' => 'numeric',
+      ],
+      'argument' => [
+        'id' => 'numeric',
+      ],
+      'sort' => [
+        'id' => 'standard',
+      ],
+    ];
+
+    $data['content_revision_tracker']['langcode'] = [
+      'title' => $this->t('Entity language'),
+      'field' => [
+        'id' => 'standard',
+      ],
+      'filter' => [
+        'id' => 'language',
+      ],
+      'argument' => [
+        'id' => 'language',
+      ],
+      'sort' => [
+        'id' => 'standard',
+      ],
+    ];
+
+    $data['content_revision_tracker']['revision_id'] = [
+      'title' => $this->t('Latest revision ID'),
+      'field' => [
+        'id' => 'standard',
+      ],
+      'filter' => [
+        'id' => 'numeric',
+      ],
+      'argument' => [
+        'id' => 'numeric',
+      ],
+      'sort' => [
+        'id' => 'standard',
+      ],
+    ];
+
     $entity_types_with_moderation = array_filter($this->entityTypeManager->getDefinitions(), function (EntityTypeInterface $type) {
       return $this->moderationInformation->canModerateEntitiesOfEntityType($type);
     });
 
+    // Add a join for each entity type to the content_revision_tracker table.
+    foreach ($entity_types_with_moderation as $entity_type_id => $entity_type) {
+      /** @var \Drupal\views\EntityViewsDataInterface $views_data */
+      // We need the views_data handler in order to get the table name later.
+      if ($this->entityTypeManager->hasHandler($entity_type_id, 'views_data') && $views_data = $this->entityTypeManager->getHandler($entity_type_id, 'views_data')) {
+        // Add a join from the entity base table to the revision tracker table.
+        $base_table = $views_data->getViewsTableForEntityType($entity_type);
+        $data['content_revision_tracker']['table']['join'][$base_table] = [
+          'left_field' => $entity_type->getKey('id'),
+          'field' => 'entity_id',
+          'extra' => [
+            [
+              'field' => 'entity_type',
+              'value' => $entity_type_id,
+            ],
+          ],
+        ];
+
+        // Some entity types might not be translatable.
+        if ($entity_type->hasKey('langcode')) {
+          $data['content_revision_tracker']['table']['join'][$base_table]['extra'][] = [
+            'field' => 'langcode',
+            'left_field' => $entity_type->getKey('langcode'),
+            'operation' => '=',
+          ];
+        }
+
+        // Add a relationship between the revision tracker table to the latest
+        // revision on the entity revision table.
+        $data['content_revision_tracker']['latest_revision__' . $entity_type_id] = [
+          'title' => $this->t('@label latest revision', ['@label' => $entity_type->getLabel()]),
+          'group' => $this->t('@label revision', ['@label' => $entity_type->getLabel()]),
+          'relationship' => [
+            'id' => 'standard',
+            'label' => $this->t('@label latest revision', ['@label' => $entity_type->getLabel()]),
+            'base' => $this->getRevisionViewsTableForEntityType($entity_type),
+            'base field' => $entity_type->getKey('revision'),
+            'relationship field' => 'revision_id',
+            'extra' => [
+              [
+                'left_field' => 'entity_type',
+                'value' => $entity_type_id,
+              ],
+            ],
+          ],
+        ];
+
+        // Some entity types might not be translatable.
+        if ($entity_type->hasKey('langcode')) {
+          $data['content_revision_tracker']['latest_revision__' . $entity_type_id]['relationship']['extra'][] = [
+            'left_field' => 'langcode',
+            'field' => $entity_type->getKey('langcode'),
+            'operation' => '=',
+          ];
+        }
+      }
+    }
+
     // Provides a relationship from moderated entity to its moderation state
     // entity.
-    $content_moderation_state_entity_type = $this->entityTypeManager->getDefinition('content_moderation_state');
+    $content_moderation_state_entity_type = \Drupal::entityTypeManager()->getDefinition('content_moderation_state');
     $content_moderation_state_entity_base_table = $content_moderation_state_entity_type->getDataTable() ?: $content_moderation_state_entity_type->getBaseTable();
     $content_moderation_state_entity_revision_base_table = $content_moderation_state_entity_type->getRevisionDataTable() ?: $content_moderation_state_entity_type->getRevisionTable();
     foreach ($entity_types_with_moderation as $entity_type_id => $entity_type) {
@@ -104,4 +228,39 @@ public function getViewsData() {
     return $data;
   }
 
+  /**
+   * Alters the table and field information from hook_views_data().
+   *
+   * @param array $data
+   *   An array of all information about Views tables and fields, collected from
+   *   hook_views_data(), passed by reference.
+   *
+   * @see hook_views_data()
+   */
+  public function alterViewsData(array &$data) {
+    $entity_types_with_moderation = array_filter($this->entityTypeManager->getDefinitions(), function (EntityTypeInterface $type) {
+      return $this->moderationInformation->canModerateEntitiesOfEntityType($type);
+    });
+    foreach ($entity_types_with_moderation as $type) {
+      $data[$type->getRevisionTable()]['latest_revision'] = [
+        'title' => t('Is Latest Revision'),
+        'help' => t('Restrict the view to only revisions that are the latest revision of their entity.'),
+        'filter' => ['id' => 'latest_revision'],
+      ];
+    }
+  }
+
+  /**
+   * Gets the table of an entity type to be used as revision table in views.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type.
+   *
+   * @return string
+   *   The revision base table.
+   */
+  protected function getRevisionViewsTableForEntityType(EntityTypeInterface $entity_type) {
+    return $entity_type->getRevisionDataTable() ?: $entity_type->getRevisionTable();
+  }
+
 }
diff --git a/core/modules/content_moderation/tests/modules/content_moderation_test_views/config/install/views.view.test_content_moderation_latest_revision.yml b/core/modules/content_moderation/tests/modules/content_moderation_test_views/config/install/views.view.test_content_moderation_latest_revision.yml
new file mode 100644
index 0000000000..4727efa28d
--- /dev/null
+++ b/core/modules/content_moderation/tests/modules/content_moderation_test_views/config/install/views.view.test_content_moderation_latest_revision.yml
@@ -0,0 +1,447 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - node
+    - user
+id: test_content_moderation_latest_revision
+label: test_content_moderation_latest_revision
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: tag
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: false
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: mini
+        options:
+          items_per_page: 10
+          offset: 0
+          id: 0
+          total_pages: null
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 25, 50'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          tags:
+            previous: ‹‹
+            next: ››
+      style:
+        type: default
+        options:
+          grouping: {  }
+          row_class: ''
+          default_row_class: true
+          uses_fields: false
+      row:
+        type: fields
+        options:
+          inline: {  }
+          separator: ''
+          hide_empty: false
+          default_field_elements: true
+      fields:
+        nid:
+          id: nid
+          table: node_field_data
+          field: nid
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: number_integer
+          settings:
+            thousand_separator: ''
+            prefix_suffix: true
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: node
+          entity_field: nid
+          plugin_id: field
+        revision_id:
+          id: revision_id
+          table: content_revision_tracker
+          field: revision_id
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          plugin_id: standard
+        title:
+          id: title
+          table: node_field_revision
+          field: title
+          relationship: latest_revision__node
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: string
+          settings:
+            link_to_entity: false
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: node
+          entity_field: title
+          plugin_id: field
+        moderation_state:
+          id: moderation_state
+          table: content_moderation_state_field_revision
+          field: moderation_state
+          relationship: moderation_state
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: target_id
+          type: string
+          settings: {  }
+          group_column: target_id
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: content_moderation_state
+          entity_field: moderation_state
+          plugin_id: field
+        moderation_state_1:
+          id: moderation_state_1
+          table: content_moderation_state_field_revision
+          field: moderation_state
+          relationship: moderation_state_1
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: target_id
+          type: string
+          settings: {  }
+          group_column: target_id
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: content_moderation_state
+          entity_field: moderation_state
+          plugin_id: field
+      filters: {  }
+      sorts:
+        nid:
+          id: nid
+          table: node_field_data
+          field: nid
+          relationship: none
+          group_type: group
+          admin_label: ''
+          order: ASC
+          exposed: false
+          expose:
+            label: ''
+          entity_type: node
+          entity_field: nid
+          plugin_id: standard
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships:
+        latest_revision__node:
+          id: latest_revision__node
+          table: content_revision_tracker
+          field: latest_revision__node
+          relationship: none
+          group_type: group
+          admin_label: 'Content latest revision'
+          required: false
+          plugin_id: standard
+        moderation_state_1:
+          id: moderation_state_1
+          table: node_field_revision
+          field: moderation_state
+          relationship: latest_revision__node
+          group_type: group
+          admin_label: 'Content moderation state (latest revision)'
+          required: false
+          entity_type: node
+          plugin_id: standard
+        moderation_state:
+          id: moderation_state
+          table: node_field_revision
+          field: moderation_state
+          relationship: none
+          group_type: group
+          admin_label: 'Content moderation state'
+          required: false
+          entity_type: node
+          plugin_id: standard
+      arguments: {  }
+      display_extenders: {  }
+      rendering_language: '***LANGUAGE_entity_default***'
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - url.query_args
+        - 'user.node_grants:view'
+        - user.permissions
+      tags: {  }
diff --git a/core/modules/content_moderation/tests/src/Functional/ContentModerationWorkflowTypeTest.php b/core/modules/content_moderation/tests/src/Functional/ContentModerationWorkflowTypeTest.php
index 195718a6fe..86c658d41e 100644
--- a/core/modules/content_moderation/tests/src/Functional/ContentModerationWorkflowTypeTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/ContentModerationWorkflowTypeTest.php
@@ -36,27 +36,22 @@ protected function setUp() {
    * Test creating a new workflow using the content moderation plugin.
    */
   public function testNewWorkflow() {
-    $types[] = $this->createContentType();
-    $types[] = $this->createContentType();
-    $types[] = $this->createContentType();
-
     $entity_bundle_info = \Drupal::service('entity_type.bundle.info');
 
     $this->drupalPostForm('admin/config/workflow/workflows/add', [
-      'label' => 'Test',
-      'id' => 'test',
+      'label' => 'Test Workflow',
+      'id' => 'test_workflow',
       'workflow_type' => 'content_moderation',
     ], 'Save');
 
-    $session = $this->assertSession();
     // Make sure the test workflow includes the default states and transitions.
-    $session->pageTextContains('Draft');
-    $session->pageTextContains('Published');
-    $session->pageTextContains('Create New Draft');
-    $session->pageTextContains('Publish');
+    $this->assertSession()->pageTextContains('Draft');
+    $this->assertSession()->pageTextContains('Published');
+    $this->assertSession()->pageTextContains('Create New Draft');
+    $this->assertSession()->pageTextContains('Publish');
 
-    $session->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test/state/draft/delete');
-    $session->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test/state/published/delete');
+    $this->assertSession()->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test_workflow/state/draft/delete');
+    $this->assertSession()->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test_workflow/state/published/delete');
 
     // Ensure after a workflow is created, the bundle information can be
     // refreshed.
@@ -70,32 +65,26 @@ public function testNewWorkflow() {
       'type_settings[published]' => TRUE,
       'type_settings[default_revision]' => FALSE,
     ], 'Save');
-    $session->pageTextContains('Created Test State state.');
-    $session->linkByHrefExists('/admin/config/workflow/workflows/manage/test/state/test_state/delete');
+    $this->assertSession()->pageTextContains('Created Test State state.');
+    $this->assertSession()->linkByHrefExists('/admin/config/workflow/workflows/manage/test_workflow/state/test_state/delete');
 
     // Check there is a link to delete a default transition.
-    $session->linkByHrefExists('/admin/config/workflow/workflows/manage/test/transition/publish/delete');
+    $this->assertSession()->linkByHrefExists('/admin/config/workflow/workflows/manage/test_workflow/transition/publish/delete');
     // Delete the transition.
-    $this->drupalGet('/admin/config/workflow/workflows/manage/test/transition/publish/delete');
+    $this->drupalGet('/admin/config/workflow/workflows/manage/test_workflow/transition/publish/delete');
     $this->submitForm([], 'Delete');
     // The link to delete the transition should now be gone.
-    $session->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test/transition/publish/delete');
+    $this->assertSession()->linkByHrefNotExists('/admin/config/workflow/workflows/manage/test_workflow/transition/publish/delete');
 
     // Ensure that the published settings cannot be changed.
-    $this->drupalGet('admin/config/workflow/workflows/manage/test/state/published');
-    $session->fieldDisabled('type_settings[published]');
-    $session->fieldDisabled('type_settings[default_revision]');
+    $this->drupalGet('admin/config/workflow/workflows/manage/test_workflow/state/published');
+    $this->assertSession()->fieldDisabled('type_settings[published]');
+    $this->assertSession()->fieldDisabled('type_settings[default_revision]');
 
     // Ensure that the draft settings cannot be changed.
-    $this->drupalGet('admin/config/workflow/workflows/manage/test/state/draft');
-    $session->fieldDisabled('type_settings[published]');
-    $session->fieldDisabled('type_settings[default_revision]');
-
-    $this->drupalGet('admin/config/workflow/workflows/manage/test/type/node');
-    $session->pageTextContains('Select the content type entities for the Test workflow');
-    foreach ($types as $type) {
-      $session->pageTextContains($type->label());
-    }
+    $this->drupalGet('admin/config/workflow/workflows/manage/test_workflow/state/draft');
+    $this->assertSession()->fieldDisabled('type_settings[published]');
+    $this->assertSession()->fieldDisabled('type_settings[default_revision]');
   }
 
 }
diff --git a/core/modules/content_moderation/tests/src/Functional/LatestRevisionViewsFilterTest.php b/core/modules/content_moderation/tests/src/Functional/LatestRevisionViewsFilterTest.php
new file mode 100644
index 0000000000..cf14b23297
--- /dev/null
+++ b/core/modules/content_moderation/tests/src/Functional/LatestRevisionViewsFilterTest.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace Drupal\Tests\content_moderation\Functional;
+
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\workflows\Entity\Workflow;
+
+/**
+ * Tests the "Latest Revision" views filter.
+ *
+ * @group content_moderation
+ */
+class LatestRevisionViewsFilterTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'content_moderation_test_views',
+    'content_moderation',
+  ];
+
+  /**
+   * Tests view shows the correct node IDs.
+   */
+  public function testViewShowsCorrectNids() {
+    $this->createNodeType('Test', 'test');
+
+    $permissions = [
+      'access content',
+      'view all revisions',
+    ];
+    $editor1 = $this->drupalCreateUser($permissions);
+
+    $this->drupalLogin($editor1);
+
+    // Make a pre-moderation node.
+    /** @var Node $node_0 */
+    $node_0 = Node::create([
+      'type' => 'test',
+      'title' => 'Node 0 - Rev 1',
+      'uid' => $editor1->id(),
+    ]);
+    $node_0->save();
+
+    // Now enable moderation for subsequent nodes.
+    $workflow = Workflow::load('editorial');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'test');
+    $workflow->save();
+
+    // Make a node that is only ever in Draft.
+    /** @var Node $node_1 */
+    $node_1 = Node::create([
+      'type' => 'test',
+      'title' => 'Node 1 - Rev 1',
+      'uid' => $editor1->id(),
+    ]);
+    $node_1->moderation_state->value = 'draft';
+    $node_1->save();
+
+    // Make a node that is in Draft, then Published.
+    /** @var Node $node_2 */
+    $node_2 = Node::create([
+      'type' => 'test',
+      'title' => 'Node 2 - Rev 1',
+      'uid' => $editor1->id(),
+    ]);
+    $node_2->moderation_state->value = 'draft';
+    $node_2->save();
+
+    $node_2->setTitle('Node 2 - Rev 2');
+    $node_2->moderation_state->value = 'published';
+    $node_2->save();
+
+    // Make a node that is in Draft, then Published, then Draft.
+    /** @var Node $node_3 */
+    $node_3 = Node::create([
+      'type' => 'test',
+      'title' => 'Node 3 - Rev 1',
+      'uid' => $editor1->id(),
+    ]);
+    $node_3->moderation_state->value = 'draft';
+    $node_3->save();
+
+    $node_3->setTitle('Node 3 - Rev 2');
+    $node_3->moderation_state->value = 'published';
+    $node_3->save();
+
+    $node_3->setTitle('Node 3 - Rev 3');
+    $node_3->moderation_state->value = 'draft';
+    $node_3->save();
+
+    // Now show the View, and confirm that only the correct titles are showing.
+    $this->drupalGet('/latest');
+    $page = $this->getSession()->getPage();
+    $this->assertEquals(200, $this->getSession()->getStatusCode());
+    $this->assertTrue($page->hasContent('Node 1 - Rev 1'));
+    $this->assertTrue($page->hasContent('Node 2 - Rev 2'));
+    $this->assertTrue($page->hasContent('Node 3 - Rev 3'));
+    $this->assertFalse($page->hasContent('Node 2 - Rev 1'));
+    $this->assertFalse($page->hasContent('Node 3 - Rev 1'));
+    $this->assertFalse($page->hasContent('Node 3 - Rev 2'));
+    $this->assertFalse($page->hasContent('Node 0 - Rev 1'));
+  }
+
+  /**
+   * Creates a new node type.
+   *
+   * @param string $label
+   *   The human-readable label of the type to create.
+   * @param string $machine_name
+   *   The machine name of the type to create.
+   *
+   * @return NodeType
+   *   The node type just created.
+   */
+  protected function createNodeType($label, $machine_name) {
+    /** @var NodeType $node_type */
+    $node_type = NodeType::create([
+      'type' => $machine_name,
+      'label' => $label,
+    ]);
+    $node_type->save();
+
+    return $node_type;
+  }
+
+}
diff --git a/core/modules/content_moderation/tests/src/Functional/ModerationFormTest.php b/core/modules/content_moderation/tests/src/Functional/ModerationFormTest.php
index 326eb7cc97..a284b5ab65 100644
--- a/core/modules/content_moderation/tests/src/Functional/ModerationFormTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/ModerationFormTest.php
@@ -483,10 +483,6 @@ public function testWorkflowInUse() {
       'archived_state' => 'admin/config/workflow/workflows/manage/editorial/state/archived/delete',
       'editorial_workflow' => 'admin/config/workflow/workflows/manage/editorial/delete',
     ];
-    $messages = [
-      'archived_state' => 'This workflow state is in use. You cannot remove this workflow state until you have removed all content using it.',
-      'editorial_workflow' => 'This workflow is in use. You cannot remove this workflow until you have removed all content using it.',
-    ];
     foreach ($paths as $path) {
       $this->drupalGet($path);
       $this->assertSession()->buttonExists('Delete');
@@ -505,8 +501,6 @@ public function testWorkflowInUse() {
     // The workflow is being used, so can't be deleted.
     $this->drupalGet($paths['editorial_workflow']);
     $this->assertSession()->buttonNotExists('Delete');
-    $this->assertSession()->statusCodeEquals(200);
-    $this->assertSession()->pageTextContains($messages['editorial_workflow']);
 
     $node = $this->drupalGetNodeByTitle('Some moderated content');
     $this->drupalPostForm('node/' . $node->id() . '/edit', [
@@ -517,11 +511,9 @@ public function testWorkflowInUse() {
     ], 'Save');
 
     // Now the archived state is being used so it can not be deleted either.
-    foreach ($paths as $type => $path) {
+    foreach ($paths as $path) {
       $this->drupalGet($path);
       $this->assertSession()->buttonNotExists('Delete');
-      $this->assertSession()->statusCodeEquals(200);
-      $this->assertSession()->pageTextContains($messages[$type]);
     }
   }
 
diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php
index f17e4ac83c..5acf93c7a8 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationPermissionsTest.php
@@ -58,10 +58,10 @@ public function permissionsTestCases() {
         ],
         [
           'use simple_workflow transition publish' => [
-            'title' => '<em class="placeholder">Simple Workflow</em> workflow: Use <em class="placeholder">Publish</em> transition.',
+            'title' => 'Use <em class="placeholder">Publish</em> transition from <em class="placeholder">Simple Workflow</em> workflow.',
           ],
           'use simple_workflow transition create_new_draft' => [
-            'title' => '<em class="placeholder">Simple Workflow</em> workflow: Use <em class="placeholder">Create New Draft</em> transition.',
+            'title' => 'Use <em class="placeholder">Create New Draft</em> transition from <em class="placeholder">Simple Workflow</em> workflow.',
           ],
         ],
       ],
diff --git a/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php b/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
index 84bade4578..274e8b525d 100644
--- a/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
@@ -83,7 +83,6 @@ public function testMultilingual() {
     $this->assertEquals('draft', $english_node->moderation_state->value);
     $this->assertFalse($english_node->isPublished());
     $this->assertTrue($english_node->isDefaultRevision());
-    $this->assertModerationState($english_node->getRevisionId(), $english_node->language()->getId(), 'draft');
 
     // Revision 2 (fr)
     $french_node = $english_node->addTranslation('fr', ['title' => 'French title']);
@@ -91,7 +90,6 @@ public function testMultilingual() {
     $french_node->save();
     $this->assertTrue($french_node->isPublished());
     $this->assertTrue($french_node->isDefaultRevision());
-    $this->assertModerationState($french_node->getRevisionId(), $french_node->language()->getId(), 'published');
 
     // Revision 3 (fr)
     $node = Node::load($english_node->id())->getTranslation('fr');
@@ -99,7 +97,6 @@ public function testMultilingual() {
     $node->save();
     $this->assertFalse($node->isPublished());
     $this->assertFalse($node->isDefaultRevision());
-    $this->assertModerationState($node->getRevisionId(), $node->language()->getId(), 'draft');
 
     // Revision 4 (en)
     $latest_revision = $this->entityTypeManager->getStorage('node')->loadRevision(3);
@@ -107,36 +104,6 @@ public function testMultilingual() {
     $latest_revision->save();
     $this->assertFalse($latest_revision->isPublished());
     $this->assertFalse($latest_revision->isDefaultRevision());
-    $this->assertModerationState($latest_revision->getRevisionId(), $latest_revision->language()->getId(), 'draft');
-  }
-
-  /**
-   * Verifies the expected moderation state revision exists.
-   *
-   * @param int $revision_id
-   *   The revision ID of the host entity.
-   * @param string $langcode
-   *   The language code of the host entity to check.
-   * @param string $expected_state
-   *   The state the content moderation state revision should be in.
-   * @param string $expected_workflow
-   *   The workflow the content moderation state revision should be using.
-   */
-  protected function assertModerationState($revision_id, $langcode, $expected_state, $expected_workflow = 'editorial') {
-    $moderation_state_storage = $this->entityTypeManager->getStorage('content_moderation_state');
-
-    $query = $moderation_state_storage->getQuery();
-    $results = $query->allRevisions()
-      ->condition('content_entity_revision_id', $revision_id)
-      ->condition('langcode', $langcode)
-      ->execute();
-    $this->assertCount(1, $results);
-
-    $moderation_state = $moderation_state_storage
-      ->loadRevision(key($results))
-      ->getTranslation($langcode);
-    $this->assertEquals($expected_state, $moderation_state->get('moderation_state')->value);
-    $this->assertEquals($expected_workflow, $moderation_state->get('workflow')->target_id);
   }
 
 }
diff --git a/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php b/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php
index 3deaffa98e..6f209d13ae 100644
--- a/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\content_moderation\Kernel;
 
 use Drupal\entity_test\Entity\EntityTest;
-use Drupal\entity_test\Entity\EntityTestRev;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
@@ -24,20 +23,6 @@ class EntityRevisionConverterTest extends KernelTestBase {
     'workflows',
   ];
 
-  /**
-   * The entity type manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * The router without access checks.
-   *
-   * @var \Symfony\Component\Routing\RouterInterface
-   */
-  protected $router;
-
   /**
    * {@inheritdoc}
    */
@@ -45,18 +30,13 @@ protected function setUp() {
     parent::setUp();
 
     $this->installEntitySchema('entity_test');
-    $this->installEntitySchema('entity_test_rev');
     $this->installEntitySchema('node');
     $this->installEntitySchema('user');
     $this->installEntitySchema('content_moderation_state');
     $this->installSchema('system', 'router');
     $this->installSchema('system', 'sequences');
     $this->installSchema('node', 'node_access');
-    $this->installConfig(['content_moderation']);
     \Drupal::service('router.builder')->rebuild();
-
-    $this->entityTypeManager = $this->container->get('entity_type.manager');
-    $this->router = $this->container->get('router.no_access_checks');
   }
 
   /**
@@ -69,43 +49,19 @@ public function testConvertNonRevisionableEntityType() {
 
     $entity_test->save();
 
-    $result = $this->router->match('/entity_test/' . $entity_test->id());
+    /** @var \Symfony\Component\Routing\RouterInterface $router */
+    $router = \Drupal::service('router.no_access_checks');
+    $result = $router->match('/entity_test/' . $entity_test->id());
 
     $this->assertInstanceOf(EntityTest::class, $result['entity_test']);
     $this->assertEquals($entity_test->getRevisionId(), $result['entity_test']->getRevisionId());
   }
 
-  /**
-   * @covers ::applies
-   */
-  public function testConvertNoEditFormHandler() {
-    $workflow = Workflow::load('editorial');
-    $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_rev', 'entity_test_rev');
-    $workflow->save();
-
-    $entity_test_rev = EntityTestRev::create([
-      'name' => 'Default Revision',
-      'moderation_state' => 'published',
-    ]);
-    $entity_test_rev->save();
-
-    $entity_test_rev->name = 'Pending revision';
-    $entity_test_rev->moderation_state = 'draft';
-    $entity_test_rev->save();
-
-    // Ensure the entity type does not provide an explicit 'edit' form class.
-    $definition = $this->entityTypeManager->getDefinition($entity_test_rev->getEntityTypeId());
-    $this->assertNull($definition->getFormClass('edit'));
-
-    // Ensure the revision converter is invoked for the edit route.
-    $result = $this->router->match("/entity_test_rev/manage/{$entity_test_rev->id()}/edit");
-    $this->assertEquals($entity_test_rev->getRevisionId(), $result['entity_test_rev']->getRevisionId());
-  }
-
   /**
    * @covers ::convert
    */
   public function testConvertWithRevisionableEntityType() {
+    $this->installConfig(['content_moderation']);
     $node_type = NodeType::create([
       'type' => 'article',
     ]);
@@ -133,7 +89,9 @@ public function testConvertWithRevisionableEntityType() {
     $node->save();
     $revision_ids[] = $node->getRevisionId();
 
-    $result = $this->router->match('/node/' . $node->id() . '/edit');
+    /** @var \Symfony\Component\Routing\RouterInterface $router */
+    $router = \Drupal::service('router.no_access_checks');
+    $result = $router->match('/node/' . $node->id() . '/edit');
 
     $this->assertInstanceOf(Node::class, $result['node']);
     $this->assertEquals($revision_ids[2], $result['node']->getRevisionId());
diff --git a/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php b/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
index 125d68fbd2..d4c4aa37cd 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ViewsDataIntegrationTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\content_moderation\Kernel;
 
+use Drupal\entity_test\Entity\EntityTestMulRevPub;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
@@ -50,6 +51,54 @@ protected function setUp($import_test_views = TRUE) {
     $workflow->save();
   }
 
+  /**
+   * Tests content_moderation_views_data().
+   *
+   * @see content_moderation_views_data()
+   */
+  public function testViewsData() {
+    $node = Node::create([
+      'type' => 'page',
+      'title' => 'Test title first revision',
+    ]);
+    $node->moderation_state->value = 'published';
+    $node->save();
+
+    // Create a totally unrelated entity to ensure the extra join information
+    // joins by the correct entity type.
+    $unrelated_entity = EntityTestMulRevPub::create([
+      'id' => $node->id(),
+    ]);
+    $unrelated_entity->save();
+
+    $this->assertEquals($unrelated_entity->id(), $node->id());
+
+    $revision = clone $node;
+    $revision->setNewRevision(TRUE);
+    $revision->isDefaultRevision(FALSE);
+    $revision->title->value = 'Test title second revision';
+    $revision->moderation_state->value = 'draft';
+    $revision->save();
+
+    $view = Views::getView('test_content_moderation_latest_revision');
+    $view->execute();
+
+    // Ensure that the content_revision_tracker contains the right latest
+    // revision ID.
+    // Also ensure that the relationship back to the revision table contains the
+    // right latest revision.
+    $expected_result = [
+      [
+        'nid' => $node->id(),
+        'revision_id' => $revision->getRevisionId(),
+        'title' => $revision->label(),
+        'moderation_state_1' => 'draft',
+        'moderation_state' => 'published',
+      ],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, ['nid' => 'nid', 'content_revision_tracker_revision_id' => 'revision_id', 'moderation_state' => 'moderation_state', 'moderation_state_1' => 'moderation_state_1']);
+  }
+
   /**
    * Tests the join from the revision data table to the moderation state table.
    */
diff --git a/core/modules/content_translation/content_translation.install b/core/modules/content_translation/content_translation.install
index 0e47270092..67b161c5e2 100644
--- a/core/modules/content_translation/content_translation.install
+++ b/core/modules/content_translation/content_translation.install
@@ -5,9 +5,9 @@
  * Installation functions for Content Translation module.
  */
 
-use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
-use Drupal\Core\Language\LanguageInterface;
-use Drupal\Core\Url;
+use \Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
+use \Drupal\Core\Language\LanguageInterface;
+use \Drupal\Core\Url;
 
 /**
  * Implements hook_install().
@@ -59,7 +59,6 @@ function content_translation_update_8400() {
   $entity_type_manager = \Drupal::entityTypeManager();
   $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
 
-  $entity_type_manager->clearCachedDefinitions();
   foreach ($content_translation_manager->getSupportedEntityTypes() as $entity_type_id => $entity_type_definition) {
     $storage = $entity_type_manager->getStorage($entity_type_id);
     if ($storage instanceof SqlEntityStorageInterface) {
diff --git a/core/modules/content_translation/src/Controller/ContentTranslationController.php b/core/modules/content_translation/src/Controller/ContentTranslationController.php
index 190778d42c..c18eab395a 100644
--- a/core/modules/content_translation/src/Controller/ContentTranslationController.php
+++ b/core/modules/content_translation/src/Controller/ContentTranslationController.php
@@ -196,16 +196,14 @@ public function overview(RouteMatchInterface $route_match, $entity_type_id = NUL
           if (isset($links['edit'])) {
             $links['edit']['title'] = $this->t('Edit');
           }
-          $status = [
-            'data' => [
-              '#type' => 'inline_template',
-              '#template' => '<span class="status">{% if status %}{{ "Published"|t }}{% else %}{{ "Not published"|t }}{% endif %}</span>{% if outdated %} <span class="marker">{{ "outdated"|t }}</span>{% endif %}',
-              '#context' => [
-                'status' => $metadata->isPublished(),
-                'outdated' => $metadata->isOutdated(),
-              ],
+          $status = ['data' => [
+            '#type' => 'inline_template',
+            '#template' => '<span class="status">{% if status %}{{ "Published"|t }}{% else %}{{ "Not published"|t }}{% endif %}</span>{% if outdated %} <span class="marker">{{ "outdated"|t }}</span>{% endif %}',
+            '#context' => [
+              'status' => $metadata->isPublished(),
+              'outdated' => $metadata->isOutdated(),
             ],
-          ];
+          ]];
 
           if ($is_original) {
             $language_name = $this->t('<strong>@language_name (Original language)</strong>', ['@language_name' => $language_name]);
diff --git a/core/modules/content_translation/tests/src/Functional/Update/ContentTranslationUpdateTest.php b/core/modules/content_translation/src/Tests/Update/ContentTranslationUpdateTest.php
similarity index 91%
rename from core/modules/content_translation/tests/src/Functional/Update/ContentTranslationUpdateTest.php
rename to core/modules/content_translation/src/Tests/Update/ContentTranslationUpdateTest.php
index 25be0def24..85b952c35b 100644
--- a/core/modules/content_translation/tests/src/Functional/Update/ContentTranslationUpdateTest.php
+++ b/core/modules/content_translation/src/Tests/Update/ContentTranslationUpdateTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\content_translation\Functional\Update;
+namespace Drupal\content_translation\Tests\Update;
 
 use Drupal\Core\Language\LanguageInterface;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\system\Tests\Entity\EntityDefinitionTestTrait;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the upgrade path for the Content Translation module.
@@ -60,7 +60,7 @@ protected function setUp() {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
     ];
   }
 
diff --git a/core/modules/content_translation/tests/modules/content_translation_test/content_translation_test.module b/core/modules/content_translation/tests/modules/content_translation_test/content_translation_test.module
index e2318079c9..d07549da0b 100644
--- a/core/modules/content_translation/tests/modules/content_translation_test/content_translation_test.module
+++ b/core/modules/content_translation/tests/modules/content_translation_test/content_translation_test.module
@@ -5,7 +5,7 @@
  * Helper module for the Content Translation tests.
  */
 
-use Drupal\Core\Form\FormStateInterface;
+use \Drupal\Core\Form\FormStateInterface;
 
 /**
  * Implements hook_form_BASE_FORM_ID_alter().
diff --git a/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php b/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php
index e88d9acc76..30228076ac 100644
--- a/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php
+++ b/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php
@@ -181,21 +181,13 @@ public function testMultipleSyncedValues() {
     // their delta.
     $delta_callbacks = [
       // Continuous field values: all values are equal.
-      function($delta) {
-        return TRUE;
-      },
+      function($delta) { return TRUE; },
       // Alternated field values: only the even ones are equal.
-      function($delta) {
-        return $delta % 2 !== 0;
-      },
+      function($delta) { return $delta % 2 !== 0; },
       // Sparse field values: only the "middle" ones are equal.
-      function($delta) {
-        return $delta === 1 || $delta === 2;
-      },
+      function($delta) { return $delta === 1 || $delta === 2; },
       // Sparse field values: only the "extreme" ones are equal.
-      function($delta) {
-        return $delta === 0 || $delta === 3;
-      },
+      function($delta) { return $delta === 0 || $delta === 3; },
     ];
 
     foreach ($delta_callbacks as $delta_callback) {
diff --git a/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php b/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php
index f6c14cb985..a72d9b7ff6 100644
--- a/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php
+++ b/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php
@@ -49,30 +49,20 @@ public function testBlockAdminDisplay($route, $expected) {
    */
   public function providerTestBlockAdminDisplay() {
     return [
-      [
+      ['entity.node.canonical', [[
+        'content_translation.local_tasks:entity.node.content_translation_overview',
         'entity.node.canonical',
-        [
-          [
-            'content_translation.local_tasks:entity.node.content_translation_overview',
-            'entity.node.canonical',
-            'entity.node.edit_form',
-            'entity.node.delete_form',
-            'entity.node.version_history',
-          ],
-        ],
-      ],
-      [
-        'entity.node.content_translation_overview',
-        [
-          [
-            'content_translation.local_tasks:entity.node.content_translation_overview',
-            'entity.node.canonical',
-            'entity.node.edit_form',
-            'entity.node.delete_form',
-            'entity.node.version_history',
-          ],
-        ],
-      ],
+        'entity.node.edit_form',
+        'entity.node.delete_form',
+        'entity.node.version_history',
+      ]]],
+      ['entity.node.content_translation_overview', [[
+        'content_translation.local_tasks:entity.node.content_translation_overview',
+        'entity.node.canonical',
+        'entity.node.edit_form',
+        'entity.node.delete_form',
+        'entity.node.version_history',
+      ]]],
     ];
   }
 
diff --git a/core/modules/contextual/src/ContextualController.php b/core/modules/contextual/src/ContextualController.php
index 59a2ba0f95..0451a10e21 100644
--- a/core/modules/contextual/src/ContextualController.php
+++ b/core/modules/contextual/src/ContextualController.php
@@ -24,7 +24,7 @@ class ContextualController implements ContainerInjectionInterface {
    * Constructors a new ContextualController
    *
    * @param \Drupal\Core\Render\RendererInterface $renderer
-   *   The renderer.
+   *    The renderer.
    */
   public function __construct(RendererInterface $renderer) {
     $this->renderer = $renderer;
diff --git a/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php b/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
index de30f5c424..09e4505953 100644
--- a/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
+++ b/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
@@ -148,6 +148,6 @@ public function render(ResultRow $values) {
   /**
    * {@inheritdoc}
    */
-  public function query() {}
+  public function query() { }
 
 }
diff --git a/core/modules/contextual/tests/modules/contextual_test/contextual_test.info.yml b/core/modules/contextual/tests/modules/contextual_test/contextual_test.info.yml
deleted file mode 100644
index 1d8d4d5549..0000000000
--- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.info.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-name: 'Contextual Test'
-type: module
-description: 'Provides test contextual links.'
-package: Testing
-version: VERSION
-core: 8.x
-dependencies:
-  - contextual
diff --git a/core/modules/contextual/tests/modules/contextual_test/contextual_test.links.contextual.yml b/core/modules/contextual/tests/modules/contextual_test/contextual_test.links.contextual.yml
deleted file mode 100644
index 35e03b7333..0000000000
--- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.links.contextual.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-contextual_test:
-  title: 'Test Link'
-  route_name: 'contextual_test'
-  group: 'contextual_test'
diff --git a/core/modules/contextual/tests/modules/contextual_test/contextual_test.module b/core/modules/contextual/tests/modules/contextual_test/contextual_test.module
deleted file mode 100644
index b8f2e60f51..0000000000
--- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.module
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides test contextual link on blocks.
- */
-
-use Drupal\Core\Block\BlockPluginInterface;
-
-/**
- * Implements hook_block_view_alter().
- */
-function contextual_test_block_view_alter(array &$build, BlockPluginInterface $block) {
-  $build['#contextual_links']['contextual_test'] = [
-    'route_parameters' => [],
-  ];
-}
diff --git a/core/modules/contextual/tests/modules/contextual_test/contextual_test.routing.yml b/core/modules/contextual/tests/modules/contextual_test/contextual_test.routing.yml
deleted file mode 100644
index 78ca61da6e..0000000000
--- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.routing.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-contextual_test:
-  path: '/contextual-tests'
-  defaults:
-    _controller: '\Drupal\contextual_test\Controller\TestController::render'
-  requirements:
-    _access: 'TRUE'
diff --git a/core/modules/contextual/tests/modules/contextual_test/src/Controller/TestController.php b/core/modules/contextual/tests/modules/contextual_test/src/Controller/TestController.php
deleted file mode 100644
index 099f00c51a..0000000000
--- a/core/modules/contextual/tests/modules/contextual_test/src/Controller/TestController.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Drupal\contextual_test\Controller;
-
-/**
- * Test controller to provide a callback for the contextual link.
- */
-class TestController {
-
-  /**
-   * Callback for the contextual link.
-   *
-   * @return array
-   *   Render array.
-   */
-  public function render() {
-    return [
-      '#type' => 'markup',
-      '#markup' => 'Everything is contextual!',
-    ];
-  }
-
-}
diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinkClickTrait.php b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinkClickTrait.php
deleted file mode 100644
index 2866e91cbf..0000000000
--- a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinkClickTrait.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace Drupal\Tests\contextual\FunctionalJavascript;
-
-/**
- * Functions for testing contextual links.
- */
-trait ContextualLinkClickTrait {
-
-  /**
-   * Clicks a contextual link.
-   *
-   * @param string $selector
-   *   The selector for the element that contains the contextual link.
-   * @param string $link_locator
-   *   The link id, title, or text.
-   * @param bool $force_visible
-   *   If true then the button will be forced to visible so it can be clicked.
-   */
-  protected function clickContextualLink($selector, $link_locator, $force_visible = TRUE) {
-    if ($force_visible) {
-      $this->toggleContextualTriggerVisibility($selector);
-    }
-
-    $element = $this->getSession()->getPage()->find('css', $selector);
-    $element->find('css', '.contextual button')->press();
-    $element->findLink($link_locator)->click();
-
-    if ($force_visible) {
-      $this->toggleContextualTriggerVisibility($selector);
-    }
-  }
-
-  /**
-   * Toggles the visibility of a contextual trigger.
-   *
-   * @param string $selector
-   *   The selector for the element that contains the contextual link.
-   */
-  protected function toggleContextualTriggerVisibility($selector) {
-    // Hovering over the element itself with should be enough, but does not
-    // work. Manually remove the visually-hidden class.
-    $this->getSession()->executeScript("jQuery('{$selector} .contextual .trigger').toggleClass('visually-hidden');");
-  }
-
-}
diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php
index a24d2bae59..12ce10db8b 100644
--- a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php
+++ b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php
@@ -12,8 +12,6 @@
  */
 class ContextualLinksTest extends JavascriptTestBase {
 
-  use ContextualLinkClickTrait;
-
   /**
    * {@inheritdoc}
    */
@@ -25,7 +23,6 @@ class ContextualLinksTest extends JavascriptTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->drupalLogin($this->createUser(['access contextual links']));
     $this->placeBlock('system_branding_block', ['id' => 'branding']);
   }
 
@@ -33,6 +30,10 @@ protected function setUp() {
    * Tests the visibility of contextual links.
    */
   public function testContextualLinksVisibility() {
+    $this->drupalLogin($this->drupalCreateUser([
+      'access contextual links'
+    ]));
+
     $this->drupalGet('user');
     $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button');
     $this->assertEmpty($contextualLinks);
@@ -58,27 +59,4 @@ public function testContextualLinksVisibility() {
     $this->assertNotEmpty($contextualLinks);
   }
 
-  /**
-   * Test clicking contextual links.
-   */
-  public function testContextualLinksClick() {
-    $this->container->get('module_installer')->install(['contextual_test']);
-    // Test clicking contextual link without toolbar.
-    $this->drupalGet('user');
-    $this->assertSession()->assertWaitOnAjaxRequest();
-    $this->clickContextualLink('#block-branding', 'Test Link');
-    $this->assertSession()->pageTextContains('Everything is contextual!');
-
-    // Test clicking contextual link with toolbar.
-    $this->container->get('module_installer')->install(['toolbar']);
-    $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), ['access toolbar']);
-    $this->drupalGet('user');
-    $this->assertSession()->assertWaitOnAjaxRequest();
-
-    // Click "Edit" in toolbar to show contextual links.
-    $this->getSession()->getPage()->find('css', '.contextual-toolbar-tab button')->press();
-    $this->clickContextualLink('#block-branding', 'Test Link', FALSE);
-    $this->assertSession()->pageTextContains('Everything is contextual!');
-  }
-
 }
diff --git a/core/modules/datetime/datetime.module b/core/modules/datetime/datetime.module
index 54365a6987..bb10d13a6c 100644
--- a/core/modules/datetime/datetime.module
+++ b/core/modules/datetime/datetime.module
@@ -50,20 +50,7 @@ function datetime_help($route_name, RouteMatchInterface $route_match) {
  * same value for in both the local timezone and UTC.
  *
  * @param $date
- *
- * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use
- *   \Drupal\Component\Datetime\DateTimePlus::setDefaultDateTime() or
- *   \Drupal\Core\Datetime\DrupalDateTime::setDefaultDateTime() instead.
- *
- * @see https://www.drupal.org/node/2880931
  */
 function datetime_date_default_time($date) {
-  @trigger_error('datetime_date_default_time() is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use \Drupal\Component\Datetime\DateTimePlus::setDefaultDateTime() or \Drupal\Core\Datetime\DrupalDateTime::setDefaultDateTime() instead. See https://www.drupal.org/node/2880931.', E_USER_DEPRECATED);
-
-  // For maximum BC before this method is removed, we do not use the
-  // recommendation from the deprecation method. Instead, we call the setTime()
-  // method directly. This allows the method to continue to work with
-  // \DateTime, DateTimePlus, and DrupalDateTime objects (and classes that
-  // may derive from them).
   $date->setTime(12, 0, 0);
 }
diff --git a/core/modules/datetime/src/DateTimeComputed.php b/core/modules/datetime/src/DateTimeComputed.php
index b4e7dc47d1..9320bafa42 100644
--- a/core/modules/datetime/src/DateTimeComputed.php
+++ b/core/modules/datetime/src/DateTimeComputed.php
@@ -56,10 +56,12 @@ public function getValue($langcode = NULL) {
         // set the time to 12:00:00 UTC for date-only fields. This is used so
         // that the local date portion is the same, across nearly all time
         // zones.
-        // @see \Drupal\Component\Datetime\DateTimePlus::setDefaultDateTime()
+        // @see datetime_date_default_time()
         // @see http://php.net/manual/en/datetime.createfromformat.php
+        // @todo Update comment and/or code per the chosen solution in
+        //   https://www.drupal.org/node/2830094
         if ($datetime_type === DateTimeItem::DATETIME_TYPE_DATE) {
-          $this->date->setDefaultDateTime();
+          $this->date->setTime(12, 0, 0);
         }
       }
     }
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
index e40b5b1265..6dbc6ca213 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
@@ -202,6 +202,10 @@ protected function getFormatSettings() {
    *   A render array.
    */
   protected function buildDate(DrupalDateTime $date) {
+    if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+      // A date without time will pick up the current time, use the default.
+      datetime_date_default_time($date);
+    }
     $this->setTimeZone($date);
 
     $build = [
@@ -226,6 +230,11 @@ protected function buildDate(DrupalDateTime $date) {
    *   A render array.
    */
   protected function buildDateWithIsoAttribute(DrupalDateTime $date) {
+    if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+      // A date without time will pick up the current time, use the default.
+      datetime_date_default_time($date);
+    }
+
     // Create the ISO date in Universal Time.
     $iso_date = $date->format("Y-m-d\TH:i:s") . 'Z';
 
diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php
index 782e1b8547..3fc3157616 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php
@@ -110,6 +110,10 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
       $date = $item->date;
       $output = [];
       if (!empty($item->date)) {
+        if ($this->getFieldSetting('datetime_type') == 'date') {
+          // A date without time will pick up the current time, use the default.
+          datetime_date_default_time($date);
+        }
         $output = $this->formatDate($date);
       }
       $elements[$delta] = $output;
diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
index 59613694ed..f965e21848 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
@@ -35,8 +35,13 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       $date = $items[$delta]->date;
       // The date was created and verified during field_load(), so it is safe to
       // use without further inspection.
+      if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+        // A date without time will pick up the current time, use the default
+        // time.
+        datetime_date_default_time($date);
+      }
       $date->setTimezone(new \DateTimeZone($element['value']['#date_timezone']));
-      $element['value']['#default_value'] = $this->createDefaultValue($date, $element['value']['#date_timezone']);
+      $element['value']['#default_value'] = $date;
     }
 
     return $element;
@@ -54,6 +59,9 @@ public function massageFormValues(array $values, array $form, FormStateInterface
         $date = $item['value'];
         switch ($this->getFieldSetting('datetime_type')) {
           case DateTimeItem::DATETIME_TYPE_DATE:
+            // If this is a date-only field, set it to the default time so the
+            // timezone conversion can be reversed.
+            datetime_date_default_time($date);
             $format = DATETIME_DATE_STORAGE_FORMAT;
             break;
 
@@ -69,28 +77,4 @@ public function massageFormValues(array $values, array $form, FormStateInterface
     return $values;
   }
 
-  /**
-   * Creates a date object for use as a default value.
-   *
-   * This will take a default value, apply the proper timezone for display in
-   * a widget, and set the default time for date-only fields.
-   *
-   * @param \Drupal\Core\Datetime\DrupalDateTime $date
-   *   The UTC default date.
-   * @param string $timezone
-   *   The timezone to apply.
-   *
-   * @return \Drupal\Core\Datetime\DrupalDateTime
-   *   A date object for use as a default value in a field widget.
-   */
-  protected function createDefaultValue($date, $timezone) {
-    // The date was created and verified during field_load(), so it is safe to
-    // use without further inspection.
-    if ($this->getFieldSetting('datetime_type') === DateTimeItem::DATETIME_TYPE_DATE) {
-      $date->setDefaultDateTime();
-    }
-    $date->setTimezone(new \DateTimeZone($timezone));
-    return $date;
-  }
-
 }
diff --git a/core/modules/datetime/src/Plugin/migrate/field/DateField.php b/core/modules/datetime/src/Plugin/migrate/field/DateField.php
index 0dd56c9acf..3a61a7846a 100644
--- a/core/modules/datetime/src/Plugin/migrate/field/DateField.php
+++ b/core/modules/datetime/src/Plugin/migrate/field/DateField.php
@@ -30,6 +30,15 @@ public function getFieldWidgetMap() {
     ];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    // See d6_field_formatter_settings.yml, d7_field_formatter_settings.yml and
+    // FieldPluginBase::processFieldFormatter().
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/datetime/src/Plugin/migrate/field/d6/DateField.php b/core/modules/datetime/src/Plugin/migrate/field/d6/DateField.php
index c4e7b4981d..a2429f6a01 100644
--- a/core/modules/datetime/src/Plugin/migrate/field/d6/DateField.php
+++ b/core/modules/datetime/src/Plugin/migrate/field/d6/DateField.php
@@ -35,6 +35,15 @@ public function getFieldWidgetMap() {
     ];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    // See d6_field_formatter_settings.yml and
+    // FieldPluginBase::processFieldFormatter().
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/datetime/src/Tests/DateTestBase.php b/core/modules/datetime/src/Tests/DateTestBase.php
index ca43b8d546..a234ae08f7 100644
--- a/core/modules/datetime/src/Tests/DateTestBase.php
+++ b/core/modules/datetime/src/Tests/DateTestBase.php
@@ -185,20 +185,4 @@ protected function setSiteTimezone($timezone) {
       ->save();
   }
 
-  /**
-   * Massages test date values.
-   *
-   * If a date object is generated directly by a test, then it needs to be
-   * adjusted to behave like the computed date from the item.
-   *
-   * @param \Drupal\Core\Datetime\DrupalDateTime $date
-   *   A date object directly generated by the test.
-   */
-  protected function massageTestDate($date) {
-    if ($this->field->getSetting('datetime_type') === DateTimeItem::DATETIME_TYPE_DATE) {
-      // Set the default time for date-only items.
-      $date->setDefaultDateTime();
-    }
-  }
-
 }
diff --git a/core/modules/datetime/tests/src/Functional/DateTestBase.php b/core/modules/datetime/tests/src/Functional/DateTestBase.php
index 21bad50ba0..9127eb25d4 100644
--- a/core/modules/datetime/tests/src/Functional/DateTestBase.php
+++ b/core/modules/datetime/tests/src/Functional/DateTestBase.php
@@ -183,20 +183,4 @@ protected function setSiteTimezone($timezone) {
       ->save();
   }
 
-  /**
-   * Massages test date values.
-   *
-   * If a date object is generated directly by a test, then it needs to be
-   * adjusted to behave like the computed date from the item.
-   *
-   * @param \Drupal\Core\Datetime\DrupalDateTime $date
-   *   A date object directly generated by the test.
-   */
-  protected function massageTestDate($date) {
-    if ($this->field->getSetting('datetime_type') === DateTimeItem::DATETIME_TYPE_DATE) {
-      // Set the default time for date-only items.
-      $date->setDefaultDateTime();
-    }
-  }
-
 }
diff --git a/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php b/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
index 6d0b6a2909..3df2582e3e 100644
--- a/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
+++ b/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
@@ -44,7 +44,6 @@ public function testDateField() {
     foreach (static::$timezones as $timezone) {
 
       $this->setSiteTimezone($timezone);
-      $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone);
 
       // Display creation form.
       $this->drupalGet('entity_test/add');
@@ -100,7 +99,7 @@ public function testDateField() {
       // Formats that display a time component for date-only fields will display
       // the default time, so that is applied before calculating the expected
       // value.
-      $this->massageTestDate($date);
+      datetime_date_default_time($date);
       foreach ($options as $setting => $values) {
         foreach ($values as $new_value) {
           // Update the entity display settings.
@@ -118,12 +117,7 @@ public function testDateField() {
               $expected_iso = format_date($date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE);
               $output = $this->renderTestEntity($id);
               $expected_markup = '<time datetime="' . $expected_iso . '" class="datetime">' . $expected . '</time>';
-              $this->assertContains($expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [
-                '%value' => $new_value,
-                '%expected' => $expected,
-                '%expected_iso' => $expected_iso,
-                '%timezone' => $timezone,
-              ]));
+              $this->assertContains($expected_markup, $output, SafeMarkup::format('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', ['%value' => $new_value, '%expected' => $expected, '%expected_iso' => $expected_iso]));
               break;
           }
         }
@@ -137,10 +131,7 @@ public function testDateField() {
         ->save();
       $expected = $date->format(DATETIME_DATE_STORAGE_FORMAT);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, SafeMarkup::format('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected]));
 
       // Verify that the 'datetime_custom' formatter works.
       $this->displayOptions['type'] = 'datetime_custom';
@@ -150,10 +141,7 @@ public function testDateField() {
         ->save();
       $expected = $date->format($this->displayOptions['settings']['date_format']);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using datetime_custom format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, SafeMarkup::format('Formatted date field using datetime_custom format displayed as %expected.', ['%expected' => $expected]));
 
       // Test that allowed markup in custom format is preserved and XSS is
       // removed.
@@ -163,10 +151,7 @@ public function testDateField() {
         ->save();
       $expected = '<strong>' . $date->format('m/d/Y') . '</strong>alert(String.fromCharCode(88,83,83))';
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected]));
 
       // Verify that the 'datetime_time_ago' formatter works for intervals in the
       // past.  First update the test entity so that the date difference always
@@ -193,10 +178,7 @@ public function testDateField() {
         '@interval' => $this->dateFormatter->formatTimeDiffSince($timestamp, ['granularity' => $this->displayOptions['settings']['granularity']])
       ]);
       $output = $this->renderTestEntity($id);
-      $this->assertContains((string) $expected, $output, new FormattableMarkup('Formatted date field using datetime_time_ago format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains((string) $expected, $output, SafeMarkup::format('Formatted date field using datetime_time_ago format displayed as %expected.', ['%expected' => $expected]));
 
       // Verify that the 'datetime_time_ago' formatter works for intervals in the
       // future.  First update the test entity so that the date difference always
@@ -217,10 +199,7 @@ public function testDateField() {
         '@interval' => $this->dateFormatter->formatTimeDiffUntil($timestamp, ['granularity' => $this->displayOptions['settings']['granularity']])
       ]);
       $output = $this->renderTestEntity($id);
-      $this->assertContains((string) $expected, $output, new FormattableMarkup('Formatted date field using datetime_time_ago format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains((string) $expected, $output, SafeMarkup::format('Formatted date field using datetime_time_ago format displayed as %expected.', ['%expected' => $expected]));
     }
   }
 
@@ -594,48 +573,35 @@ public function testDatelistWidget() {
   protected function datelistDataProvider($field_label) {
     return [
       // Nothing selected.
-      [
-        ['year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''],
-        ["The $field_label date is required."],
-      ],
+      [['year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], [
+        "The $field_label date is required.",
+      ]],
       // Year only selected, validation error on Month, Day, Hour, Minute.
-      [
-        ['year' => 2012, 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''],
-        [
-          "The $field_label date is incomplete.",
-          'A value must be selected for month.',
-          'A value must be selected for day.',
-          'A value must be selected for hour.',
-          'A value must be selected for minute.',
-        ],
-      ],
+      [['year' => 2012, 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], [
+        "The $field_label date is incomplete.",
+        'A value must be selected for month.',
+        'A value must be selected for day.',
+        'A value must be selected for hour.',
+        'A value must be selected for minute.',
+      ]],
       // Year and Month selected, validation error on Day, Hour, Minute.
-      [
-        ['year' => 2012, 'month' => '12', 'day' => '', 'hour' => '', 'minute' => ''],
-        [
-          "The $field_label date is incomplete.",
-          'A value must be selected for day.',
-          'A value must be selected for hour.',
-          'A value must be selected for minute.',
-        ],
-      ],
+      [['year' => 2012, 'month' => '12', 'day' => '', 'hour' => '', 'minute' => ''], [
+        "The $field_label date is incomplete.",
+        'A value must be selected for day.',
+        'A value must be selected for hour.',
+        'A value must be selected for minute.',
+      ]],
       // Year, Month and Day selected, validation error on Hour, Minute.
-      [
-        ['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '', 'minute' => ''],
-        [
-          "The $field_label date is incomplete.",
-          'A value must be selected for hour.',
-          'A value must be selected for minute.',
-        ],
-      ],
+      [['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '', 'minute' => ''], [
+        "The $field_label date is incomplete.",
+        'A value must be selected for hour.',
+        'A value must be selected for minute.',
+      ]],
       // Year, Month, Day and Hour selected, validation error on Minute only.
-      [
-        ['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '0', 'minute' => ''],
-        [
-          "The $field_label date is incomplete.",
-          'A value must be selected for minute.',
-        ],
-      ],
+      [['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '0', 'minute' => ''], [
+        "The $field_label date is incomplete.",
+        'A value must be selected for minute.',
+      ]],
     ];
   }
 
@@ -667,7 +633,6 @@ public function testDefaultValue() {
     foreach (static::$timezones as $timezone) {
 
       $this->setSiteTimezone($timezone);
-      $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone);
 
       // Set now as default_value.
       $field_edit = [
diff --git a/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
index 51598691d4..98840078cb 100644
--- a/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
+++ b/core/modules/datetime/tests/src/Kernel/DateTimeItemTest.php
@@ -122,34 +122,22 @@ public function testDateOnly() {
     $this->assertEqual($entity->field_datetime->value, $value);
     $this->assertEqual($entity->field_datetime[0]->value, $value);
     $this->assertEquals(DATETIME_STORAGE_TIMEZONE, $entity->field_datetime->date->getTimeZone()->getName());
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
-    $entity->field_datetime->date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
 
     // Verify changing the date value.
     $new_value = '2016-11-04';
     $entity->field_datetime->value = $new_value;
     $this->assertEqual($entity->field_datetime->value, $new_value);
     $this->assertEquals(DATETIME_STORAGE_TIMEZONE, $entity->field_datetime->date->getTimeZone()->getName());
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
-    $entity->field_datetime->date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
 
     // Read changed entity and assert changed values.
     $this->entityValidateAndSave($entity);
     $entity = EntityTest::load($id);
     $this->assertEqual($entity->field_datetime->value, $new_value);
     $this->assertEquals(DATETIME_STORAGE_TIMEZONE, $entity->field_datetime->date->getTimeZone()->getName());
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
-    $entity->field_datetime->date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
 
     // Test the generateSampleValue() method.
     $entity = EntityTest::create();
     $entity->field_datetime->generateSampleItems();
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
-    $entity->field_datetime->date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $entity->field_datetime->date->format('H:i:s'));
     $this->entityValidateAndSave($entity);
   }
 
diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
index c91adf90c4..e99374c20f 100644
--- a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
+++ b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
 use Drupal\datetime\Plugin\Field\FieldWidget\DateTimeWidgetBase;
 use Drupal\datetime_range\Plugin\Field\FieldType\DateRangeItem;
 
@@ -57,6 +58,9 @@ public function massageFormValues(array $values, array $form, FormStateInterface
         $start_date = $item['value'];
         switch ($this->getFieldSetting('datetime_type')) {
           case DateRangeItem::DATETIME_TYPE_DATE:
+            // If this is a date-only field, set it to the default time so the
+            // timezone conversion can be reversed.
+            datetime_date_default_time($start_date);
             $format = DATETIME_DATE_STORAGE_FORMAT;
             break;
 
@@ -84,6 +88,9 @@ public function massageFormValues(array $values, array $form, FormStateInterface
         $end_date = $item['end_value'];
         switch ($this->getFieldSetting('datetime_type')) {
           case DateRangeItem::DATETIME_TYPE_DATE:
+            // If this is a date-only field, set it to the default time so the
+            // timezone conversion can be reversed.
+            datetime_date_default_time($end_date);
             $format = DATETIME_DATE_STORAGE_FORMAT;
             break;
 
@@ -135,4 +142,30 @@ public function validateStartEnd(array &$element, FormStateInterface $form_state
     }
   }
 
+  /**
+   * Creates a date object for use as a default value.
+   *
+   * This will take a default value, apply the proper timezone for display in
+   * a widget, and set the default time for date-only fields.
+   *
+   * @param \Drupal\Core\Datetime\DrupalDateTime $date
+   *   The UTC default date.
+   * @param string $timezone
+   *   The timezone to apply.
+   *
+   * @return \Drupal\Core\Datetime\DrupalDateTime
+   *   A date object for use as a default value in a field widget.
+   */
+  protected function createDefaultValue($date, $timezone) {
+    // The date was created and verified during field_load(), so it is safe to
+    // use without further inspection.
+    if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) {
+      // A date without time will pick up the current time, use the default
+      // time.
+      datetime_date_default_time($date);
+    }
+    $date->setTimezone(new \DateTimeZone($timezone));
+    return $date;
+  }
+
 }
diff --git a/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php b/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
index 199a67b595..e7f0fbbd47 100644
--- a/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
+++ b/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
@@ -53,7 +53,6 @@ public function testDateRangeField() {
     foreach (static::$timezones as $timezone) {
 
       $this->setSiteTimezone($timezone);
-      $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone);
 
       // Ensure field is set to a date-only field.
       $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATE);
@@ -110,8 +109,8 @@ public function testDateRangeField() {
       // Formats that display a time component for date-only fields will display
       // the default time, so that is applied before calculating the expected
       // value.
-      $this->massageTestDate($start_date);
-      $this->massageTestDate($end_date);
+      datetime_date_default_time($start_date);
+      datetime_date_default_time($end_date);
 
       // Reset display options since these get changed below.
       $this->displayOptions = [
@@ -135,17 +134,15 @@ public function testDateRangeField() {
       $end_expected_iso = $this->dateFormatter->format($end_date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE);
       $end_expected_markup = '<time datetime="' . $end_expected_iso . '" class="datetime">' . $end_expected . '</time>';
       $output = $this->renderTestEntity($id);
-      $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [
+      $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [
         '%value' => 'long',
         '%expected' => $start_expected,
         '%expected_iso' => $start_expected_iso,
-        '%timezone' => $timezone,
       ]));
-      $this->assertContains($end_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [
+      $this->assertContains($end_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [
         '%value' => 'long',
         '%expected' => $end_expected,
         '%expected_iso' => $end_expected_iso,
-        '%timezone' => $timezone,
       ]));
       $this->assertContains(' THESEPARATOR ', $output, 'Found proper separator');
 
@@ -162,10 +159,7 @@ public function testDateRangeField() {
         ->save();
       $expected = $start_date->format(DATETIME_DATE_STORAGE_FORMAT) . ' - ' . $end_date->format(DATETIME_DATE_STORAGE_FORMAT);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected]));
 
       // Verify that the custom formatter works.
       $this->displayOptions['type'] = 'daterange_custom';
@@ -175,10 +169,7 @@ public function testDateRangeField() {
         ->save();
       $expected = $start_date->format($this->displayOptions['settings']['date_format']) . ' - ' . $end_date->format($this->displayOptions['settings']['date_format']);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected]));
 
       // Test that allowed markup in custom format is preserved and XSS is
       // removed.
@@ -188,10 +179,7 @@ public function testDateRangeField() {
         ->save();
       $expected = '<strong>' . $start_date->format('m/d/Y') . '</strong>alert(String.fromCharCode(88,83,83)) - <strong>' . $end_date->format('m/d/Y') . '</strong>alert(String.fromCharCode(88,83,83))';
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected]));
 
       // Test formatters when start date and end date are the same
       $this->drupalGet('entity_test/add');
@@ -211,7 +199,7 @@ public function testDateRangeField() {
       $id = $match[1];
       $this->assertText(t('entity_test @id has been created.', ['@id' => $id]));
 
-      $this->massageTestDate($start_date);
+      datetime_date_default_time($start_date);
 
       $this->displayOptions = [
         'type' => 'daterange_default',
@@ -230,13 +218,12 @@ public function testDateRangeField() {
       $start_expected_iso = $this->dateFormatter->format($start_date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE);
       $start_expected_markup = '<time datetime="' . $start_expected_iso . '" class="datetime">' . $start_expected . '</time>';
       $output = $this->renderTestEntity($id);
-      $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [
+      $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [
         '%value' => 'long',
         '%expected' => $start_expected,
         '%expected_iso' => $start_expected_iso,
-        '%timezone' => $timezone,
       ]));
-      $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page in ' . $timezone);
+      $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page');
 
       // Verify that hook_entity_prepare_view can add attributes.
       // @see entity_test_entity_prepare_view()
@@ -250,10 +237,7 @@ public function testDateRangeField() {
         ->save();
       $expected = $start_date->format(DATETIME_DATE_STORAGE_FORMAT);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected]));
       $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page');
 
       $this->displayOptions['type'] = 'daterange_custom';
@@ -263,10 +247,7 @@ public function testDateRangeField() {
         ->save();
       $expected = $start_date->format($this->displayOptions['settings']['date_format']);
       $output = $this->renderTestEntity($id);
-      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [
-        '%expected' => $expected,
-        '%timezone' => $timezone,
-      ]));
+      $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected]));
       $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page');
     }
   }
diff --git a/core/modules/datetime_range/tests/src/Kernel/DateRangeItemTest.php b/core/modules/datetime_range/tests/src/Kernel/DateRangeItemTest.php
index 54f805ffd3..67e1b9d764 100644
--- a/core/modules/datetime_range/tests/src/Kernel/DateRangeItemTest.php
+++ b/core/modules/datetime_range/tests/src/Kernel/DateRangeItemTest.php
@@ -100,8 +100,6 @@ public function testDateOnly() {
     sleep(1);
     $end_date = $entity->{$field_name}->end_date;
     $this->assertEquals($start_date->getTimestamp(), $end_date->getTimestamp());
-    $this->assertEquals('12:00:00', $start_date->format('H:i:s'));
-    $this->assertEquals('12:00:00', $end_date->format('H:i:s'));
   }
 
 }
diff --git a/core/modules/dblog/migration_templates/d6_dblog_settings.yml b/core/modules/dblog/migration_templates/d6_dblog_settings.yml
index a5d746ef57..64da0a7d13 100644
--- a/core/modules/dblog/migration_templates/d6_dblog_settings.yml
+++ b/core/modules/dblog/migration_templates/d6_dblog_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - dblog_row_limit
-  source_module: dblog
 process:
   row_limit: dblog_row_limit
 destination:
diff --git a/core/modules/dblog/migration_templates/d7_dblog_settings.yml b/core/modules/dblog/migration_templates/d7_dblog_settings.yml
index 761e9e40c5..e22768fe46 100644
--- a/core/modules/dblog/migration_templates/d7_dblog_settings.yml
+++ b/core/modules/dblog/migration_templates/d7_dblog_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - dblog_row_limit
-  source_module: dblog
 process:
   row_limit: dblog_row_limit
 destination:
diff --git a/core/modules/dblog/src/Controller/DbLogController.php b/core/modules/dblog/src/Controller/DbLogController.php
index 4cfbece02e..10e2af8c56 100644
--- a/core/modules/dblog/src/Controller/DbLogController.php
+++ b/core/modules/dblog/src/Controller/DbLogController.php
@@ -135,24 +135,20 @@ public function overview() {
       [
         'data' => $this->t('Type'),
         'field' => 'w.type',
-        'class' => [RESPONSIVE_PRIORITY_MEDIUM],
-      ],
+        'class' => [RESPONSIVE_PRIORITY_MEDIUM]],
       [
         'data' => $this->t('Date'),
         'field' => 'w.wid',
         'sort' => 'desc',
-        'class' => [RESPONSIVE_PRIORITY_LOW],
-      ],
+        'class' => [RESPONSIVE_PRIORITY_LOW]],
       $this->t('Message'),
       [
         'data' => $this->t('User'),
         'field' => 'ufd.name',
-        'class' => [RESPONSIVE_PRIORITY_MEDIUM],
-      ],
+        'class' => [RESPONSIVE_PRIORITY_MEDIUM]],
       [
         'data' => $this->t('Operations'),
-        'class' => [RESPONSIVE_PRIORITY_LOW],
-      ],
+        'class' => [RESPONSIVE_PRIORITY_LOW]],
     ];
 
     $query = $this->database->select('watchdog', 'w')
@@ -302,9 +298,8 @@ public function eventDetails($event_id) {
   /**
    * Builds a query for database log administration filters based on session.
    *
-   * @return array|null
-   *   An associative array with keys 'where' and 'args' or NULL if there were
-   *   no filters set.
+   * @return array
+   *   An associative array with keys 'where' and 'args'.
    */
   protected function buildFilterQuery() {
     if (empty($_SESSION['dblog_overview_filter'])) {
diff --git a/core/modules/dblog/tests/src/Functional/Update/DblogFiltersAndFieldsUpgradeTest.php b/core/modules/dblog/src/Tests/Update/DblogFiltersAndFieldsUpgradeTest.php
similarity index 90%
rename from core/modules/dblog/tests/src/Functional/Update/DblogFiltersAndFieldsUpgradeTest.php
rename to core/modules/dblog/src/Tests/Update/DblogFiltersAndFieldsUpgradeTest.php
index e512f5f5d8..d988d71e9d 100644
--- a/core/modules/dblog/tests/src/Functional/Update/DblogFiltersAndFieldsUpgradeTest.php
+++ b/core/modules/dblog/src/Tests/Update/DblogFiltersAndFieldsUpgradeTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\dblog\Functional\Update;
+namespace Drupal\dblog\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Views;
 use Drupal\Core\Serialization\Yaml;
 
@@ -20,8 +20,8 @@ class DblogFiltersAndFieldsUpgradeTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/dblog-2851293.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/dblog-2851293.php',
     ];
   }
 
diff --git a/core/modules/dblog/tests/src/Functional/Update/DblogRecentLogsUsingViewsUpdateTest.php b/core/modules/dblog/src/Tests/Update/DblogRecentLogsUsingViewsUpdateTest.php
similarity index 82%
rename from core/modules/dblog/tests/src/Functional/Update/DblogRecentLogsUsingViewsUpdateTest.php
rename to core/modules/dblog/src/Tests/Update/DblogRecentLogsUsingViewsUpdateTest.php
index 851c15ee71..4ea6d49f9b 100644
--- a/core/modules/dblog/tests/src/Functional/Update/DblogRecentLogsUsingViewsUpdateTest.php
+++ b/core/modules/dblog/src/Tests/Update/DblogRecentLogsUsingViewsUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\dblog\Functional\Update;
+namespace Drupal\dblog\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Ensures that update hook that creates the watchdog view ran sucessfully.
@@ -16,7 +16,7 @@ class DblogRecentLogsUsingViewsUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/editor/editor.api.php b/core/modules/editor/editor.api.php
index 1d44a9f8d8..6485a1e5fc 100644
--- a/core/modules/editor/editor.api.php
+++ b/core/modules/editor/editor.api.php
@@ -51,7 +51,7 @@ function hook_editor_js_settings_alter(array &$settings) {
  * @param \Drupal\filter\FilterFormatInterface $format
  *   The text format configuration entity. Provides context based upon which
  *   one may want to adjust the filtering.
- * @param \Drupal\filter\FilterFormatInterface|null $original_format
+ * @param \Drupal\filter\FilterFormatInterface $original_format|null
  *   (optional) The original text format configuration entity (when switching
  *   text formats/editors). Also provides context based upon which one may want
  *   to adjust the filtering.
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index e9f1a88e65..7cba93886c 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -278,7 +278,7 @@ function editor_load($format_id) {
  * @param \Drupal\filter\FilterFormatInterface|null $format
  *   The text format whose text editor will be used or NULL if the previously
  *   defined text format is now disabled.
- * @param \Drupal\filter\FilterFormatInterface|null $original_format
+ * @param \Drupal\filter\FilterFormatInterface $original_format|null
  *   (optional) The original text format (i.e. when switching text formats,
  *   $format is the text format that is going to be used, $original_format is
  *   the one that was being used initially, the one that is stored in the
diff --git a/core/modules/editor/src/Plugin/Filter/EditorFileReference.php b/core/modules/editor/src/Plugin/Filter/EditorFileReference.php
index ad2ac033fa..cf725a7137 100644
--- a/core/modules/editor/src/Plugin/Filter/EditorFileReference.php
+++ b/core/modules/editor/src/Plugin/Filter/EditorFileReference.php
@@ -50,7 +50,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
   /**
    * {@inheritdoc}
    */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+  static public function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static(
       $configuration,
       $plugin_id,
diff --git a/core/modules/editor/src/Tests/EditorLoadingTest.php b/core/modules/editor/src/Tests/EditorLoadingTest.php
index b8dd074d49..419215f873 100644
--- a/core/modules/editor/src/Tests/EditorLoadingTest.php
+++ b/core/modules/editor/src/Tests/EditorLoadingTest.php
@@ -127,7 +127,7 @@ public function testLoading() {
     // - doesn't have access to the full_html text format, so: no text editor.
     $this->drupalLogin($this->normalUser);
     $this->drupalGet('node/add/article');
-    list(, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
+    list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
     $this->assertFalse($editor_settings_present, 'No Text Editor module settings.');
     $this->assertFalse($editor_js_present, 'No Text Editor JavaScript.');
     $this->assertTrue(count($body) === 1, 'A body field exists.');
@@ -140,17 +140,13 @@ public function testLoading() {
     $this->drupalLogin($this->privilegedUser);
     $this->drupalGet('node/add/article');
     list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
-    $expected = [
-      'formats' => [
-        'full_html' => [
-          'format' => 'full_html',
-          'editor' => 'unicorn',
-          'editorSettings' => ['ponyModeEnabled' => TRUE],
-          'editorSupportsContentFiltering' => TRUE,
-          'isXssSafe' => FALSE,
-        ],
-      ],
-    ];
+    $expected = ['formats' => ['full_html' => [
+      'format' => 'full_html',
+      'editor' => 'unicorn',
+      'editorSettings' => ['ponyModeEnabled' => TRUE],
+      'editorSupportsContentFiltering' => TRUE,
+      'isXssSafe' => FALSE,
+    ]]];
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertIdentical($expected, $settings['editor'], "Text Editor module's JavaScript settings on the page are correct.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
@@ -178,17 +174,13 @@ public function testLoading() {
     $this->drupalLogin($this->untrustedUser);
     $this->drupalGet('node/add/article');
     list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
-    $expected = [
-      'formats' => [
-        'plain_text' => [
-          'format' => 'plain_text',
-          'editor' => 'unicorn',
-          'editorSettings' => ['ponyModeEnabled' => TRUE],
-          'editorSupportsContentFiltering' => TRUE,
-          'isXssSafe' => FALSE,
-        ],
-      ],
-    ];
+    $expected = ['formats' => ['plain_text' => [
+      'format' => 'plain_text',
+      'editor' => 'unicorn',
+      'editorSettings' => ['ponyModeEnabled' => TRUE],
+      'editorSupportsContentFiltering' => TRUE,
+      'isXssSafe' => FALSE,
+    ]]];
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertIdentical($expected, $settings['editor'], "Text Editor module's JavaScript settings on the page are correct.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
@@ -210,7 +202,7 @@ public function testLoading() {
     // that (s)he is not allowed to use. The editor is still loaded. CKEditor,
     // for example, supports being loaded in a disabled state.
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
+    list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body');
     $this->assertTrue($editor_settings_present, 'Text Editor module settings.');
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript.');
     $this->assertTrue(count($body) === 1, 'A body field exists.');
@@ -249,7 +241,7 @@ public function testSupportedElementTypes() {
     // Assert the unicorn editor works with textfields.
     $this->drupalLogin($this->privilegedUser);
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input');
+    list( , $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input');
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
     $this->assertTrue(count($field) === 1, 'A text field exists.');
@@ -265,7 +257,7 @@ public function testSupportedElementTypes() {
     ])->save();
 
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input');
+    list( , $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input');
     $this->assertFalse($editor_settings_present, "Text Editor module's JavaScript settings are not on the page.");
     $this->assertFalse($editor_js_present, 'Text Editor JavaScript is not present.');
     $this->assertTrue(count($field) === 1, 'A text field exists.');
diff --git a/core/modules/editor/tests/src/Functional/Update/EditorUpdateTest.php b/core/modules/editor/src/Tests/Update/EditorUpdateTest.php
similarity index 88%
rename from core/modules/editor/tests/src/Functional/Update/EditorUpdateTest.php
rename to core/modules/editor/src/Tests/Update/EditorUpdateTest.php
index a143c053d3..e7f0f4435b 100644
--- a/core/modules/editor/tests/src/Functional/Update/EditorUpdateTest.php
+++ b/core/modules/editor/src/Tests/Update/EditorUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\editor\Functional\Update;
+namespace Drupal\editor\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests Editor module database updates.
@@ -16,9 +16,9 @@ class EditorUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
       // Simulate an un-synchronized environment.
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.editor-editor_update_8001.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.editor-editor_update_8001.php',
     ];
   }
 
diff --git a/core/modules/editor/tests/src/Unit/EditorConfigEntityUnitTest.php b/core/modules/editor/tests/src/Unit/EditorConfigEntityUnitTest.php
index e40e349a74..4e96f4ac65 100644
--- a/core/modules/editor/tests/src/Unit/EditorConfigEntityUnitTest.php
+++ b/core/modules/editor/tests/src/Unit/EditorConfigEntityUnitTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\editor\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\editor\Entity\Editor;
 use Drupal\Tests\UnitTestCase;
 
@@ -24,9 +22,9 @@ class EditorConfigEntityUnitTest extends UnitTestCase {
   /**
    * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The ID of the type of the entity under test.
@@ -68,8 +66,8 @@ protected function setUp() {
       ->method('getProvider')
       ->will($this->returnValue('editor'));
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -80,16 +78,10 @@ protected function setUp() {
       ->disableOriginalConstructor()
       ->getMock();
 
-    $entity_manager = new EntityManager();
-
     $container = new ContainerBuilder();
-    $container->set('entity.manager', $entity_manager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('uuid', $this->uuid);
     $container->set('plugin.manager.editor', $this->editorPluginManager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager.
-    $entity_manager->setContainer($container);
     \Drupal::setContainer($container);
   }
 
@@ -128,7 +120,7 @@ public function testCalculateDependencies() {
       ->with($format_id)
       ->will($this->returnValue($filter_format));
 
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with('filter_format')
       ->will($this->returnValue($storage));
diff --git a/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php b/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php
index 35820a093b..ce6309262c 100644
--- a/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php
+++ b/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php
@@ -364,11 +364,8 @@ public function providerTestFilterXss() {
 
     // IMG STYLE with expression.
     // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#IMG_STYLE_with_expression
-    $data[] = [
-      'exp/*<A STYLE=\'no\xss:noxss("*//*");
-xss:ex/*XSS*//*/*/pression(alert("XSS"))\'>',
-      'exp/*<A>',
-    ];
+    $data[] = ['exp/*<A STYLE=\'no\xss:noxss("*//*");
+xss:ex/*XSS*//*/*/pression(alert("XSS"))\'>', 'exp/*<A>'];
 
     // STYLE tag (Older versions of Netscape only).
     // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#STYLE_tag_.28Older_versions_of_Netscape_only.29
@@ -446,9 +443,7 @@ public function providerTestFilterXss() {
     // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Downlevel-Hidden_block
     $data[] = ['<!--[if gte IE 4]>
  <SCRIPT>alert(\'XSS\');</SCRIPT>
- <![endif]-->',
-      "\n alert('XSS');\n ",
-    ];
+ <![endif]-->', "\n alert('XSS');\n "];
 
     // BASE tag.
     // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#BASE_tag
diff --git a/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php b/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
index 6b62705acd..f71067805f 100644
--- a/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
+++ b/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
@@ -12,4 +12,4 @@
  *
  * @see \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem
  */
-class ConfigurableEntityReferenceItem extends EntityReferenceItem {}
+class ConfigurableEntityReferenceItem extends EntityReferenceItem { }
diff --git a/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php b/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php
index 564113421a..0b2ba22381 100644
--- a/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php
+++ b/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php
@@ -12,4 +12,4 @@
  *
  * @see \Drupal\views\Plugin\views\display\EntityReference
  */
-class EntityReference extends ViewsEntityReference {}
+class EntityReference extends ViewsEntityReference { }
diff --git a/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php b/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php
index a32c063ce3..1a1eca195e 100644
--- a/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php
+++ b/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php
@@ -12,4 +12,4 @@
  *
  * @see \Drupal\views\Plugin\views\row\EntityReference
  */
-class EntityReference extends ViewsEntityReference {}
+class EntityReference extends ViewsEntityReference { }
diff --git a/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php b/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php
index 04b8d6f374..c4712dcb43 100644
--- a/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php
+++ b/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php
@@ -12,4 +12,4 @@
  *
  * @see \Drupal\views\Plugin\views\style\EntityReference
  */
-class EntityReference extends ViewsEntityReference {}
+class EntityReference extends ViewsEntityReference { }
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 1a18b91d73..8f3877d0f3 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -74,7 +74,7 @@ function field_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<h3>' . t('Terminology') . '</h3>';
       $output .= '<dl>';
       $output .= '<dt>' . t('Entities and entity types') . '</dt>';
-      $output .= '<dd>' . t("The website's content and configuration is managed using <em>entities</em>, which are grouped into <em>entity types</em>. <em>Content entity types</em> are the entity types for site content (such as the main site content, comments, custom blocks, taxonomy terms, and user accounts). <em>Configuration entity types</em> are used to store configuration information for your site, such as individual views in the Views module, and settings for your main site content types.") . '</dd>';
+      $output .= '<dd>' . t('The website\'s content and configuration is managed using <em>entities</em>, which are grouped into <em>entity types</em>. <em>Content entity types</em> are the entity types for site content (such as the main site content, comments, custom blocks, taxonomy terms, and user accounts). <em>Configuration entity types</em> are used to store configuration information for your site, such as individual views in the Views module, and settings for your main site content types.') . '</dd>';
       $output .= '<dt>' . t('Entity sub-types') . '</dt>';
       $output .= '<dd>' . t('Some content entity types are further grouped into sub-types (for example, you could have article and page content types within the main site content entity type, and tag and category vocabularies within the taxonomy term entity type); other entity types, such as user accounts, do not have sub-types. Programmers use the term <em>bundle</em> for entity sub-types.') . '</dd>';
       $output .= '<dt>' . t('Fields and field types') . '</dt>';
diff --git a/core/modules/field/field.post_update.php b/core/modules/field/field.post_update.php
index 7476baa467..d6a809e5f2 100644
--- a/core/modules/field/field.post_update.php
+++ b/core/modules/field/field.post_update.php
@@ -6,10 +6,10 @@
  */
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\field\Entity\FieldConfig;
 
+
 /**
  * Re-save all field storage config objects to add 'custom_storage' property.
  */
@@ -59,26 +59,3 @@ function field_post_update_email_widget_size_setting() {
 
   return t('The new size setting for email widgets has been added.');
 }
-
-/**
- * Remove the stale 'handler_submit' setting for entity_reference fields.
- */
-function field_post_update_remove_handler_submit_setting() {
-  $config = \Drupal::configFactory();
-  /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
-  $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
-
-  // Iterate on all field configs.
-  foreach ($config->listAll('field.field.') as $field_id) {
-    $field = $config->getEditable($field_id);
-    $class = $field_type_manager->getPluginClass($field->get('field_type'));
-
-    // Deal only with entity reference fields and descendants.
-    if ($class === EntityReferenceItem::class || is_subclass_of($class, EntityReferenceItem::class)) {
-      if ($field->get('settings.handler_submit')) {
-        // Remove 'handler_settings' from settings.
-        $field->clear('settings.handler_submit')->save();
-      }
-    }
-  }
-}
diff --git a/core/modules/field/migration_templates/d6_field.yml b/core/modules/field/migration_templates/d6_field.yml
index 92c28b203c..eb02178b00 100644
--- a/core/modules/field/migration_templates/d6_field.yml
+++ b/core/modules/field/migration_templates/d6_field.yml
@@ -2,8 +2,8 @@ id: d6_field
 label: Field configuration
 migration_tags:
   - Drupal 6
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processField
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processField
 source:
   plugin: d6_field
   constants:
diff --git a/core/modules/field/migration_templates/d6_field_formatter_settings.yml b/core/modules/field/migration_templates/d6_field_formatter_settings.yml
index fc97ad0225..534501d527 100644
--- a/core/modules/field/migration_templates/d6_field_formatter_settings.yml
+++ b/core/modules/field/migration_templates/d6_field_formatter_settings.yml
@@ -2,8 +2,8 @@ id: d6_field_formatter_settings
 label: Field formatter configuration
 migration_tags:
   - Drupal 6
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldFormatter
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldFormatter
 source:
   plugin: d6_field_instance_per_view_mode
   constants:
diff --git a/core/modules/field/migration_templates/d6_field_instance.yml b/core/modules/field/migration_templates/d6_field_instance.yml
index 3a413c14f3..19343035cb 100644
--- a/core/modules/field/migration_templates/d6_field_instance.yml
+++ b/core/modules/field/migration_templates/d6_field_instance.yml
@@ -2,8 +2,8 @@ id: d6_field_instance
 label: Field instance configuration
 migration_tags:
   - Drupal 6
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldInstance
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldInstance
 source:
   plugin: d6_field_instance
   constants:
diff --git a/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml b/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
index b5f6f6d680..85c7036cec 100644
--- a/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
+++ b/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
@@ -2,8 +2,8 @@ id: d6_field_instance_widget_settings
 label: Field instance widget configuration
 migration_tags:
   - Drupal 6
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldWidget
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldWidget
 source:
   plugin: d6_field_instance_per_form_display
   constants:
diff --git a/core/modules/field/migration_templates/d7_field.yml b/core/modules/field/migration_templates/d7_field.yml
index 1fa00699f9..15079d8816 100644
--- a/core/modules/field/migration_templates/d7_field.yml
+++ b/core/modules/field/migration_templates/d7_field.yml
@@ -2,8 +2,8 @@ id: d7_field
 label: Field configuration
 migration_tags:
   - Drupal 7
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processField
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processField
 source:
   plugin: d7_field
   constants:
@@ -15,9 +15,26 @@ process:
   langcode: 'constants/langcode'
   field_name: field_name
   type:
-    plugin: process_field
+    plugin: field_type
     source: type
-    method: getFieldType
+    map:
+      date: datetime
+      datestamp: datetime
+      datetime: datetime
+      email: email
+      entityreference: entity_reference
+      file: file
+      image: image
+      link_field: link
+      list_boolean: boolean
+      list_integer: list_integer
+      list_text: list_string
+      number_integer: integer
+      number_decimal: decimal
+      number_float: float
+      phone: telephone
+      text_long: text_long
+      text_with_summary: text_with_summary
   # Translatable is not migrated and the Drupal 8 default of true is used.
   # If translatable is false in field storage then the field can not be
   # set to translatable via the UI.
diff --git a/core/modules/field/migration_templates/d7_field_formatter_settings.yml b/core/modules/field/migration_templates/d7_field_formatter_settings.yml
index 5c9335ca86..3055e47bcf 100644
--- a/core/modules/field/migration_templates/d7_field_formatter_settings.yml
+++ b/core/modules/field/migration_templates/d7_field_formatter_settings.yml
@@ -2,8 +2,8 @@ id: d7_field_formatter_settings
 label: Field formatter configuration
 migration_tags:
   - Drupal 7
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldFormatter
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldFormatter
 source:
   plugin: d7_field_instance_per_view_mode
   constants:
@@ -26,15 +26,7 @@ process:
       plugin: skip_on_empty
       method: row
   entity_type: entity_type
-  # The bundle needs to be statically mapped in order to support comment types
-  # that might already exist before this migration is run. See
-  # d7_comment_type.yml or more information.
-  bundle:
-    plugin: static_map
-    source: bundle
-    bypass: true
-    map:
-      comment_node_forum: comment_forum
+  bundle: bundle
   view_mode:
     -
       plugin: migration_lookup
@@ -55,15 +47,11 @@ process:
   "options/label": 'formatter/label'
   "options/weight": 'formatter/weight'
   # The formatter to use.
-  formatter_type:
-    plugin: process_field
-    source: type
-    method: getFieldFormatterType
   "options/type":
     -
       plugin: static_map
       bypass: true
-      source: '@formatter_type'
+      source: 'formatter/type'
       map:
         date_default: datetime_default
         email_default: email_mailto
diff --git a/core/modules/field/migration_templates/d7_field_instance.yml b/core/modules/field/migration_templates/d7_field_instance.yml
index 4e1901dc4a..03e77cd232 100644
--- a/core/modules/field/migration_templates/d7_field_instance.yml
+++ b/core/modules/field/migration_templates/d7_field_instance.yml
@@ -2,28 +2,16 @@ id: d7_field_instance
 label: Field instance configuration
 migration_tags:
   - Drupal 7
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldInstance
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldInstance
 source:
   plugin: d7_field_instance
   constants:
     status: true
 process:
-  type:
-    plugin: process_field
-    source: type
-    method: getFieldType
   entity_type: entity_type
   field_name: field_name
-  # The bundle needs to be statically mapped in order to support comment types
-  # that might already exist before this migration is run. See
-  # d7_comment_type.yml for more information.
-  bundle:
-    plugin: static_map
-    source: bundle
-    bypass: true
-    map:
-      comment_node_forum: comment_forum
+  bundle: bundle
   label: label
   description: description
   required: required
diff --git a/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml b/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
index ac281e1707..85a67cb185 100644
--- a/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
+++ b/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
@@ -2,8 +2,8 @@ id: d7_field_instance_widget_settings
 label: Field instance widget configuration
 migration_tags:
   - Drupal 7
-class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
-field_plugin_method: processFieldWidget
+class: Drupal\migrate_drupal\Plugin\migrate\CckMigration
+cck_plugin_method: processFieldWidget
 source:
   plugin: d7_field_instance_per_form_display
   constants:
@@ -26,28 +26,16 @@ process:
     -
       plugin: skip_on_empty
       method: row
-  # The bundle needs to be statically mapped in order to support comment types
-  # that might already exist before this migration is run. See
-  # d7_comment_type.yml for more information.
-  bundle:
-    plugin: static_map
-    source: bundle
-    bypass: true
-    map:
-      comment_node_forum: comment_forum
+  bundle: bundle
   form_mode: 'constants/form_mode'
   field_name: field_name
   entity_type: entity_type
   'options/weight': 'widget/weight'
-  widget_type:
-    plugin: process_field
-    source: type
-    method: getFieldWidgetType
   'options/type':
     type:
       plugin: static_map
       bypass: true
-      source: '@widget_type'
+      source: 'widget/type'
       map:
         link_field: link_default
         email_textfield: email_default
diff --git a/core/modules/field/src/Entity/FieldConfig.php b/core/modules/field/src/Entity/FieldConfig.php
index 49b9141450..af2fcca738 100644
--- a/core/modules/field/src/Entity/FieldConfig.php
+++ b/core/modules/field/src/Entity/FieldConfig.php
@@ -3,7 +3,6 @@
 namespace Drupal\field\Entity;
 
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\FieldableEntityStorageInterface;
 use Drupal\Core\Field\FieldConfigBase;
 use Drupal\Core\Field\FieldException;
 use Drupal\field\FieldStorageConfigInterface;
@@ -190,19 +189,13 @@ public function calculateDependencies() {
    */
   public static function preDelete(EntityStorageInterface $storage, array $fields) {
     $state = \Drupal::state();
-    $entity_type_manager = \Drupal::entityTypeManager();
 
     parent::preDelete($storage, $fields);
     // Keep the field definitions in the state storage so we can use them
     // later during field_purge_batch().
     $deleted_fields = $state->get('field.field.deleted') ?: [];
-
-    /** @var \Drupal\field\FieldConfigInterface $field */
     foreach ($fields as $field) {
-      // Only mark a field for purging if there is data. Otherwise, just remove
-      // it.
-      $target_entity_storage = $entity_type_manager->getStorage($field->getTargetEntityTypeId());
-      if (!$field->deleted && $target_entity_storage instanceof FieldableEntityStorageInterface && $target_entity_storage->countFieldData($field->getFieldStorageDefinition(), TRUE)) {
+      if (!$field->deleted) {
         $config = $field->toArray();
         $config['deleted'] = TRUE;
         $config['field_storage_uuid'] = $field->getFieldStorageDefinition()->uuid();
diff --git a/core/modules/field/src/Entity/FieldStorageConfig.php b/core/modules/field/src/Entity/FieldStorageConfig.php
index bf2641ed4e..78b3d602b6 100644
--- a/core/modules/field/src/Entity/FieldStorageConfig.php
+++ b/core/modules/field/src/Entity/FieldStorageConfig.php
@@ -6,7 +6,6 @@
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
-use Drupal\Core\Entity\FieldableEntityStorageInterface;
 use Drupal\Core\Field\FieldException;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\TypedData\OptionsProviderInterface;
@@ -410,12 +409,8 @@ public static function preDelete(EntityStorageInterface $storage, array $field_s
     // Keep the field definitions in the state storage so we can use them later
     // during field_purge_batch().
     $deleted_storages = $state->get('field.storage.deleted') ?: [];
-    /** @var \Drupal\field\FieldStorageConfigInterface $field_storage */
     foreach ($field_storages as $field_storage) {
-      // Only mark a field for purging if there is data. Otherwise, just remove
-      // it.
-      $target_entity_storage = \Drupal::entityTypeManager()->getStorage($field_storage->getTargetEntityTypeId());
-      if (!$field_storage->deleted && $target_entity_storage instanceof FieldableEntityStorageInterface && $target_entity_storage->countFieldData($field_storage, TRUE)) {
+      if (!$field_storage->deleted) {
         $config = $field_storage->toArray();
         $config['deleted'] = TRUE;
         $config['bundles'] = $field_storage->getBundles();
diff --git a/core/modules/field/src/Plugin/migrate/process/ProcessField.php b/core/modules/field/src/Plugin/migrate/process/ProcessField.php
deleted file mode 100644
index e96db68025..0000000000
--- a/core/modules/field/src/Plugin/migrate/process/ProcessField.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-
-namespace Drupal\field\Plugin\migrate\process;
-
-use Drupal\Component\Plugin\Exception\PluginNotFoundException;
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\migrate\MigrateException;
-use Drupal\migrate\MigrateExecutableInterface;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\ProcessPluginBase;
-use Drupal\migrate\Row;
-use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface;
-use Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Get the value from a method call on a field plugin instance.
- *
- * This process plugin will instantiate a field plugin based on the given
- * field type and then call the given method on it for the return value.
- *
- * Available configuration keys:
- * - source: The source field type to use to instantiate a field plugin.
- * - method: The method to be called on the field plugin instance.
- *
- * If no field plugin for the given field type is found, NULL will be returned.
- *
- * Example:
- *
- * @code
- * process:
- *   type:
- *     plugin: process_field
- *     source: type
- *     method: getFieldType
- * @endcode
- *
- * @see \Drupal\migrate\Plugin\MigrateProcessInterface
- * @see \Drupal\migrate_drupal\Plugin\MigrateFieldInterface;
- *
- * @MigrateProcessPlugin(
- *   id = "process_field"
- * )
- */
-class ProcessField extends ProcessPluginBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The cckfield plugin manager.
-   *
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface
-   */
-  protected $cckPluginManager;
-
-  /**
-   * The field plugin manager.
-   *
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface
-   */
-  protected $fieldPluginManager;
-
-  /**
-   * The migration being run.
-   *
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * Constructs a ProcessField plugin.
-   *
-   * @param array $configuration
-   *   The plugin configuration.
-   * @param string $plugin_id
-   *   The plugin ID.
-   * @param mixed $plugin_definition
-   *   The plugin definition.
-   * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface $cck_plugin_manager
-   *   The cckfield plugin manager.
-   * @param \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface $field_plugin_manager
-   *   The field plugin manager.
-   * @param \Drupal\migrate\Plugin\MigrationInterface $migration
-   *   The migration being run.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrateCckFieldPluginManagerInterface $cck_plugin_manager, MigrateFieldPluginManagerInterface $field_plugin_manager, MigrationInterface $migration = NULL) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-    $this->cckPluginManager = $cck_plugin_manager;
-    $this->fieldPluginManager = $field_plugin_manager;
-    $this->migration = $migration;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->get('plugin.manager.migrate.cckfield'),
-      $container->get('plugin.manager.migrate.field'),
-      $migration
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    if (!is_string($value)) {
-      throw new MigrateException('The input value must be a string.');
-    }
-
-    if (empty($this->configuration['method'])) {
-      throw new MigrateException('You need to specify the name of a method to be called on the Field plugin.');
-    }
-    $method = $this->configuration['method'];
-
-    try {
-      return $this->callMethodOnFieldPlugin($this->fieldPluginManager, $value, $method, $row);
-    }
-    catch (PluginNotFoundException $e) {
-      try {
-        return $this->callMethodOnFieldPlugin($this->cckPluginManager, $value, $method, $row);
-      }
-      catch (PluginNotFoundException $e) {
-        return NULL;
-      }
-    }
-  }
-
-  /**
-   * Instantiate a field plugin and call a method on it.
-   *
-   * @param \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface $field_plugin_manager
-   *   The field plugin manager.
-   * @param string $field_type
-   *   The field type for which to get the field plugin.
-   * @param string $method
-   *   The method to call on the field plugin.
-   * @param \Drupal\migrate\Row $row
-   *   The row from the source to process.
-   *
-   * @return mixed
-   *   The return value from the method called on the field plugin.
-   */
-  protected function callMethodOnFieldPlugin(MigrateFieldPluginManagerInterface $field_plugin_manager, $field_type, $method, Row $row) {
-    $plugin_id = $field_plugin_manager->getPluginIdFromFieldType($field_type, [], $this->migration);
-    $plugin_instance = $field_plugin_manager->createInstance($plugin_id, [], $this->migration);
-    if (!is_callable([$plugin_instance, $method])) {
-      throw new MigrateException('The specified method does not exists or is not callable.');
-    }
-    return call_user_func_array([$plugin_instance, $method], [$row]);
-  }
-
-}
diff --git a/core/modules/field/src/Plugin/migrate/source/d6/Field.php b/core/modules/field/src/Plugin/migrate/source/d6/Field.php
index cab0204042..7c9e620dd8 100644
--- a/core/modules/field/src/Plugin/migrate/source/d6/Field.php
+++ b/core/modules/field/src/Plugin/migrate/source/d6/Field.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_field",
- *   source_module = "content"
+ *   source_provider = "content"
  * )
  */
 class Field extends DrupalSqlBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php
index b47f6ab333..dbea7a8e73 100644
--- a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php
+++ b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstance.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_field_instance",
- *   source_module = "content"
+ *   source_provider = "content"
  * )
  */
 class FieldInstance extends DrupalSqlBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerFormDisplay.php b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerFormDisplay.php
index 1db201e3af..21baa9ee21 100644
--- a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerFormDisplay.php
+++ b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerFormDisplay.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d6_field_instance_per_form_display",
- *   source_module = "content"
+ *   source_provider = "content"
  * )
  */
 class FieldInstancePerFormDisplay extends DrupalSqlBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerViewMode.php b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerViewMode.php
index 2fd1e1b860..33852d6775 100644
--- a/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerViewMode.php
+++ b/core/modules/field/src/Plugin/migrate/source/d6/FieldInstancePerViewMode.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d6_field_instance_per_view_mode",
- *   source_module = "content"
+ *   source_provider = "content"
  * )
  */
 class FieldInstancePerViewMode extends ViewModeBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/Field.php b/core/modules/field/src/Plugin/migrate/source/d7/Field.php
index 9e92619f8e..c520bbed8b 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/Field.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/Field.php
@@ -14,8 +14,7 @@
  * Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase instead.
  *
  * @MigrateSource(
- *   id = "d7_field",
- *   source_module = "field"
+ *   id = "d7_field"
  * )
  */
 class Field extends DrupalSqlBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
index a54b17d9d1..c816efd4ac 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstance.php
@@ -15,7 +15,7 @@
  *
  * @MigrateSource(
  *   id = "d7_field_instance",
- *   source_module = "field"
+ *   source_provider = "field"
  * )
  */
 class FieldInstance extends DrupalSqlBase {
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerFormDisplay.php b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerFormDisplay.php
index 7165f6d21e..575f61f42f 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerFormDisplay.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerFormDisplay.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d7_field_instance_per_form_display",
- *   source_module = "field"
+ *   source_provider = "field"
  * )
  */
 class FieldInstancePerFormDisplay extends FieldInstance {
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerViewMode.php b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerViewMode.php
index 7d5ee81a59..131c954941 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerViewMode.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/FieldInstancePerViewMode.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d7_field_instance_per_view_mode",
- *   source_module = "field"
+ *   source_provider = "field"
  * )
  */
 class FieldInstancePerViewMode extends FieldInstance {
diff --git a/core/modules/field/src/Plugin/migrate/source/d7/ViewMode.php b/core/modules/field/src/Plugin/migrate/source/d7/ViewMode.php
index 039960a4ed..cd2ce82cf1 100644
--- a/core/modules/field/src/Plugin/migrate/source/d7/ViewMode.php
+++ b/core/modules/field/src/Plugin/migrate/source/d7/ViewMode.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d7_view_mode",
- *   source_module = "field"
+ *   source_provider = "field"
  * )
  */
 class ViewMode extends FieldInstance {
diff --git a/core/modules/field/src/Tests/Number/NumberFieldTest.php b/core/modules/field/src/Tests/Number/NumberFieldTest.php
index 64da6c1a00..c69141050f 100644
--- a/core/modules/field/src/Tests/Number/NumberFieldTest.php
+++ b/core/modules/field/src/Tests/Number/NumberFieldTest.php
@@ -45,7 +45,9 @@ public function testNumberDecimalField() {
       'field_name' => $field_name,
       'entity_type' => 'entity_test',
       'type' => 'decimal',
-      'settings' => ['precision' => 8, 'scale' => 4],
+      'settings' => [
+        'precision' => 8, 'scale' => 4,
+      ]
     ])->save();
     FieldConfig::create([
       'field_name' => $field_name,
@@ -141,10 +143,8 @@ public function testNumberIntegerField() {
       'entity_type' => 'entity_test',
       'bundle' => 'entity_test',
       'settings' => [
-        'min' => $minimum,
-        'max' => $maximum,
-        'prefix' => 'ThePrefix',
-      ],
+        'min' => $minimum, 'max' => $maximum, 'prefix' => 'ThePrefix',
+      ]
     ])->save();
 
     entity_get_form_display('entity_test', 'entity_test', 'default')
diff --git a/core/modules/field/tests/src/Functional/Update/EmailWidgetSizeSettingUpdateTest.php b/core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php
similarity index 83%
rename from core/modules/field/tests/src/Functional/Update/EmailWidgetSizeSettingUpdateTest.php
rename to core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php
index 6e15170c89..2703bb5e48 100644
--- a/core/modules/field/tests/src/Functional/Update/EmailWidgetSizeSettingUpdateTest.php
+++ b/core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\field\Functional\Update;
+namespace Drupal\field\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the update for the 'size' setting of the 'email_default' field widget.
@@ -16,8 +16,8 @@ class EmailWidgetSizeSettingUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.email_widget_size_setting-2578741.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.email_widget_size_setting-2578741.php',
     ];
   }
 
diff --git a/core/modules/field/tests/src/Functional/Update/EntityReferenceHandlerSettingUpdateTest.php b/core/modules/field/src/Tests/Update/EntityReferenceHandlerSettingUpdateTest.php
similarity index 86%
rename from core/modules/field/tests/src/Functional/Update/EntityReferenceHandlerSettingUpdateTest.php
rename to core/modules/field/src/Tests/Update/EntityReferenceHandlerSettingUpdateTest.php
index 0fade3760f..aefdcafac9 100644
--- a/core/modules/field/tests/src/Functional/Update/EntityReferenceHandlerSettingUpdateTest.php
+++ b/core/modules/field/src/Tests/Update/EntityReferenceHandlerSettingUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\field\Functional\Update;
+namespace Drupal\field\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the update for the entity reference 'handler' setting.
@@ -16,7 +16,7 @@ class EntityReferenceHandlerSettingUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/field/tests/src/Functional/Update/FieldUpdateTest.php b/core/modules/field/src/Tests/Update/FieldUpdateTest.php
similarity index 81%
rename from core/modules/field/tests/src/Functional/Update/FieldUpdateTest.php
rename to core/modules/field/src/Tests/Update/FieldUpdateTest.php
index b9175b1277..be31a09351 100644
--- a/core/modules/field/tests/src/Functional/Update/FieldUpdateTest.php
+++ b/core/modules/field/src/Tests/Update/FieldUpdateTest.php
@@ -1,11 +1,11 @@
 <?php
 
-namespace Drupal\Tests\field\Functional\Update;
+namespace Drupal\field\Tests\Update;
 
 use Drupal\Core\Config\Config;
 use Drupal\field\Entity\FieldConfig;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\node\Entity\Node;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that field settings are properly updated during database updates.
@@ -34,9 +34,8 @@ protected function setUp() {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.views_entity_reference_plugins-2429191.php',
-      __DIR__ . '/../../../fixtures/update/drupal-8.remove_handler_submit_setting-2715589.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.views_entity_reference_plugins-2429191.php',
     ];
   }
 
@@ -142,21 +141,4 @@ protected function assertEntityRefDependency(Config $config, $present) {
     $this->assertEqual(in_array('entity_reference', $dependencies['module']), $present);
   }
 
-  /**
-   * Tests field_post_update_remove_handler_submit_setting().
-   *
-   * @see field_post_update_remove_handler_submit_setting()
-   */
-  public function testEntityReferenceFieldConfigCleanUpdate() {
-    $field_config = $this->config('field.field.node.article.field_tags');
-    // Check that 'handler_submit' key exists in field config settings.
-    $this->assertEquals('Change handler', $field_config->get('settings.handler_submit'));
-
-    $this->runUpdates();
-
-    $field_config = $this->config('field.field.node.article.field_tags');
-    // Check that 'handler_submit' has been removed from field config settings.
-    $this->assertArrayNotHasKey('handler_submit', $field_config->get('settings'));
-  }
-
 }
diff --git a/core/modules/field/tests/fixtures/update/drupal-8.remove_handler_submit_setting-2715589.php b/core/modules/field/tests/fixtures/update/drupal-8.remove_handler_submit_setting-2715589.php
deleted file mode 100644
index 88a543fa14..0000000000
--- a/core/modules/field/tests/fixtures/update/drupal-8.remove_handler_submit_setting-2715589.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides necessary database additions for testing
- * field_post_update_remove_handler_submit_setting()
- */
-
-use Drupal\Core\Database\Database;
-
-$connection = Database::getConnection();
-
-$config = unserialize($connection->select('config', 'c')
-  ->fields('c', ['data'])
-  ->condition('collection', '')
-  ->condition('name', 'field.field.node.article.field_tags')
-  ->execute()
-  ->fetchField());
-
-$config['settings']['handler_submit'] = 'Change handler';
-
-$connection->update('config')
-  ->fields(['data' => serialize($config)])
-  ->condition('collection', '')
-  ->condition('name', 'field.field.node.article.field_tags')
-  ->execute();
diff --git a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
index 1e6511fd68..90895b186f 100644
--- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
+++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
@@ -213,17 +213,17 @@ public function testMultipleTargetBundles() {
     //   a way to catch and assert user-triggered errors.
 
     // Test the case when the field config settings are inconsistent.
-    // unset($handler_settings['auto_create_bundle']);
-    // $field_config->setSetting('handler_settings', $handler_settings);
-    // $field_config->save();
+    //unset($handler_settings['auto_create_bundle']);
+    //$field_config->setSetting('handler_settings', $handler_settings);
+    //$field_config->save();
     //
-    // $this->drupalGet('node/add/' . $this->referencingType);
-    // $error_message = sprintf(
+    //$this->drupalGet('node/add/' . $this->referencingType);
+    //$error_message = sprintf(
     //  "Create referenced entities if they don't already exist option is enabled but a specific destination bundle is not set. You should re-visit and fix the settings of the '%s' (%s) field.",
     //  $field_config->getLabel(),
     //  $field_config->getName()
-    // );
-    // $this->assertErrorLogged($error_message);
+    //);
+    //$this->assertErrorLogged($error_message);
   }
 
 }
diff --git a/core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php b/core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php
index 5f4c8ee46b..2b0be855dd 100644
--- a/core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php
+++ b/core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php
@@ -272,7 +272,7 @@ public function testDataTableRelationshipWithLongFieldName() {
       $this->assertEqual($row->_entity->id(), $this->entities[$index]->id());
 
       // Test the forward relationship.
-      // $this->assertEqual($row->entity_test_entity_test_mul__field_data_test_id, 1);
+      //$this->assertEqual($row->entity_test_entity_test_mul__field_data_test_id, 1);
 
       // Test that the correct relationship entity is on the row.
       $this->assertEqual($row->_relationship_entities['field_test_data_with_a_long_name']->id(), 1);
diff --git a/core/modules/field/tests/src/Kernel/FieldCrudTest.php b/core/modules/field/tests/src/Kernel/FieldCrudTest.php
index 6407be7520..08fe18c5c2 100644
--- a/core/modules/field/tests/src/Kernel/FieldCrudTest.php
+++ b/core/modules/field/tests/src/Kernel/FieldCrudTest.php
@@ -269,11 +269,12 @@ public function testUpdateField() {
   }
 
   /**
-   * Test the deletion of a field with no data.
+   * Test the deletion of a field.
    */
-  public function testDeleteFieldNoData() {
-    // Deleting and purging fields with data is tested in
-    // \Drupal\Tests\field\Kernel\BulkDeleteTest.
+  public function testDeleteField() {
+    // TODO: Test deletion of the data stored in the field also.
+    // Need to check that data for a 'deleted' field / storage doesn't get loaded
+    // Need to check data marked deleted is cleaned on cron (not implemented yet...)
 
     // Create two fields for the same field storage so we can test that only one
     // is deleted.
@@ -288,18 +289,17 @@ public function testDeleteFieldNoData() {
     $this->assertTrue(!empty($field) && empty($field->deleted), 'A new field is not marked for deletion.');
     $field->delete();
 
-    // Make sure the field was deleted without being marked for purging as there
-    // was no data.
-    $fields = entity_load_multiple_by_properties('field_config', ['entity_type' => 'entity_test', 'field_name' => $this->fieldDefinition['field_name'], 'bundle' => $this->fieldDefinition['bundle'], 'include_deleted' => TRUE]);
-    $this->assertEquals(0, count($fields), 'A deleted field is marked for deletion.');
+    // Make sure the field is marked as deleted when it is specifically loaded.
+    $field = current(entity_load_multiple_by_properties('field_config', ['entity_type' => 'entity_test', 'field_name' => $this->fieldDefinition['field_name'], 'bundle' => $this->fieldDefinition['bundle'], 'include_deleted' => TRUE]));
+    $this->assertTrue($field->isDeleted(), 'A deleted field is marked for deletion.');
 
     // Try to load the field normally and make sure it does not show up.
     $field = FieldConfig::load('entity_test.' . '.' . $this->fieldDefinition['bundle'] . '.' . $this->fieldDefinition['field_name']);
-    $this->assertTrue(empty($field), 'Field was deleted');
+    $this->assertTrue(empty($field), 'A deleted field is not loaded by default.');
 
     // Make sure the other field is not deleted.
     $another_field = FieldConfig::load('entity_test.' . $another_field_definition['bundle'] . '.' . $another_field_definition['field_name']);
-    $this->assertTrue(!empty($another_field) && !$another_field->isDeleted(), 'A non-deleted field is not marked for deletion.');
+    $this->assertTrue(!empty($another_field) && empty($another_field->deleted), 'A non-deleted field is not marked for deletion.');
   }
 
   /**
diff --git a/core/modules/field/tests/src/Kernel/FieldDefinitionIntegrityTest.php b/core/modules/field/tests/src/Kernel/FieldDefinitionIntegrityTest.php
index 85d6b0bfc4..7e16e99339 100644
--- a/core/modules/field/tests/src/Kernel/FieldDefinitionIntegrityTest.php
+++ b/core/modules/field/tests/src/Kernel/FieldDefinitionIntegrityTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\field\Kernel;
 
-use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Extension\Extension;
 use Drupal\KernelTests\KernelTestBase;
 
@@ -22,28 +21,23 @@ class FieldDefinitionIntegrityTest extends KernelTestBase {
    * Tests the integrity of field plugin definitions.
    */
   public function testFieldPluginDefinitionIntegrity() {
-    // Enable all core modules that provide field plugins, and their
-    // dependencies.
+
+    // Enable all core modules that provide field plugins.
     $modules = system_rebuild_module_data();
     $modules = array_filter($modules, function (Extension $module) {
-      // Filter contrib, hidden, already enabled modules and modules in the
-      // Testing package.
+      // Filter contrib, hidden, experimental, already enabled modules, and
+      // modules in the Testing package.
       if ($module->origin === 'core'
         && empty($module->info['hidden'])
         && $module->status == FALSE
         && $module->info['package'] !== 'Testing'
+        && $module->info['package'] !== 'Core (Experimental)'
         && is_readable($module->getPath() . '/src/Plugin/Field')) {
         return TRUE;
       }
       return FALSE;
     });
-    // Gather the dependencies of the modules.
-    $dependencies = NestedArray::mergeDeepArray(array_map(function (Extension $module) {
-      return array_keys($module->requires);
-    }, $modules));
-    $modules = array_unique(NestedArray::mergeDeep(array_keys($modules), $dependencies));
-
-    $this->enableModules($modules);
+    $this->enableModules(array_keys($modules));
 
     /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_type_manager */
     $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
diff --git a/core/modules/field/tests/src/Kernel/FieldImportDeleteTest.php b/core/modules/field/tests/src/Kernel/FieldImportDeleteTest.php
index f3408a52a0..0eef137165 100644
--- a/core/modules/field/tests/src/Kernel/FieldImportDeleteTest.php
+++ b/core/modules/field/tests/src/Kernel/FieldImportDeleteTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\field\Kernel;
 
 use Drupal\Component\Utility\SafeMarkup;
-use Drupal\entity_test\Entity\EntityTest;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 
@@ -51,14 +50,6 @@ public function testImportDelete() {
     $field_config_name_2a = "field.field.$field_id_2a";
     $field_config_name_2b = "field.field.$field_id_2b";
 
-    // Create an entity with data in the first field to make sure that field
-    // needs to be purged.
-    $entity_test = EntityTest::create([
-      'type' => 'entity_test',
-    ]);
-    $entity_test->set($field_name, 'test data');
-    $entity_test->save();
-
     // Create a second bundle for the 'Entity test' entity type.
     entity_test_create_bundle('test_bundle');
 
@@ -106,10 +97,10 @@ public function testImportDelete() {
     $this->assertIdentical($active->listAll($field_config_name_2a), []);
     $this->assertIdentical($active->listAll($field_config_name_2b), []);
 
-    // Check that only the first storage definition is preserved in state.
+    // Check that the storage definition is preserved in state.
     $deleted_storages = \Drupal::state()->get('field.storage.deleted') ?: [];
     $this->assertTrue(isset($deleted_storages[$field_storage_uuid]));
-    $this->assertFalse(isset($deleted_storages[$field_storage_uuid_2]));
+    $this->assertTrue(isset($deleted_storages[$field_storage_uuid_2]));
 
     // Purge field data, and check that the storage definition has been
     // completely removed once the data is purged.
diff --git a/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php b/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php
index dfc50f21aa..f7993dcc7e 100644
--- a/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php
+++ b/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php
@@ -284,9 +284,8 @@ public function testIndexes() {
   /**
    * Test the deletion of a field storage.
    */
-  public function testDeleteNoData() {
-    // Deleting and purging field storages with data is tested in
-    // \Drupal\Tests\field\Kernel\BulkDeleteTest.
+  public function testDelete() {
+    // TODO: Also test deletion of the data stored in the field ?
 
     // Create two fields (so we can test that only one is deleted).
     $field_storage_definition = [
@@ -318,22 +317,23 @@ public function testDeleteNoData() {
     $this->assertTrue(!empty($field_storage) && !$field_storage->isDeleted(), 'A new storage is not marked for deletion.');
     FieldStorageConfig::loadByName('entity_test', $field_storage_definition['field_name'])->delete();
 
-    // Make sure that the field storage is deleted as it had no data.
-    $field_storages = entity_load_multiple_by_properties('field_storage_config', ['field_name' => $field_storage_definition['field_name'], 'include_deleted' => TRUE]);
-    $this->assertEquals(0, count($field_storages), 'Field storage was deleted');
+    // Make sure that the field is marked as deleted when it is specifically
+    // loaded.
+    $field_storage = current(entity_load_multiple_by_properties('field_storage_config', ['field_name' => $field_storage_definition['field_name'], 'include_deleted' => TRUE]));
+    $this->assertTrue($field_storage->isDeleted(), 'A deleted storage is marked for deletion.');
 
     // Make sure that this field is marked as deleted when it is
     // specifically loaded.
-    $fields = entity_load_multiple_by_properties('field_config', ['entity_type' => 'entity_test', 'field_name' => $field_definition['field_name'], 'bundle' => $field_definition['bundle'], 'include_deleted' => TRUE]);
-    $this->assertEquals(0, count($fields), 'Field storage was deleted');
+    $field = current(entity_load_multiple_by_properties('field_config', ['entity_type' => 'entity_test', 'field_name' => $field_definition['field_name'], 'bundle' => $field_definition['bundle'], 'include_deleted' => TRUE]));
+    $this->assertTrue($field->isDeleted(), 'A field whose storage was deleted is marked for deletion.');
 
     // Try to load the storage normally and make sure it does not show up.
     $field_storage = FieldStorageConfig::load('entity_test.' . $field_storage_definition['field_name']);
-    $this->assertTrue(empty($field_storage), 'Field storage was deleted');
+    $this->assertTrue(empty($field_storage), 'A deleted storage is not loaded by default.');
 
     // Try to load the field normally and make sure it does not show up.
     $field = FieldConfig::load('entity_test.' . '.' . $field_definition['bundle'] . '.' . $field_definition['field_name']);
-    $this->assertTrue(empty($field), 'Field was deleted');
+    $this->assertTrue(empty($field), 'A field whose storage was deleted is not loaded by default.');
 
     // Make sure the other field and its storage are not deleted.
     $another_field_storage = FieldStorageConfig::load('entity_test.' . $another_field_storage_definition['field_name']);
@@ -433,9 +433,8 @@ public function testUpdateForbid() {
       'type' => 'test_field',
       'settings' => [
         'changeable' => 0,
-        'unchangeable' => 0,
-      ],
-    ]);
+        'unchangeable' => 0
+    ]]);
     $field_storage->save();
     $field_storage->setSetting('changeable', $field_storage->getSetting('changeable') + 1);
     try {
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
index 576e86a795..dd38569de1 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
@@ -56,7 +56,7 @@ protected function setUp() {
       'label' => $this->randomMachineName(),
     ])->save();
     CommentType::create([
-      'id' => 'comment_forum',
+      'id' => 'comment_node_forum',
       'label' => $this->randomMachineName(),
     ])->save();
     CommentType::create([
@@ -97,7 +97,7 @@ protected function setUp() {
     Database::getConnection('default', 'migrate')
       ->update('field_config_instance')
       ->fields([
-        'data' => serialize([
+        'data' => serialize( [
           'label' => 'Body',
           'widget' =>
              [
@@ -122,7 +122,9 @@ protected function setUp() {
                  [
                   'label' => 'hidden',
                   'type' => 'text_default',
-                  'settings' => [],
+                  'settings' =>
+                     [
+                    ],
                   'module' => 'text',
                   'weight' => 0,
                 ],
@@ -213,8 +215,8 @@ public function testMigration() {
     $this->assertEntity('comment.comment_node_book.default');
     $this->assertComponent('comment.comment_node_book.default', 'comment_body', 'text_default', 'hidden', 0);
 
-    $this->assertEntity('comment.comment_forum.default');
-    $this->assertComponent('comment.comment_forum.default', 'comment_body', 'text_default', 'hidden', 0);
+    $this->assertEntity('comment.comment_node_forum.default');
+    $this->assertComponent('comment.comment_node_forum.default', 'comment_body', 'text_default', 'hidden', 0);
 
     $this->assertEntity('comment.comment_node_page.default');
     $this->assertComponent('comment.comment_node_page.default', 'comment_body', 'text_default', 'hidden', 0);
@@ -227,11 +229,6 @@ public function testMigration() {
     $this->assertComponent('node.article.default', 'body', 'text_default', 'hidden', 0);
     $this->assertComponent('node.article.default', 'field_tags', 'entity_reference_label', 'above', 10);
     $this->assertComponent('node.article.default', 'field_image', 'image', 'hidden', -1);
-    $this->assertComponent('node.article.default', 'field_text_plain', 'string', 'above', 11);
-    $this->assertComponent('node.article.default', 'field_text_filtered', 'text_default', 'above', 12);
-    $this->assertComponent('node.article.default', 'field_text_long_plain', 'basic_string', 'above', 14);
-    $this->assertComponent('node.article.default', 'field_text_long_filtered', 'text_default', 'above', 15);
-    $this->assertComponent('node.article.default', 'field_text_sum_filtered', 'text_default', 'above', 18);
 
     $this->assertEntity('node.article.teaser');
     $this->assertComponent('node.article.teaser', 'body', 'text_summary_or_trimmed', 'hidden', 0);
@@ -260,11 +257,6 @@ public function testMigration() {
 
     $this->assertEntity('node.page.default');
     $this->assertComponent('node.page.default', 'body', 'text_default', 'hidden', 0);
-    $this->assertComponent('node.page.default', 'field_text_plain', 'string', 'above', 1);
-    $this->assertComponent('node.page.default', 'field_text_filtered', 'text_default', 'above', 2);
-    $this->assertComponent('node.page.default', 'field_text_long_plain', 'basic_string', 'above', 4);
-    $this->assertComponent('node.page.default', 'field_text_long_filtered', 'text_default', 'above', 5);
-    $this->assertComponent('node.page.default', 'field_text_sum_filtered', 'text_default', 'above', 8);
 
     $this->assertEntity('node.page.teaser');
     $this->assertComponent('node.page.teaser', 'body', 'text_summary_or_trimmed', 'hidden', 0);
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index 7ec5bf41d5..ef12ac1617 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -2,11 +2,12 @@
 
 namespace Drupal\Tests\field\Kernel\Migrate\d7;
 
+use Drupal\comment\Entity\CommentType;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\FieldConfigInterface;
 use Drupal\taxonomy\Entity\Vocabulary;
-use Drupal\Tests\migrate\Kernel\NodeCommentCombinationTrait;
 use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
+use Drupal\node\Entity\NodeType;
 
 /**
  * Migrates Drupal 7 field instances.
@@ -15,10 +16,10 @@
  */
 class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
 
-  use NodeCommentCombinationTrait;
-
   /**
-   * {@inheritdoc}
+   * The modules to be enabled during the test.
+   *
+   * @var array
    */
   public static $modules = [
     'comment',
@@ -39,16 +40,35 @@ class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
     $this->installConfig(static::$modules);
-    $this->createNodeCommentCombination('page');
-    $this->createNodeCommentCombination('article');
-    $this->createNodeCommentCombination('blog');
-    $this->createNodeCommentCombination('book');
-    $this->createNodeCommentCombination('forum', 'comment_forum');
-    $this->createNodeCommentCombination('test_content_type');
+    $this->createType('page');
+    $this->createType('article');
+    $this->createType('blog');
+    $this->createType('book');
+    $this->createType('forum');
+    $this->createType('test_content_type');
     Vocabulary::create(['vid' => 'test_vocabulary'])->save();
     $this->executeMigrations(['d7_field', 'd7_field_instance']);
   }
 
+  /**
+   * Creates a node type with a corresponding comment type.
+   *
+   * @param string $id
+   *   The node type ID.
+   */
+  protected function createType($id) {
+    NodeType::create([
+      'type' => $id,
+      'label' => $this->randomString(),
+    ])->save();
+
+    CommentType::create([
+      'id' => 'comment_node_' . $id,
+      'label' => $this->randomString(),
+      'target_entity_type_id' => 'node',
+    ])->save();
+  }
+
   /**
    * Asserts various aspects of a field config entity.
    *
@@ -68,15 +88,15 @@ protected function assertEntity($id, $expected_label, $expected_field_type, $is_
 
     /** @var \Drupal\field\FieldConfigInterface $field */
     $field = FieldConfig::load($id);
-    $this->assertInstanceOf(FieldConfigInterface::class, $field);
-    $this->assertEquals($expected_label, $field->label());
-    $this->assertEquals($expected_field_type, $field->getType());
-    $this->assertEquals($expected_entity_type, $field->getTargetEntityTypeId());
-    $this->assertEquals($expected_bundle, $field->getTargetBundle());
-    $this->assertEquals($expected_name, $field->getName());
-    $this->assertEquals($is_required, $field->isRequired());
-    $this->assertEquals($expected_entity_type . '.' . $expected_name, $field->getFieldStorageDefinition()->id());
-    $this->assertEquals($expected_translatable, $field->isTranslatable());
+    $this->assertTrue($field instanceof FieldConfigInterface);
+    $this->assertIdentical($expected_label, $field->label());
+    $this->assertIdentical($expected_field_type, $field->getType());
+    $this->assertIdentical($expected_entity_type, $field->getTargetEntityTypeId());
+    $this->assertIdentical($expected_bundle, $field->getTargetBundle());
+    $this->assertIdentical($expected_name, $field->getName());
+    $this->assertEqual($is_required, $field->isRequired());
+    $this->assertIdentical($expected_entity_type . '.' . $expected_name, $field->getFieldStorageDefinition()->id());
+    $this->assertSame($expected_translatable, $field->isTranslatable());
   }
 
   /**
@@ -107,7 +127,7 @@ public function testFieldInstances() {
     $this->assertEntity('comment.comment_node_book.comment_body', 'Comment', 'text_long', TRUE, FALSE);
     $this->assertEntity('node.book.body', 'Body', 'text_with_summary', FALSE, FALSE);
     $this->assertEntity('node.forum.taxonomy_forums', 'Forums', 'entity_reference', TRUE, FALSE);
-    $this->assertEntity('comment.comment_forum.comment_body', 'Comment', 'text_long', TRUE, FALSE);
+    $this->assertEntity('comment.comment_node_forum.comment_body', 'Comment', 'text_long', TRUE, FALSE);
     $this->assertEntity('node.forum.body', 'Body', 'text_with_summary', FALSE, FALSE);
     $this->assertEntity('comment.comment_node_test_content_type.comment_body', 'Comment', 'text_long', TRUE, FALSE);
     $this->assertEntity('node.test_content_type.field_boolean', 'Boolean', 'boolean', FALSE, FALSE);
@@ -124,7 +144,7 @@ public function testFieldInstances() {
     $this->assertEntity('node.test_content_type.field_integer_list', 'Integer List', 'list_integer', FALSE, FALSE);
     $this->assertEntity('node.test_content_type.field_long_text', 'Long text', 'text_with_summary', FALSE, FALSE);
     $this->assertEntity('node.test_content_type.field_term_reference', 'Term Reference', 'entity_reference', FALSE, FALSE);
-    $this->assertEntity('node.test_content_type.field_text', 'Text', 'string', FALSE, FALSE);
+    $this->assertEntity('node.test_content_type.field_text', 'Text', 'text', FALSE, FALSE);
     $this->assertEntity('comment.comment_node_test_content_type.field_integer', 'Integer', 'integer', FALSE, FALSE);
     $this->assertEntity('user.user.field_file', 'File', 'file', FALSE, FALSE);
 
@@ -134,63 +154,4 @@ public function testFieldInstances() {
     $this->assertLinkFields('node.blog.field_link', DRUPAL_REQUIRED);
   }
 
-  /**
-   * Tests the migration of text field instances with different text processing.
-   */
-  public function testTextFieldInstances() {
-    // All text and text_long field instances using a field base that has only
-    // plain text instances should be migrated to string and string_long fields.
-    // All text_with_summary field instances using a field base that has only
-    // plain text instances should not have been migrated since there's no such
-    // thing as a string_with_summary field.
-    $this->assertEntity('node.page.field_text_plain', 'Text plain', 'string', FALSE, FALSE);
-    $this->assertEntity('node.article.field_text_plain', 'Text plain', 'string', FALSE, TRUE);
-    $this->assertEntity('node.page.field_text_long_plain', 'Text long plain', 'string_long', FALSE, FALSE);
-    $this->assertEntity('node.article.field_text_long_plain', 'Text long plain', 'string_long', FALSE, TRUE);
-    $this->assertNull(FieldConfig::load('node.page.field_text_sum_plain'));
-    $this->assertNull(FieldConfig::load('node.article.field_text_sum_plain'));
-
-    // All text, text_long and text_with_summary field instances using a field
-    // base that has only filtered text instances should be migrated to text,
-    // text_long and text_with_summary fields.
-    $this->assertEntity('node.page.field_text_filtered', 'Text filtered', 'text', FALSE, FALSE);
-    $this->assertEntity('node.article.field_text_filtered', 'Text filtered', 'text', FALSE, TRUE);
-    $this->assertEntity('node.page.field_text_long_filtered', 'Text long filtered', 'text_long', FALSE, FALSE);
-    $this->assertEntity('node.article.field_text_long_filtered', 'Text long filtered', 'text_long', FALSE, TRUE);
-    $this->assertEntity('node.page.field_text_sum_filtered', 'Text summary filtered', 'text_with_summary', FALSE, FALSE);
-    $this->assertEntity('node.article.field_text_sum_filtered', 'Text summary filtered', 'text_with_summary', FALSE, TRUE);
-
-    // All text, text_long and text_with_summary field instances using a field
-    // base that has both plain text and filtered text instances should not have
-    // been migrated.
-    $this->assertNull(FieldConfig::load('node.page.field_text_plain_filtered'));
-    $this->assertNull(FieldConfig::load('node.article.field_text_plain_filtered'));
-    $this->assertNull(FieldConfig::load('node.page.field_text_long_plain_filtered'));
-    $this->assertNull(FieldConfig::load('node.article.field_text_long_plain_filtered'));
-    $this->assertNull(FieldConfig::load('node.page.field_text_sum_plain_filtered'));
-    $this->assertNull(FieldConfig::load('node.article.field_text_sum_plain_filtered'));
-
-    // For each text field instances that were skipped, there should be a log
-    // message with the required steps to fix this.
-    $migration = $this->getMigration('d7_field_instance');
-    $messages = $migration->getIdMap()->getMessageIterator()->fetchAll();
-    $errors = array_map(function($message) {
-      return $message->message;
-    }, $messages);
-    $this->assertCount(8, $errors);
-    sort($errors);
-    $message = 'Can\'t migrate source field field_text_long_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
-    $this->assertEquals($errors[0], $message);
-    $this->assertEquals($errors[1], $message);
-    $message = 'Can\'t migrate source field field_text_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
-    $this->assertEquals($errors[2], $message);
-    $this->assertEquals($errors[3], $message);
-    $message = 'Can\'t migrate source field field_text_sum_plain of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
-    $this->assertEquals($errors[4], $message);
-    $this->assertEquals($errors[5], $message);
-    $message = 'Can\'t migrate source field field_text_sum_plain_filtered of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
-    $this->assertEquals($errors[6], $message);
-    $this->assertEquals($errors[7], $message);
-  }
-
 }
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
index ee4d204af3..994140d064 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
@@ -96,21 +96,11 @@ protected function assertComponent($display_id, $component_id, $widget_type, $we
   public function testWidgetSettings() {
     $this->assertEntity('node.page.default', 'node', 'page');
     $this->assertComponent('node.page.default', 'body', 'text_textarea_with_summary', -4);
-    $this->assertComponent('node.page.default', 'field_text_plain', 'string_textfield', -2);
-    $this->assertComponent('node.page.default', 'field_text_filtered', 'text_textfield', 0);
-    $this->assertComponent('node.page.default', 'field_text_long_plain', 'string_textarea', 4);
-    $this->assertComponent('node.page.default', 'field_text_long_filtered', 'text_textarea', 6);
-    $this->assertComponent('node.page.default', 'field_text_sum_filtered', 'text_textarea_with_summary', 12);
 
     $this->assertEntity('node.article.default', 'node', 'article');
     $this->assertComponent('node.article.default', 'body', 'text_textarea_with_summary', -4);
     $this->assertComponent('node.article.default', 'field_tags', 'entity_reference_autocomplete', -4);
     $this->assertComponent('node.article.default', 'field_image', 'image_image', -1);
-    $this->assertComponent('node.article.default', 'field_text_plain', 'string_textfield', 11);
-    $this->assertComponent('node.article.default', 'field_text_filtered', 'text_textfield', 12);
-    $this->assertComponent('node.article.default', 'field_text_long_plain', 'string_textarea', 14);
-    $this->assertComponent('node.article.default', 'field_text_long_filtered', 'text_textarea', 15);
-    $this->assertComponent('node.article.default', 'field_text_sum_filtered', 'text_textarea_with_summary', 18);
 
     $this->assertEntity('node.blog.default', 'node', 'blog');
     $this->assertComponent('node.blog.default', 'body', 'text_textarea_with_summary', -4);
@@ -139,7 +129,7 @@ public function testWidgetSettings() {
     $this->assertComponent('node.test_content_type.default', 'field_node_entityreference', 'entity_reference_autocomplete', 16);
     $this->assertComponent('node.test_content_type.default', 'field_user_entityreference', 'options_buttons', 17);
     $this->assertComponent('node.test_content_type.default', 'field_term_entityreference', 'entity_reference_autocomplete_tags', 18);
-    $this->assertComponent('node.test_content_type.default', 'field_text', 'string_textfield', 15);
+    $this->assertComponent('node.test_content_type.default', 'field_text', 'text_textfield', 15);
     $this->assertComponent('node.test_content_type.default', 'field_text_list', 'options_select', 11);
 
     $this->assertEntity('user.user.default', 'user', 'user');
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
index b53fa80870..c0af33898a 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
@@ -57,11 +57,11 @@ protected function assertEntity($id, $expected_type, $expected_translatable, $ex
 
     /** @var \Drupal\field\FieldStorageConfigInterface $field */
     $field = FieldStorageConfig::load($id);
-    $this->assertInstanceOf(FieldStorageConfigInterface::class, $field);
-    $this->assertEquals($expected_name, $field->getName());
-    $this->assertEquals($expected_type, $field->getType());
-    $this->assertEquals($expected_translatable, $field->isTranslatable());
-    $this->assertEquals($expected_entity_type, $field->getTargetEntityTypeId());
+    $this->assertTrue($field instanceof FieldStorageConfigInterface);
+    $this->assertIdentical($expected_name, $field->getName());
+    $this->assertIdentical($expected_type, $field->getType());
+    $this->assertEqual($expected_translatable, $field->isTranslatable());
+    $this->assertIdentical($expected_entity_type, $field->getTargetEntityTypeId());
 
     if ($expected_cardinality === 1) {
       $this->assertFalse($field->isMultiple());
@@ -69,7 +69,7 @@ protected function assertEntity($id, $expected_type, $expected_translatable, $ex
     else {
       $this->assertTrue($field->isMultiple());
     }
-    $this->assertEquals($expected_cardinality, $field->getCardinality());
+    $this->assertIdentical($expected_cardinality, $field->getCardinality());
   }
 
   /**
@@ -91,7 +91,7 @@ public function testFields() {
     $this->assertEntity('node.field_tags', 'entity_reference', TRUE, -1);
     $this->assertEntity('node.field_term_reference', 'entity_reference', TRUE, 1);
     $this->assertEntity('node.taxonomy_forums', 'entity_reference', TRUE, 1);
-    $this->assertEntity('node.field_text', 'string', TRUE, 1);
+    $this->assertEntity('node.field_text', 'text', TRUE, 1);
     $this->assertEntity('node.field_text_list', 'list_string', TRUE, 3);
     $this->assertEntity('node.field_boolean', 'boolean', TRUE, 1);
     $this->assertEntity('node.field_email', 'email', TRUE, -1);
@@ -105,59 +105,24 @@ public function testFields() {
     // Assert that the taxonomy term reference fields are referencing the
     // correct entity type.
     $field = FieldStorageConfig::load('node.field_term_reference');
-    $this->assertEquals('taxonomy_term', $field->getSetting('target_type'));
+    $this->assertIdentical('taxonomy_term', $field->getSetting('target_type'));
     $field = FieldStorageConfig::load('node.taxonomy_forums');
-    $this->assertEquals('taxonomy_term', $field->getSetting('target_type'));
+    $this->assertIdentical('taxonomy_term', $field->getSetting('target_type'));
 
     // Assert that the entityreference fields are referencing the correct
     // entity type.
     $field = FieldStorageConfig::load('node.field_node_entityreference');
-    $this->assertEquals('node', $field->getSetting('target_type'));
+    $this->assertIdentical('node', $field->getSetting('target_type'));
     $field = FieldStorageConfig::load('node.field_user_entityreference');
-    $this->assertEquals('user', $field->getSetting('target_type'));
+    $this->assertIdentical('user', $field->getSetting('target_type'));
     $field = FieldStorageConfig::load('node.field_term_entityreference');
-    $this->assertEquals('taxonomy_term', $field->getSetting('target_type'));
-  }
-
-  /**
-   * Tests the migration of text fields with different text processing.
-   */
-  public function testTextFields() {
-    // All text and text_long field bases that have only plain text instances
-    // should be migrated to string and string_long fields.
-    // All text_with_summary field bases that have only plain text instances
-    // should not have been migrated since there's no such thing as a
-    // string_with_summary field.
-    $this->assertEntity('node.field_text_plain', 'string', TRUE, 1);
-    $this->assertEntity('node.field_text_long_plain', 'string_long', TRUE, 1);
-    $this->assertNull(FieldStorageConfig::load('node.field_text_sum_plain'));
-
-    // All text, text_long and text_with_summary field bases that have only
-    // filtered text instances should be migrated to text, text_long and
-    // text_with_summary fields.
-    $this->assertEntity('node.field_text_filtered', 'text', TRUE, 1);
-    $this->assertEntity('node.field_text_long_filtered', 'text_long', TRUE, 1);
-    $this->assertEntity('node.field_text_sum_filtered', 'text_with_summary', TRUE, 1);
-
-    // All text, text_long and text_with_summary field bases that have both
-    // plain text and filtered text instances should not have been migrated.
-    $this->assertNull(FieldStorageConfig::load('node.field_text_plain_filtered'));
-    $this->assertNull(FieldStorageConfig::load('node.field_text_long_plain_filtered'));
-    $this->assertNull(FieldStorageConfig::load('node.field_text_sum_plain_filtered'));
+    $this->assertIdentical('taxonomy_term', $field->getSetting('target_type'));
 
-    // For each text field bases that were skipped, there should be a log
-    // message with the required steps to fix this.
+    // Validate that the source count and processed count match up.
+    /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */
     $migration = $this->getMigration('d7_field');
-    $messages = $migration->getIdMap()->getMessageIterator()->fetchAll();
-    $errors = array_map(function($message) {
-      return $message->message;
-    }, $messages);
-    sort($errors);
-    $this->assertCount(4, $errors);
-    $this->assertEquals($errors[0], 'Can\'t migrate source field field_text_long_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text');
-    $this->assertEquals($errors[1], 'Can\'t migrate source field field_text_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text');
-    $this->assertEquals($errors[2], 'Can\'t migrate source field field_text_sum_plain of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text');
-    $this->assertEquals($errors[3], 'Can\'t migrate source field field_text_sum_plain_filtered of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text');
+    $this->assertSame($migration->getSourcePlugin()
+      ->count(), $migration->getIdMap()->processedCount());
   }
 
 }
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
index 0a7e9dcc0d..ac94a87e4e 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
@@ -34,6 +34,8 @@ protected function setUp() {
    *   The expected label of the view mode.
    * @param string $entity_type
    *   The expected entity type ID which owns the view mode.
+   * @param bool $status
+   *   The expected status of the view mode.
    */
   protected function assertEntity($id, $label, $entity_type) {
     /** @var \Drupal\Core\Entity\EntityViewModeInterface $view_mode */
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php
index 4d93d18b1c..e71ac3ce95 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php
@@ -35,7 +35,7 @@ public function testFieldInstances() {
       'comment.comment_node_book.comment_body',
       'node.book.body',
       'node.forum.taxonomy_forums',
-      'comment.comment_forum.comment_body',
+      'comment.comment_node_forum.comment_body',
       'node.forum.body',
       'comment.comment_node_test_content_type.comment_body',
       'node.test_content_type.field_boolean',
diff --git a/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php b/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
index ba47d91307..578eeda9c6 100644
--- a/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
+++ b/core/modules/field/tests/src/Kernel/Number/NumberItemTest.php
@@ -93,7 +93,7 @@ public function testNumberItem() {
     $this->assertEqual($entity->field_float->value, $new_float);
     $this->assertEqual($entity->field_decimal->value, $new_decimal);
 
-    // Test sample item generation.
+    /// Test sample item generation.
     $entity = EntityTest::create();
     $entity->field_integer->generateSampleItems();
     $entity->field_float->generateSampleItems();
diff --git a/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php b/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
index b7dadf4926..d1824cfcce 100644
--- a/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
+++ b/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
@@ -10,9 +10,6 @@
 use Drupal\Core\Entity\EntityType;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\Tests\UnitTestCase;
 
@@ -36,20 +33,6 @@ class FieldConfigEntityUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
-  /**
-   * The entity field manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityFieldManager;
-
   /**
    * The ID of the type of the entity under test.
    *
@@ -92,9 +75,7 @@ protected function setUp() {
     $this->entityTypeId = $this->randomMachineName();
     $this->entityType = $this->getMock('\Drupal\Core\Config\Entity\ConfigEntityTypeInterface');
 
-    $this->entityManager = new EntityManager();
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class);
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
 
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
@@ -104,14 +85,9 @@ protected function setUp() {
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_field.manager', $this->entityFieldManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('uuid', $this->uuid);
     $container->set('config.typed', $this->typedConfigManager);
     $container->set('plugin.manager.field.field_type', $this->fieldTypePluginManager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager, etc.
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
 
     // Create a mock FieldStorageConfig object.
@@ -126,7 +102,7 @@ protected function setUp() {
       ->method('getSettings')
       ->willReturn([]);
     // Place the field in the mocked entity manager's field registry.
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getFieldStorageDefinitions')
       ->with('test_entity_type')
       ->will($this->returnValue([
@@ -144,19 +120,19 @@ public function testCalculateDependencies() {
       ->method('getBundleConfigDependency')
       ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id']));
 
-    $this->entityTypeManager->expects($this->at(0))
+    $this->entityManager->expects($this->at(0))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(2))
+    $this->entityManager->expects($this->at(2))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(3))
+    $this->entityManager->expects($this->at(3))
       ->method('getDefinition')
       ->with('test_entity_type')
       ->willReturn($target_entity_type);
@@ -192,7 +168,7 @@ public function testCalculateDependenciesIncorrectBundle() {
       ->with('test_bundle_not_exists')
       ->will($this->returnValue(NULL));
 
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getStorage')
       ->with('bundle_entity_type')
       ->will($this->returnValue($storage));
@@ -202,19 +178,19 @@ public function testCalculateDependenciesIncorrectBundle() {
       'bundle_entity_type' => 'bundle_entity_type',
     ]);
 
-    $this->entityTypeManager->expects($this->at(0))
+    $this->entityManager->expects($this->at(0))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(2))
+    $this->entityManager->expects($this->at(2))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->willReturn($this->entityType);
-    $this->entityTypeManager->expects($this->at(3))
+    $this->entityManager->expects($this->at(3))
       ->method('getDefinition')
       ->with('test_entity_type')
       ->willReturn($target_entity_type);
@@ -291,7 +267,7 @@ public function testToArray() {
       'dependencies' => [],
       'field_type' => 'test_field',
     ];
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -313,7 +289,7 @@ public function testToArray() {
   public function testGetType() {
     // Ensure that FieldConfig::getType() is not delegated to
     // FieldStorage.
-    $this->entityFieldManager->expects($this->never())
+    $this->entityManager->expects($this->never())
       ->method('getFieldStorageDefinitions');
     $this->fieldStorage->expects($this->never())
       ->method('getType');
diff --git a/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php b/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
index 1d47017563..4ed7512333 100644
--- a/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
+++ b/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
@@ -6,9 +6,8 @@
 use Drupal\Core\Cache\Context\CacheContextsManager;
 use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\DependencyInjection\Container;
-use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\field\Entity\FieldStorageConfig;
@@ -127,37 +126,31 @@ protected function setUp() {
     $storage_access_control_handler = new FieldStorageConfigAccessControlHandler($storageType);
     $storage_access_control_handler->setModuleHandler($this->moduleHandler);
 
-    $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
-    $entity_type_manager
+    $entityManager = $this->getMock(EntityManagerInterface::class);
+    $entityManager
       ->expects($this->any())
       ->method('getDefinition')
       ->willReturnMap([
         ['field_storage_config', TRUE, $storageType],
         ['node', TRUE, $entityType],
       ]);
-    $entity_type_manager
+    $entityManager
       ->expects($this->any())
       ->method('getStorage')
       ->willReturnMap([
         ['field_storage_config', $this->getMock(EntityStorageInterface::class)],
       ]);
-    $entity_type_manager
+    $entityManager
       ->expects($this->any())
       ->method('getAccessControlHandler')
       ->willReturnMap([
         ['field_storage_config', $storage_access_control_handler],
       ]);
 
-    $entity_manager = new EntityManager();
-
     $container = new Container();
-    $container->set('entity.manager', $entity_manager);
-    $container->set('entity_type.manager', $entity_type_manager);
+    $container->set('entity.manager', $entityManager);
     $container->set('uuid', $this->getMock(UuidInterface::class));
     $container->set('cache_contexts_manager', $this->prophesize(CacheContextsManager::class));
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager.
-    $entity_manager->setContainer($container);
     \Drupal::setContainer($container);
 
     $this->fieldStorage = new FieldStorageConfig([
diff --git a/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php b/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
index 970532a3e8..89b73963ba 100644
--- a/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
+++ b/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
@@ -8,8 +8,6 @@
 namespace Drupal\Tests\field\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\FieldException;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
@@ -24,11 +22,11 @@
 class FieldStorageConfigEntityUnitTest extends UnitTestCase {
 
   /**
-   * The entity type manager used for testing.
+   * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The ID of the type of the entity under test.
@@ -55,19 +53,14 @@ class FieldStorageConfigEntityUnitTest extends UnitTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
-    $entity_manager = new EntityManager();
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
     $this->fieldTypeManager = $this->getMock(FieldTypePluginManagerInterface::class);
 
     $container = new ContainerBuilder();
-    $container->set('entity.manager', $entity_manager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('uuid', $this->uuid);
     $container->set('plugin.manager.field.field_type', $this->fieldTypeManager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager.
-    $entity_manager->setContainer($container);
     \Drupal::setContainer($container);
   }
 
@@ -92,7 +85,7 @@ public function testCalculateDependencies() {
     // ConfigEntityBase::addDependency() to get the provider of the field config
     // entity type and once in FieldStorageConfig::calculateDependencies() to
     // get the provider of the entity type that field is attached to.
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->willReturnMap([
         ['field_storage_config', TRUE, $fieldStorageConfigentityType],
diff --git a/core/modules/field/tests/src/Unit/Plugin/migrate/process/ProcessFieldTest.php b/core/modules/field/tests/src/Unit/Plugin/migrate/process/ProcessFieldTest.php
deleted file mode 100644
index db9709e2e7..0000000000
--- a/core/modules/field/tests/src/Unit/Plugin/migrate/process/ProcessFieldTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-namespace Drupal\Tests\field\Unit\Plugin\migrate\process;
-
-use Drupal\Component\Plugin\Exception\PluginNotFoundException;
-use Drupal\field\Plugin\migrate\process\ProcessField;
-use Drupal\migrate\MigrateException;
-use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface;
-use Drupal\migrate_drupal\Plugin\MigrateFieldInterface;
-use Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface;
-use Drupal\Tests\migrate\Unit\MigrateTestCase;
-
-/**
- * Tests the ProcessField migrate process plugin.
- *
- * @coversDefaultClass \Drupal\field\Plugin\migrate\process\ProcessField
- * @group field
- * @group legacy
- */
-class ProcessFieldTest extends MigrateTestCase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->cckFieldManager = $this->prophesize(MigrateCckFieldPluginManagerInterface::class);
-    $this->fieldManager = $this->prophesize(MigrateFieldPluginManagerInterface::class);
-    $this->fieldPlugin = $this->prophesize(MigrateFieldInterface::class);
-    $this->migrateExecutable = $this->prophesize(MigrateExecutable::class);
-    $this->migration = $this->prophesize(MigrationInterface::class);
-    $this->row = $this->prophesize(Row::class);
-
-    $this->fieldManager->getPluginIdFromFieldType('foo', [], $this->migration->reveal())->willReturn('foo');
-    $this->fieldManager->createInstance('foo', [], $this->migration->reveal())->willReturn($this->fieldPlugin);
-
-    parent::setUp();
-  }
-
-  /**
-   * Tests the transform method.
-   *
-   * @param string $method
-   *   The method to call.
-   * @param string $value
-   *   The value to process.
-   * @param mixed $expected_value
-   *   The expected transformed value.
-   * @param string $migrate_exception
-   *   The MigrateException message to expect.
-   * @param bool $plugin_not_found
-   *   Whether the field plugin is not found.
-   *
-   * @covers ::transform
-   * @dataProvider providerTestTransform
-   */
-  public function testTransform($method, $value, $expected_value, $migrate_exception = '', $plugin_not_found = FALSE) {
-    if ($method) {
-      $this->fieldPlugin->$method($this->row->reveal())->willReturn($expected_value);
-    }
-    $this->plugin = new ProcessField(['method' => $method], $value, [], $this->cckFieldManager->reveal(), $this->fieldManager->reveal(), $this->migration->reveal());
-
-    if ($migrate_exception) {
-      $this->setExpectedException(MigrateException::class, $migrate_exception);
-    }
-
-    if ($plugin_not_found) {
-      $exception = new PluginNotFoundException('foo');
-      $this->cckFieldManager->getPluginIdFromFieldType()->willThrow($exception);
-      $this->fieldManager->getPluginIdFromFieldType()->willThrow($exception);
-    }
-
-    $transformed_value = $this->plugin->transform($value, $this->migrateExecutable->reveal(), $this->row->reveal(), 'foo');
-    $this->assertSame($transformed_value, $expected_value);
-  }
-
-  /**
-   * Provides data for the transform method test.
-   *
-   * @return array
-   *   - The method to call.
-   *   - The value to process.
-   *   - The expected transformed value.
-   *   - The MigrateException message to expect.
-   *   - Whether the field plugin is not found.
-   */
-  public function providerTestTransform() {
-    return [
-      // Tests the getFieldType() method.
-      [
-        'method' => 'getFieldType',
-        'value' => 'foo',
-        'expected_value' => 'bar',
-      ],
-      // Tests the getFieldFormatterMap() method.
-      [
-        'method' => 'getFieldFormatterMap',
-        'value' => 'foo',
-        'expected_value' => ['foo' => 'bar'],
-      ],
-      // Tests the getFieldWidgetMap() method.
-      [
-        'method' => 'getFieldWidgetMap',
-        'value' => 'foo',
-        'expected_value' => ['foo' => 'bar'],
-      ],
-      // Tests that an exception is thrown if the value is not a string.
-      [
-        'method' => 'getFieldType',
-        'value' => ['foo'],
-        'expected_value' => '',
-        'migrate_exception' => 'The input value must be a string.',
-      ],
-      // Tests that an exception is thrown if no method name is provided.
-      [
-        'method' => '',
-        'value' => '',
-        'expected_value' => '',
-        'migrate_exception' => 'You need to specify the name of a method to be called on the Field plugin.',
-      ],
-      // Tests that NULL is returned if no field plugin is found.
-      [
-        'method' => 'getFieldType',
-        'value' => 'foo',
-        'expected_value' => NULL,
-        'migrate_exception' => '',
-        'plugin_not_found' => TRUE,
-      ],
-    ];
-  }
-
-}
diff --git a/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php b/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php
index 9bab0b5431..058e6c361a 100644
--- a/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php
+++ b/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php
@@ -28,9 +28,9 @@ protected function setUp() {
     $this->createNode([
       'type' => 'article',
       'title' => 'The node title',
-      'body' => [
-        ['value' => 'The node body'],
-      ],
+      'body' => [[
+        'value' => 'The node body',
+      ]],
     ]);
     $this->drupalLogin($this->drupalCreateUser([
       'access administration pages',
diff --git a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
index 162d22329c..8ddbeafa0d 100644
--- a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
+++ b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
@@ -25,9 +25,9 @@ protected function setUp() {
 
     $entity = EntityTest::create([
       'name' => 'The name for this entity',
-      'field_test_text' => [
-        ['value' => 'The field test text value'],
-      ],
+      'field_test_text' => [[
+        'value' => 'The field test text value',
+      ]],
     ]);
     $entity->save();
     $this->drupalLogin($this->drupalCreateUser([
diff --git a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
index 29f4367bb8..49a45e1cd9 100644
--- a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
+++ b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
@@ -107,13 +107,11 @@ protected function getCardinalityForm() {
       '#parents' => [],
       '#type' => 'fieldset',
       '#title' => $this->t('Allowed number of values'),
-      '#attributes' => [
-        'class' => [
-          'container-inline',
-          'fieldgroup',
-          'form-composite',
-        ],
-      ],
+      '#attributes' => ['class' => [
+        'container-inline',
+        'fieldgroup',
+        'form-composite',
+      ]],
     ];
 
     if ($enforced_cardinality = $this->getEnforcedCardinality()) {
diff --git a/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php b/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
index 78764fb32d..3bb0b139d7 100644
--- a/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
+++ b/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
@@ -2,9 +2,6 @@
 
 namespace Drupal\Tests\field_ui\Functional;
 
-use Drupal\Core\Entity\Entity\EntityFormMode;
-use Drupal\Core\Entity\Entity\EntityViewMode;
-use Drupal\Core\Url;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -71,14 +68,6 @@ public function testEntityViewModeUI() {
     // Test editing the view mode.
     $this->drupalGet('admin/structure/display-modes/view/manage/entity_test.' . $edit['id']);
 
-    // Test that the link templates added by field_ui_entity_type_build() are
-    // generating valid routes.
-    $view_mode = EntityViewMode::load('entity_test.' . $edit['id']);
-    $this->assertEquals(Url::fromRoute('entity.entity_view_mode.collection')->toString(), $view_mode->toUrl('collection')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_view_mode.add_form', ['entity_type_id' => $view_mode->getTargetType()])->toString(), $view_mode->toUrl('add-form')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_view_mode.edit_form', ['entity_view_mode' => $view_mode->id()])->toString(), $view_mode->toUrl('edit-form')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_view_mode.delete_form', ['entity_view_mode' => $view_mode->id()])->toString(), $view_mode->toUrl('delete-form')->toString());
-
     // Test deleting the view mode.
     $this->clickLink(t('Delete'));
     $this->assertRaw(t('Are you sure you want to delete the view mode %label?', ['%label' => $edit['label']]));
@@ -125,14 +114,6 @@ public function testEntityFormModeUI() {
     // Test editing the form mode.
     $this->drupalGet('admin/structure/display-modes/form/manage/entity_test.' . $edit['id']);
 
-    // Test that the link templates added by field_ui_entity_type_build() are
-    // generating valid routes.
-    $form_mode = EntityFormMode::load('entity_test.' . $edit['id']);
-    $this->assertEquals(Url::fromRoute('entity.entity_form_mode.collection')->toString(), $form_mode->toUrl('collection')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_form_mode.add_form', ['entity_type_id' => $form_mode->getTargetType()])->toString(), $form_mode->toUrl('add-form')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_form_mode.edit_form', ['entity_form_mode' => $form_mode->id()])->toString(), $form_mode->toUrl('edit-form')->toString());
-    $this->assertEquals(Url::fromRoute('entity.entity_form_mode.delete_form', ['entity_form_mode' => $form_mode->id()])->toString(), $form_mode->toUrl('delete-form')->toString());
-
     // Test deleting the form mode.
     $this->clickLink(t('Delete'));
     $this->assertRaw(t('Are you sure you want to delete the form mode %label?', ['%label' => $edit['label']]));
diff --git a/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php b/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php
index ae2c56c954..6da3c41b1b 100644
--- a/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php
+++ b/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php
@@ -25,9 +25,9 @@ protected function setUp() {
 
     $entity = EntityTest::create([
       'name' => 'The name for this entity',
-      'field_test_text' => [
-        ['value' => 'The field test text value'],
-      ],
+      'field_test_text' => [[
+        'value' => 'The field test text value',
+      ]],
     ]);
     $entity->save();
     $this->drupalLogin($this->drupalCreateUser([
diff --git a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
index 2d02e44a55..4a0e533be3 100644
--- a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
@@ -129,7 +129,7 @@ public function testEntityDisplayCRUDSort() {
     $display->save();
     $components = array_keys($display->getComponents());
     // The name field is not configurable so will be added automatically.
-    $expected = [0 => 'component_1', 1 => 'component_2', 2 => 'component_3', 'name'];
+    $expected = [ 0 => 'component_1', 1 => 'component_2', 2 => 'component_3', 'name'];
     $this->assertIdentical($components, $expected);
   }
 
@@ -150,7 +150,7 @@ public function testEntityGetDisplay() {
     $display = entity_get_display('entity_test', 'entity_test', 'default');
     $this->assertFalse($display->isNew());
     $this->assertEqual($display->id(), 'entity_test.entity_test.default');
-    $this->assertEqual($display->getComponent('component_1'), ['weight' => 10, 'settings' => [], 'third_party_settings' => [], 'region' => 'content']);
+    $this->assertEqual($display->getComponent('component_1'), [ 'weight' => 10, 'settings' => [], 'third_party_settings' => [], 'region' => 'content']);
   }
 
   /**
diff --git a/core/modules/file/config/schema/file.schema.yml b/core/modules/file/config/schema/file.schema.yml
index 336550904b..42d57d9a64 100644
--- a/core/modules/file/config/schema/file.schema.yml
+++ b/core/modules/file/config/schema/file.schema.yml
@@ -51,7 +51,7 @@ base_file_field_field_settings:
       label: 'Reference method'
     handler_settings:
       type: entity_reference_selection.[%parent.handler]
-      label: 'File selection handler settings'
+      label: 'Entity reference selection settings'
     file_directory:
       type: string
       label: 'File directory'
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 845cc5d623..6902db6812 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -1208,9 +1208,7 @@ function file_managed_file_save_upload($element, FormStateInterface $form_state)
 
     // Value callback expects FIDs to be keys.
     $files = array_filter($files);
-    $fids = array_map(function($file) {
-      return $file->id();
-    }, $files);
+    $fids = array_map(function($file) { return $file->id(); }, $files);
 
     return empty($files) ? [] : array_combine($fids, $files);
   }
diff --git a/core/modules/file/migration_templates/d6_upload_field.yml b/core/modules/file/migration_templates/d6_upload_field.yml
index ecd095949e..a919f918ff 100644
--- a/core/modules/file/migration_templates/d6_upload_field.yml
+++ b/core/modules/file/migration_templates/d6_upload_field.yml
@@ -6,7 +6,7 @@ source:
   # We do an empty source and a proper destination to have an idmap for
   # migration_dependencies.
   plugin: md_empty
-  source_module: upload
+  provider: upload
   constants:
     entity_type: node
     type: file
diff --git a/core/modules/file/migration_templates/file_settings.yml b/core/modules/file/migration_templates/file_settings.yml
index 9af18085f3..36584ccf8e 100644
--- a/core/modules/file/migration_templates/file_settings.yml
+++ b/core/modules/file/migration_templates/file_settings.yml
@@ -9,7 +9,6 @@ source:
     - file_description_type
     - file_description_length
     - file_icon_directory
-  source_module: system
 process:
   'description/type': file_description_type
   'description/length': file_description_length
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index a9ade9e7d6..a68b9bae9b 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -190,10 +190,7 @@ public function preSave(EntityStorageInterface $storage) {
 
     // The file itself might not exist or be available right now.
     $uri = $this->getFileUri();
-    $size = @filesize($uri);
-
-    // Set size unless there was an error.
-    if ($size !== FALSE) {
+    if ($size = @filesize($uri)) {
       $this->setSize($size);
     }
   }
diff --git a/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php b/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php
index a1912e05ee..f1ca2d1d65 100644
--- a/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php
+++ b/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php
@@ -22,4 +22,4 @@
  *
  * @see \Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase::needsAccessCheck()
  */
-interface FileAccessFormatterControlHandlerInterface extends EntityAccessControlHandlerInterface {}
+interface FileAccessFormatterControlHandlerInterface extends EntityAccessControlHandlerInterface { }
diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php b/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
index c7cf0f04e4..9a4dc8339b 100644
--- a/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
+++ b/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
@@ -13,7 +13,7 @@ class FileFieldItemList extends EntityReferenceFieldItemList {
   /**
    * {@inheritdoc}
    */
-  public function defaultValuesForm(array &$form, FormStateInterface $form_state) {}
+  public function defaultValuesForm(array &$form, FormStateInterface $form_state) { }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
index 542be122df..7373c4397f 100644
--- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
+++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
@@ -333,7 +333,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin
     $file = file_save_data($data, $destination, FILE_EXISTS_ERROR);
     $values = [
       'target_id' => $file->id(),
-      'display' => (int) $settings['display_default'],
+      'display' => (int)$settings['display_default'],
       'description' => $random->sentences(10),
     ];
     return $values;
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php b/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
index 373d1e90b7..d63b9c2901 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d6/FileField.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\file\Plugin\migrate\cckfield\d6;
 
-@trigger_error('FileField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\file\Plugin\migrate\field\d6\FileField instead.', E_USER_DEPRECATED);
-
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
@@ -13,11 +11,6 @@
  *   id = "filefield",
  *   core = {6}
  * )
- *
- *  @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\file\Plugin\migrate\field\d6\FileField instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class FileField extends CckFieldPluginBase {
 
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php b/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
index 9d184ff86a..d0b1335e80 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d7/FileField.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\file\Plugin\migrate\cckfield\d7;
 
-@trigger_error('FileField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\file\Plugin\migrate\field\d7\FileField instead.', E_USER_DEPRECATED);
-
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
@@ -13,11 +11,6 @@
  *   id = "file",
  *   core = {7}
  * )
- *
- * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\file\Plugin\migrate\field\d7\FileField instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class FileField extends CckFieldPluginBase {
 
diff --git a/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php b/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
index 45f5b9d239..ad24ae24f1 100644
--- a/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
+++ b/core/modules/file/src/Plugin/migrate/cckfield/d7/ImageField.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\file\Plugin\migrate\cckfield\d7;
 
-@trigger_error('ImageField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\file\Plugin\migrate\field\d7\ImageField instead.', E_USER_DEPRECATED);
-
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
 
@@ -12,14 +10,16 @@
  *   id = "image",
  *   core = {7}
  * )
- *
- * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\file\Plugin\migrate\field\d7\ImageField instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class ImageField extends CckFieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/file/src/Plugin/migrate/field/d6/FileField.php b/core/modules/file/src/Plugin/migrate/field/d6/FileField.php
deleted file mode 100644
index 930c13b030..0000000000
--- a/core/modules/file/src/Plugin/migrate/field/d6/FileField.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-namespace Drupal\file\Plugin\migrate\field\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "filefield",
- *   core = {6}
- * )
- */
-class FileField extends FieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldWidgetMap() {
-    return [
-      'filefield_widget' => 'file_generic',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterMap() {
-    return [
-      'default' => 'file_default',
-      'url_plain' => 'file_url_plain',
-      'path_plain' => 'file_url_plain',
-      'image_plain' => 'image',
-      'image_nodelink' => 'image',
-      'image_imagelink' => 'image',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'd6_field_file',
-      'source' => $field_name,
-    ];
-    $migration->mergeProcessOfProperty($field_name, $process);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldType(Row $row) {
-    return $row->getSourceProperty('widget_type') == 'imagefield_widget' ? 'image' : 'file';
-  }
-
-}
diff --git a/core/modules/file/src/Plugin/migrate/field/d7/FileField.php b/core/modules/file/src/Plugin/migrate/field/d7/FileField.php
deleted file mode 100644
index 4243d43c42..0000000000
--- a/core/modules/file/src/Plugin/migrate/field/d7/FileField.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace Drupal\file\Plugin\migrate\field\d7;
-
-use Drupal\file\Plugin\migrate\field\d6\FileField as D6FileField;
-use Drupal\migrate\Plugin\MigrationInterface;
-
-/**
- * @MigrateField(
- *   id = "file",
- *   core = {7}
- * )
- */
-class FileField extends D6FileField {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'iterator',
-      'source' => $field_name,
-      'process' => [
-        'target_id' => 'fid',
-        'display' => 'display',
-        'description' => 'description',
-      ],
-    ];
-    $migration->mergeProcessOfProperty($field_name, $process);
-  }
-
-}
diff --git a/core/modules/file/src/Plugin/migrate/field/d7/ImageField.php b/core/modules/file/src/Plugin/migrate/field/d7/ImageField.php
deleted file mode 100644
index 7783ae2886..0000000000
--- a/core/modules/file/src/Plugin/migrate/field/d7/ImageField.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\file\Plugin\migrate\field\d7;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "image",
- *   core = {7}
- * )
- */
-class ImageField extends FieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'iterator',
-      'source' => $field_name,
-      'process' => [
-        'target_id' => 'fid',
-        'alt' => 'alt',
-        'title' => 'title',
-        'width' => 'width',
-        'height' => 'height',
-      ],
-    ];
-    $migration->mergeProcessOfProperty($field_name, $process);
-  }
-
-}
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/CckFile.php b/core/modules/file/src/Plugin/migrate/process/d6/CckFile.php
index 7ebd157043..8cf2d19a4a 100644
--- a/core/modules/file/src/Plugin/migrate/process/d6/CckFile.php
+++ b/core/modules/file/src/Plugin/migrate/process/d6/CckFile.php
@@ -2,16 +2,91 @@
 
 namespace Drupal\file\Plugin\migrate\process\d6;
 
-@trigger_error('CckFile is deprecated in Drupal 8.3.x and will be be removed before Drupal 9.0.x. Use \Drupal\file\Plugin\migrate\process\d6\FieldFile instead.', E_USER_DEPRECATED);
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Plugin\MigrateProcessInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * @MigrateProcessPlugin(
  *   id = "d6_cck_file"
  * )
- *
- *  @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\file\Plugin\migrate\process\d6\FieldFile instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
-class CckFile extends FieldFile {}
+class CckFile extends ProcessPluginBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The migration process plugin, configured for lookups in d6_file.
+   *
+   * @var \Drupal\migrate\Plugin\MigrateProcessInterface
+   */
+  protected $migrationPlugin;
+
+  /**
+   * Constructs a CckFile plugin instance.
+   *
+   * @param array $configuration
+   *   The plugin configuration.
+   * @param string $plugin_id
+   *   The plugin ID.
+   * @param mixed $plugin_definition
+   *   The plugin definition.
+   * @param \Drupal\migrate\Plugin\MigrationInterface $migration
+   *   The current migration.
+   * @param \Drupal\migrate\Plugin\MigrateProcessInterface $migration_plugin
+   *   An instance of the 'migration' process plugin.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateProcessInterface $migration_plugin) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->migration = $migration;
+    $this->migrationPlugin = $migration_plugin;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    // Configure the migration process plugin to look up migrated IDs from
+    // a d6 file migration.
+    $migration_plugin_configuration = $configuration + [
+      'migration' => 'd6_file',
+      'source' => ['fid'],
+    ];
+
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('plugin.manager.migrate.process')->createInstance('migration', $migration_plugin_configuration, $migration)
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    $options = unserialize($value['data']);
+
+    // Try to look up the ID of the migrated file. If one cannot be found, it
+    // means the file referenced by the current field item did not migrate for
+    // some reason -- file migration is notoriously brittle -- and we do NOT
+    // want to send invalid file references into the field system (it causes
+    // fatals), so return an empty item instead.
+    if ($fid = $this->migrationPlugin->transform($value['fid'], $migrate_executable, $row, $destination_property)) {
+      return [
+        'target_id' => $fid,
+        'display' => $value['list'],
+        'description' => isset($options['description']) ? $options['description'] : '',
+        'alt' => isset($options['alt']) ? $options['alt'] : '',
+        'title' => isset($options['title']) ? $options['title'] : '',
+      ];
+    }
+    else {
+      return [];
+    }
+  }
+
+}
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php b/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
deleted file mode 100644
index 3b907a3607..0000000000
--- a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-namespace Drupal\file\Plugin\migrate\process\d6;
-
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\MigrateExecutableInterface;
-use Drupal\migrate\Plugin\MigrateProcessInterface;
-use Drupal\migrate\ProcessPluginBase;
-use Drupal\migrate\Row;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * @MigrateProcessPlugin(
- *   id = "d6_field_file"
- * )
- */
-class FieldFile extends ProcessPluginBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The migration process plugin, configured for lookups in d6_file.
-   *
-   * @var \Drupal\migrate\Plugin\MigrateProcessInterface
-   */
-  protected $migrationPlugin;
-
-  /**
-   * Constructs a FieldFile plugin instance.
-   *
-   * @param array $configuration
-   *   The plugin configuration.
-   * @param string $plugin_id
-   *   The plugin ID.
-   * @param mixed $plugin_definition
-   *   The plugin definition.
-   * @param \Drupal\migrate\Plugin\MigrationInterface $migration
-   *   The current migration.
-   * @param \Drupal\migrate\Plugin\MigrateProcessInterface $migration_plugin
-   *   An instance of the 'migration' process plugin.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateProcessInterface $migration_plugin) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-    $this->migration = $migration;
-    $this->migrationPlugin = $migration_plugin;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    // Configure the migration process plugin to look up migrated IDs from
-    // a d6 file migration.
-    $migration_plugin_configuration = $configuration + [
-      'migration' => 'd6_file',
-      'source' => ['fid'],
-    ];
-
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $migration,
-      $container->get('plugin.manager.migrate.process')->createInstance('migration', $migration_plugin_configuration, $migration)
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    $options = unserialize($value['data']);
-
-    // Try to look up the ID of the migrated file. If one cannot be found, it
-    // means the file referenced by the current field item did not migrate for
-    // some reason -- file migration is notoriously brittle -- and we do NOT
-    // want to send invalid file references into the field system (it causes
-    // fatals), so return an empty item instead.
-    if ($fid = $this->migrationPlugin->transform($value['fid'], $migrate_executable, $row, $destination_property)) {
-      return [
-        'target_id' => $fid,
-        'display' => $value['list'],
-        'description' => isset($options['description']) ? $options['description'] : '',
-        'alt' => isset($options['alt']) ? $options['alt'] : '',
-        'title' => isset($options['title']) ? $options['title'] : '',
-      ];
-    }
-    else {
-      return [];
-    }
-  }
-
-}
diff --git a/core/modules/file/src/Plugin/migrate/source/d6/File.php b/core/modules/file/src/Plugin/migrate/source/d6/File.php
index 714dec9635..0564b6b788 100644
--- a/core/modules/file/src/Plugin/migrate/source/d6/File.php
+++ b/core/modules/file/src/Plugin/migrate/source/d6/File.php
@@ -9,8 +9,7 @@
  * Drupal 6 file source from database.
  *
  * @MigrateSource(
- *   id = "d6_file",
- *   source_module = "system"
+ *   id = "d6_file"
  * )
  */
 class File extends DrupalSqlBase {
diff --git a/core/modules/file/src/Plugin/migrate/source/d6/Upload.php b/core/modules/file/src/Plugin/migrate/source/d6/Upload.php
index 475ce61f7a..4e07a236b5 100644
--- a/core/modules/file/src/Plugin/migrate/source/d6/Upload.php
+++ b/core/modules/file/src/Plugin/migrate/source/d6/Upload.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_upload",
- *   source_module = "upload"
+ *   source_provider = "upload"
  * )
  */
 class Upload extends DrupalSqlBase {
diff --git a/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php b/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php
index 06c2221292..c1b3345d76 100644
--- a/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php
+++ b/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_upload_instance",
- *   source_module = "upload"
+ *   source_provider = "upload"
  * )
  */
 class UploadInstance extends DrupalSqlBase {
@@ -25,9 +25,7 @@ protected function initializeIterator() {
       ->fields('nt', ['type'])
       ->execute()
       ->fetchCol();
-    $variables = array_map(function($type) {
-      return 'upload_' . $type;
-    }, $node_types);
+    $variables = array_map(function($type) { return 'upload_' . $type; }, $node_types);
 
     $max_filesize = $this->variableGet('upload_uploadsize_default', 1);
     $max_filesize = $max_filesize ? $max_filesize . 'MB' : '';
diff --git a/core/modules/file/src/Plugin/migrate/source/d7/File.php b/core/modules/file/src/Plugin/migrate/source/d7/File.php
index 5e88151229..e418f825bb 100644
--- a/core/modules/file/src/Plugin/migrate/source/d7/File.php
+++ b/core/modules/file/src/Plugin/migrate/source/d7/File.php
@@ -10,8 +10,7 @@
  * Drupal 7 file source from database.
  *
  * @MigrateSource(
- *   id = "d7_file",
- *   source_module = "file"
+ *   id = "d7_file"
  * )
  */
 class File extends DrupalSqlBase {
diff --git a/core/modules/file/tests/src/Functional/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php b/core/modules/file/src/Tests/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php
similarity index 81%
rename from core/modules/file/tests/src/Functional/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php
rename to core/modules/file/src/Tests/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php
index e9973def61..f1fef088cf 100644
--- a/core/modules/file/tests/src/Functional/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php
+++ b/core/modules/file/src/Tests/Update/FileUsageTemporaryDeletionConfigurationUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\file\Functional\Update;
+namespace Drupal\file\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests the upgrade path for setting the file usage deletion configuration.
@@ -23,7 +23,7 @@ class FileUsageTemporaryDeletionConfigurationUpdateTest extends UpdatePathTestBa
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/file/tests/src/Kernel/Migrate/d7/FileMigrationSetupTrait.php b/core/modules/file/tests/src/Kernel/Migrate/d7/FileMigrationSetupTrait.php
deleted file mode 100644
index a59176b784..0000000000
--- a/core/modules/file/tests/src/Kernel/Migrate/d7/FileMigrationSetupTrait.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Kernel\Migrate\d7;
-
-
-use Drupal\Core\StreamWrapper\PublicStream;
-use Drupal\Core\StreamWrapper\StreamWrapperInterface;
-
-/**
- * A trait to setup the file migration.
- */
-trait FileMigrationSetupTrait {
-
-  /**
-   * Prepare the file migration for running.
-   */
-  protected function fileMigrationSetup() {
-    $this->installSchema('file', ['file_usage']);
-    $this->installEntitySchema('file');
-    $this->container->get('stream_wrapper_manager')->registerWrapper('public', PublicStream::class, StreamWrapperInterface::NORMAL);
-
-    $fs = \Drupal::service('file_system');
-    // The public file directory active during the test will serve as the
-    // root of the fictional Drupal 7 site we're migrating.
-    $fs->mkdir('public://sites/default/files', NULL, TRUE);
-    file_put_contents('public://sites/default/files/cube.jpeg', str_repeat('*', 3620));
-
-    /** @var \Drupal\migrate\Plugin\Migration $migration */
-    $migration = $this->getMigration('d7_file');
-    // Set the source plugin's source_base_path configuration value, which
-    // would normally be set by the user running the migration.
-    $source = $migration->getSourceConfiguration();
-    $source['constants']['source_base_path'] = $fs->realpath('public://');
-    $migration->set('source', $source);
-    $this->executeMigration($migration);
-  }
-
-}
diff --git a/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php b/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php
index 88d7c79e55..240c9e0a96 100644
--- a/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php
+++ b/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\file\Kernel\Migrate\d7;
 
+use Drupal\Core\StreamWrapper\StreamWrapperInterface;
 use Drupal\file\Entity\File;
 use Drupal\file\FileInterface;
 use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
@@ -13,8 +14,6 @@
  */
 class MigrateFileTest extends MigrateDrupal7TestBase {
 
-  use FileMigrationSetupTrait;
-
   public static $modules = ['file'];
 
   /**
@@ -23,7 +22,23 @@ class MigrateFileTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->fileMigrationSetup();
+    $this->installEntitySchema('file');
+    $this->container->get('stream_wrapper_manager')->registerWrapper('public', 'Drupal\Core\StreamWrapper\PublicStream', StreamWrapperInterface::NORMAL);
+
+    $fs = \Drupal::service('file_system');
+    // The public file directory active during the test will serve as the
+    // root of the fictional Drupal 7 site we're migrating.
+    $fs->mkdir('public://sites/default/files', NULL, TRUE);
+    file_put_contents('public://sites/default/files/cube.jpeg', str_repeat('*', 3620));
+
+    /** @var \Drupal\migrate\Plugin\Migration $migration */
+    $migration = $this->getMigration('d7_file');
+    // Set the source plugin's source_base_path configuration value, which
+    // would normally be set by the user running the migration.
+    $source = $migration->getSourceConfiguration();
+    $source['constants']['source_base_path'] = $fs->realpath('public://');
+    $migration->set('source', $source);
+    $this->executeMigration($migration);
   }
 
   /**
diff --git a/core/modules/file/tests/src/Kernel/Migrate/process/d6/CckFileTest.php b/core/modules/file/tests/src/Kernel/Migrate/process/d6/CckFileTest.php
index e0e1934502..1c60c95d21 100644
--- a/core/modules/file/tests/src/Kernel/Migrate/process/d6/CckFileTest.php
+++ b/core/modules/file/tests/src/Kernel/Migrate/process/d6/CckFileTest.php
@@ -12,7 +12,6 @@
  * @coversDefaultClass \Drupal\file\Plugin\migrate\process\d6\CckFile
  *
  * @group file
- * @group legacy
  */
 class CckFileTest extends MigrateDrupalTestBase {
 
diff --git a/core/modules/file/tests/src/Kernel/SaveTest.php b/core/modules/file/tests/src/Kernel/SaveTest.php
index 193c5684ec..87eb17b20d 100644
--- a/core/modules/file/tests/src/Kernel/SaveTest.php
+++ b/core/modules/file/tests/src/Kernel/SaveTest.php
@@ -81,22 +81,6 @@ public function testFileSave() {
     $this->assertEqual(1, count($fids));
     $this->assertEqual([$uppercase_file->id() => $uppercase_file->id()], $fids);
 
-    // Save a file with zero bytes.
-    $file = File::create([
-      'uid' => 1,
-      'filename' => 'no-druplicon.txt',
-      'uri' => 'public://no-druplicon.txt',
-      'filemime' => 'text/plain',
-      'status' => FILE_STATUS_PERMANENT,
-    ]);
-
-    file_put_contents($file->getFileUri(), '');
-
-    // Save it, inserting a new record.
-    $file->save();
-
-    // Check the file size was set to zero.
-    $this->assertSame(0, $file->getSize());
   }
 
 }
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d6/FileCckTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d6/FileCckTest.php
deleted file mode 100644
index 2997596d95..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d6/FileCckTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\cckfield\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\cckfield\d6\FileField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\cckfield\d6\FileField
- * @group file
- * @group legacy
- */
-class FileCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new FileField([], 'file', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processCckFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'd6_cck_file',
-      'source' => 'somefieldname',
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['image', 'imagefield_widget'],
-      ['file', 'filefield_widget'],
-      ['file', 'x_widget']
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/FileCckTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/FileCckTest.php
deleted file mode 100644
index 8503eae783..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/FileCckTest.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\cckfield\d7;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\cckfield\d7\FileField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\cckfield\d7\FileField
- * @group file
- * @group legacy
- */
-class FileCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new FileField([], 'file', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processCckFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'fid',
-        'display' => 'display',
-        'description' => 'description',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['image', 'imagefield_widget'],
-      ['file', 'filefield_widget'],
-      ['file', 'x_widget']
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/ImageCckTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/ImageCckTest.php
deleted file mode 100644
index 4a8f1ce996..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/cckfield/d7/ImageCckTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\cckfield\d7;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\cckfield\d7\ImageField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\cckfield\d7\ImageField
- * @group file
- * @group legacy
- */
-class ImageCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new ImageField([], 'image', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processCckFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'fid',
-        'alt' => 'alt',
-        'title' => 'title',
-        'width' => 'width',
-        'height' => 'height',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d6/FileFieldTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/field/d6/FileFieldTest.php
deleted file mode 100644
index 28d0842004..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d6/FileFieldTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\field\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\field\d6\FileField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\field\d6\FileField
- * @group file
- */
-class FileFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new FileField([], 'file', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'd6_field_file',
-      'source' => 'somefieldname',
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['image', 'imagefield_widget'],
-      ['file', 'filefield_widget'],
-      ['file', 'x_widget']
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/FileFieldTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/FileFieldTest.php
deleted file mode 100644
index 15d86a1096..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/FileFieldTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\field\d7;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\field\d7\FileField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\field\d7\FileField
- * @group file
- */
-class FileFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new FileField([], 'file', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'fid',
-        'display' => 'display',
-        'description' => 'description',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['image', 'imagefield_widget'],
-      ['file', 'filefield_widget'],
-      ['file', 'x_widget']
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/ImageFieldTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/ImageFieldTest.php
deleted file mode 100644
index 61fda03719..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/field/d7/ImageFieldTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\field\d7;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\file\Plugin\migrate\field\d7\ImageField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\file\Plugin\migrate\field\d7\ImageField
- * @group file
- */
-class ImageFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new ImageField([], 'image', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'fid',
-        'alt' => 'alt',
-        'title' => 'title',
-        'width' => 'width',
-        'height' => 'height',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/CckFileTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/CckFileTest.php
index 5bad279c0d..1cce9898e8 100644
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/CckFileTest.php
+++ b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/CckFileTest.php
@@ -11,7 +11,6 @@
 
 /**
  * @group file
- * @group legacy
  */
 class CckFileTest extends UnitTestCase {
 
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FieldFileTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FieldFileTest.php
deleted file mode 100644
index e57821c0a7..0000000000
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FieldFileTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace Drupal\Tests\file\Unit\Plugin\migrate\process\d6;
-
-use Drupal\file\Plugin\migrate\process\d6\FieldFile;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\MigrateExecutableInterface;
-use Drupal\migrate\Plugin\MigrateProcessInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-
-/**
- * @group file
- */
-class FieldFileTest extends UnitTestCase {
-
-  /**
-   * Tests that alt and title attributes are included in transformed values.
-   */
-  public function testTransformAltTitle() {
-    $executable = $this->prophesize(MigrateExecutableInterface::class)->reveal();
-    $row = $this->prophesize(Row::class)->reveal();
-    $migration = $this->prophesize(MigrationInterface::class)->reveal();
-
-    $migration_plugin = $this->prophesize(MigrateProcessInterface::class);
-    $migration_plugin->transform(1, $executable, $row, 'foo')->willReturn(1);
-
-    $plugin = new FieldFile([], 'd6_file', [], $migration, $migration_plugin->reveal());
-
-    $options = [
-      'alt' => 'Foobaz',
-      'title' => 'Wambooli',
-    ];
-    $value = [
-      'fid' => 1,
-      'list' => TRUE,
-      'data' => serialize($options),
-    ];
-
-    $transformed = $plugin->transform($value, $executable, $row, 'foo');
-    $expected = [
-      'target_id' => 1,
-      'display' => TRUE,
-      'description' => '',
-      'alt' => 'Foobaz',
-      'title' => 'Wambooli',
-    ];
-    $this->assertSame($expected, $transformed);
-  }
-
-}
diff --git a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php
index 5a5918208e..78d5082f6c 100644
--- a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php
+++ b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\file\Plugin\migrate\process\d6\FileUri;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Row;
 use Drupal\Tests\migrate\Unit\MigrateTestCase;
 
@@ -68,7 +69,7 @@ public function testTemporary() {
   }
 
   protected function doTransform(array $value) {
-    $executable = new MigrateExecutable($this->getMigration());
+    $executable = new MigrateExecutable($this->getMigration(), new MigrateMessage());
     $row = new Row();
 
     return (new FileUri([], 'file_uri', []))
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 87ff713bdf..e3095346dd 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -496,8 +496,8 @@ function _filter_url($text, $filter) {
   $valid_url_query_chars = '[a-zA-Z0-9!?\*\'@\(\);:&=\+\$\/%#\[\]\-_\.,~|]';
   $valid_url_query_ending_chars = '[a-zA-Z0-9_&=#\/]';
 
-  // full path
-  // and allow @ in a url, but only in the middle. Catch things like http://example.com/@user/
+  //full path
+  //and allow @ in a url, but only in the middle. Catch things like http://example.com/@user/
   $valid_url_path = '(?:(?:' . $valid_url_path_characters . '*(?:' . $valid_url_balanced_parens . $valid_url_path_characters . '*)*' . $valid_url_ending_characters . ')|(?:@' . $valid_url_path_characters . '+\/))';
 
   // Prepare domain name pattern.
diff --git a/core/modules/filter/migration_templates/d7_filter_settings.yml b/core/modules/filter/migration_templates/d7_filter_settings.yml
index f3182e36c9..d6239fc2e0 100644
--- a/core/modules/filter/migration_templates/d7_filter_settings.yml
+++ b/core/modules/filter/migration_templates/d7_filter_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - filter_fallback_format
-  source_module: filter
 process:
   fallback_format: filter_fallback_format
 destination:
diff --git a/core/modules/filter/src/Plugin/DataType/FilterFormat.php b/core/modules/filter/src/Plugin/DataType/FilterFormat.php
index f22c914321..11ef4cc4ed 100644
--- a/core/modules/filter/src/Plugin/DataType/FilterFormat.php
+++ b/core/modules/filter/src/Plugin/DataType/FilterFormat.php
@@ -27,9 +27,7 @@ public function getPossibleValues(AccountInterface $account = NULL) {
    * {@inheritdoc}
    */
   public function getPossibleOptions(AccountInterface $account = NULL) {
-    return array_map(function ($format) {
-      return $format->label();
-    }, filter_formats());
+    return array_map(function ($format) { return $format->label(); }, filter_formats());
   }
 
   /**
@@ -44,9 +42,7 @@ public function getSettableValues(AccountInterface $account = NULL) {
    */
   public function getSettableOptions(AccountInterface $account = NULL) {
     // @todo: Avoid calling functions but move to injected dependencies.
-    return array_map(function ($format) {
-      return $format->label();
-    }, filter_formats($account));
+    return array_map(function ($format) { return $format->label(); }, filter_formats($account));
   }
 
 }
diff --git a/core/modules/filter/src/Plugin/Filter/FilterHtml.php b/core/modules/filter/src/Plugin/Filter/FilterHtml.php
index f1a62c926a..6e800c3a52 100644
--- a/core/modules/filter/src/Plugin/Filter/FilterHtml.php
+++ b/core/modules/filter/src/Plugin/Filter/FilterHtml.php
@@ -285,9 +285,7 @@ public function getHTMLRestrictions() {
           // allowed attribute values with a wildcard. A wildcard by itself
           // would mean whitelisting all possible attribute values. But in that
           // case, one would not specify an attribute value at all.
-          $allowed_attribute_values = array_filter($allowed_attribute_values, function ($value) use ($star_protector) {
-            return $value !== '*';
-          });
+          $allowed_attribute_values = array_filter($allowed_attribute_values, function ($value) use ($star_protector) { return $value !== '*'; });
 
           if (empty($allowed_attribute_values)) {
             // If the value is the empty string all values are allowed.
@@ -373,9 +371,7 @@ public function tips($long = FALSE) {
       'q' => [$this->t('Quoted inline'), '<q>' . $this->t('Quoted inline') . '</q>'],
       // Assumes and describes tr, td, th.
       'table' => [$this->t('Table'), '<table> <tr><th>' . $this->t('Table header') . '</th></tr> <tr><td>' . $this->t('Table cell') . '</td></tr> </table>'],
-      'tr' => NULL,
-      'td' => NULL,
-      'th' => NULL,
+      'tr' => NULL, 'td' => NULL, 'th' => NULL,
       'del' => [$this->t('Deleted'), '<del>' . $this->t('Deleted') . '</del>'],
       'ins' => [$this->t('Inserted'), '<ins>' . $this->t('Inserted') . '</ins>'],
        // Assumes and describes li.
@@ -384,8 +380,7 @@ public function tips($long = FALSE) {
       'li' => NULL,
       // Assumes and describes dt and dd.
       'dl' => [$this->t('Definition lists are similar to other HTML lists. &lt;dl&gt; begins the definition list, &lt;dt&gt; begins the definition term and &lt;dd&gt; begins the definition description.'), '<dl> <dt>' . $this->t('First term') . '</dt> <dd>' . $this->t('First definition') . '</dd> <dt>' . $this->t('Second term') . '</dt> <dd>' . $this->t('Second definition') . '</dd> </dl>'],
-      'dt' => NULL,
-      'dd' => NULL,
+      'dt' => NULL, 'dd' => NULL,
       'h1' => [$this->t('Heading'), '<h1>' . $this->t('Title') . '</h1>'],
       'h2' => [$this->t('Heading'), '<h2>' . $this->t('Subtitle') . '</h2>'],
       'h3' => [$this->t('Heading'), '<h3>' . $this->t('Subtitle three') . '</h3>'],
@@ -401,17 +396,19 @@ public function tips($long = FALSE) {
           ['data' => $tips[$tag][0], 'class' => ['description']],
           // The markup must be escaped because this is the example code for the
           // user.
-          [
-            'data' => [
+          ['data' =>
+            [
               '#prefix' => '<code>',
               '#plain_text' => $tips[$tag][1],
-              '#suffix' => '</code>',
+              '#suffix' => '</code>'
             ],
-            'class' => ['type'],
-          ],
+            'class' => ['type']],
           // The markup must not be escaped because this is the example output
           // for the user.
-          ['data' => ['#markup' => $tips[$tag][1]], 'class' => ['get']],
+          ['data' =>
+            ['#markup' => $tips[$tag][1]],
+            'class' => ['get'],
+          ],
         ];
       }
       else {
diff --git a/core/modules/filter/src/Plugin/migrate/source/d6/FilterFormat.php b/core/modules/filter/src/Plugin/migrate/source/d6/FilterFormat.php
index de9ab4c238..54b33d48dc 100644
--- a/core/modules/filter/src/Plugin/migrate/source/d6/FilterFormat.php
+++ b/core/modules/filter/src/Plugin/migrate/source/d6/FilterFormat.php
@@ -9,8 +9,7 @@
  * Drupal 6 filter source from database.
  *
  * @MigrateSource(
- *   id = "d6_filter_format",
- *   source_module = "filter"
+ *   id = "d6_filter_format"
  * )
  */
 class FilterFormat extends DrupalSqlBase {
diff --git a/core/modules/filter/src/Plugin/migrate/source/d7/FilterFormat.php b/core/modules/filter/src/Plugin/migrate/source/d7/FilterFormat.php
index 13438f2923..55c2811100 100644
--- a/core/modules/filter/src/Plugin/migrate/source/d7/FilterFormat.php
+++ b/core/modules/filter/src/Plugin/migrate/source/d7/FilterFormat.php
@@ -9,8 +9,7 @@
  * Drupal 7 filter source from database.
  *
  * @MigrateSource(
- *   id = "d7_filter_format",
- *   source_module = "filter"
+ *   id = "d7_filter_format"
  * )
  */
 class FilterFormat extends DrupalSqlBase {
diff --git a/core/modules/filter/tests/src/Functional/FilterAdminTest.php b/core/modules/filter/tests/src/Functional/FilterAdminTest.php
index a6e429304e..21431e7969 100644
--- a/core/modules/filter/tests/src/Functional/FilterAdminTest.php
+++ b/core/modules/filter/tests/src/Functional/FilterAdminTest.php
@@ -4,7 +4,6 @@
 
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Url;
 use Drupal\filter\Entity\FilterFormat;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
@@ -136,9 +135,16 @@ public function testFormatAdmin() {
 
     // Edit text format.
     $this->drupalGet('admin/config/content/formats');
-    $destination = Url::fromRoute('filter.admin_overview')->toString();
-    $edit_href = Url::fromRoute('entity.filter_format.edit_form', ['filter_format' => $format_id], ['query' => ['destination' => $destination]])->toString();
-    $this->assertSession()->linkByHrefExists($edit_href);
+    // Cannot use the assertNoLinkByHref method as it does partial url matching
+    // and 'admin/config/content/formats/manage/' . $format_id . '/disable'
+    // exists.
+    // @todo: See https://www.drupal.org/node/2031223 for the above.
+    $edit_link = $this->xpath('//a[@href=:href]', [
+      ':href' => \Drupal::url('entity.filter_format.edit_form', ['filter_format' => $format_id])
+    ]);
+    $this->assertNotEmpty($edit_link, format_string('Link href %href found.',
+      ['%href' => 'admin/config/content/formats/manage/' . $format_id]
+    ));
     $this->drupalGet('admin/config/content/formats/manage/' . $format_id);
     $this->drupalPostForm(NULL, [], t('Save configuration'));
 
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index b668956746..51472cf8c5 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -455,14 +455,11 @@ function template_preprocess_forums(&$variables) {
           $variables['topics'][$id]->title_link = \Drupal::l($topic->getTitle(), $topic->urlInfo());
           $variables['topics'][$id]->message = '';
         }
-        $forum_submitted = [
-          '#theme' => 'forum_submitted',
-          '#topic' => (object) [
-            'uid' => $topic->getOwnerId(),
-            'name' => $topic->getOwner()->getDisplayName(),
-            'created' => $topic->getCreatedTime(),
-          ],
-        ];
+        $forum_submitted = ['#theme' => 'forum_submitted', '#topic' => (object) [
+          'uid' => $topic->getOwnerId(),
+          'name' => $topic->getOwner()->getDisplayName(),
+          'created' => $topic->getCreatedTime(),
+        ]];
         $variables['topics'][$id]->submitted = \Drupal::service('renderer')->render($forum_submitted);
         $forum_submitted = [
           '#theme' => 'forum_submitted',
diff --git a/core/modules/forum/migration_templates/d6_forum_settings.yml b/core/modules/forum/migration_templates/d6_forum_settings.yml
index 406eed383e..18ba8d403f 100644
--- a/core/modules/forum/migration_templates/d6_forum_settings.yml
+++ b/core/modules/forum/migration_templates/d6_forum_settings.yml
@@ -11,7 +11,6 @@ source:
     - forum_block_num_0
     - forum_block_num_1
     - forum_nav_vocabulary
-  source_module: forum
 process:
   'block/active/limit': forum_block_num_0
   'block/new/limit': forum_block_num_1
diff --git a/core/modules/forum/migration_templates/d7_forum_settings.yml b/core/modules/forum/migration_templates/d7_forum_settings.yml
index 70d690a6e1..086d3e6fc9 100644
--- a/core/modules/forum/migration_templates/d7_forum_settings.yml
+++ b/core/modules/forum/migration_templates/d7_forum_settings.yml
@@ -11,7 +11,6 @@ source:
     - forum_block_num_active
     - forum_block_num_new
     - forum_nav_vocabulary
-  source_module: forum
 process:
   'block/active/limit': forum_block_num_active
   'block/new/limit': forum_block_num_new
diff --git a/core/modules/forum/src/Form/Overview.php b/core/modules/forum/src/Form/Overview.php
index 801888aabf..df6f94725a 100644
--- a/core/modules/forum/src/Form/Overview.php
+++ b/core/modules/forum/src/Form/Overview.php
@@ -58,30 +58,21 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     foreach (Element::children($form['terms']) as $key) {
       if (isset($form['terms'][$key]['#term'])) {
-        /** @var \Drupal\taxonomy\TermInterface $term */
         $term = $form['terms'][$key]['#term'];
         $form['terms'][$key]['term']['#url'] = Url::fromRoute('forum.page', ['taxonomy_term' => $term->id()]);
-
+        unset($form['terms'][$key]['operations']['#links']['delete']);
+        $route_parameters = $form['terms'][$key]['operations']['#links']['edit']['url']->getRouteParameters();
         if (!empty($term->forum_container->value)) {
-          $title = $this->t('edit container');
-          $url = Url::fromRoute('entity.taxonomy_term.forum_edit_container_form', ['taxonomy_term' => $term->id()]);
+          $form['terms'][$key]['operations']['#links']['edit']['title'] = $this->t('edit container');
+          $form['terms'][$key]['operations']['#links']['edit']['url'] = Url::fromRoute('entity.taxonomy_term.forum_edit_container_form', $route_parameters);
         }
         else {
-          $title = $this->t('edit forum');
-          $url = Url::fromRoute('entity.taxonomy_term.forum_edit_form', ['taxonomy_term' => $term->id()]);
+          $form['terms'][$key]['operations']['#links']['edit']['title'] = $this->t('edit forum');
+          $form['terms'][$key]['operations']['#links']['edit']['url'] = Url::fromRoute('entity.taxonomy_term.forum_edit_form', $route_parameters);
         }
-
-        // Re-create the operations column and add only the edit link.
-        $form['terms'][$key]['operations'] = [
-          '#type' => 'operations',
-          '#links' => [
-            'edit' => [
-              'title' => $title,
-              'url' => $url,
-            ],
-          ],
-        ];
-
+        // We don't want the redirect from the link so we can redirect the
+        // delete action.
+        unset($form['terms'][$key]['operations']['#links']['edit']['query']['destination']);
       }
     }
 
diff --git a/core/modules/forum/src/ForumIndexStorage.php b/core/modules/forum/src/ForumIndexStorage.php
index 20dacbd982..79945746c1 100644
--- a/core/modules/forum/src/ForumIndexStorage.php
+++ b/core/modules/forum/src/ForumIndexStorage.php
@@ -103,7 +103,7 @@ public function updateIndex(NodeInterface $node) {
         ':status' => CommentInterface::PUBLISHED,
       ])->fetchObject();
       $this->database->update('forum_index')
-        ->fields([
+        ->fields( [
           'comment_count' => $count,
           'last_comment_timestamp' => $last_reply->created,
         ])
@@ -114,7 +114,7 @@ public function updateIndex(NodeInterface $node) {
       // Comments do not exist.
       // @todo This should be actually filtering on the desired node language
       $this->database->update('forum_index')
-        ->fields([
+        ->fields( [
           'comment_count' => 0,
           'last_comment_timestamp' => $node->getCreatedTime(),
         ])
diff --git a/core/modules/forum/tests/src/Functional/ForumIndexTest.php b/core/modules/forum/tests/src/Functional/ForumIndexTest.php
index e3d904d368..38adb72ea8 100644
--- a/core/modules/forum/tests/src/Functional/ForumIndexTest.php
+++ b/core/modules/forum/tests/src/Functional/ForumIndexTest.php
@@ -57,8 +57,6 @@ public function testForumIndexStatus() {
       'parent[0]' => $tid,
     ];
     $this->drupalPostForm('admin/structure/forum/add/forum', $edit, t('Save'));
-    $this->assertSession()->linkExists(t('edit forum'));
-
     $tid_child = $tid + 1;
 
     // Verify that the node appears on the index.
diff --git a/core/modules/forum/tests/src/Functional/ForumTest.php b/core/modules/forum/tests/src/Functional/ForumTest.php
index 9ba4be7b2a..76823a757c 100644
--- a/core/modules/forum/tests/src/Functional/ForumTest.php
+++ b/core/modules/forum/tests/src/Functional/ForumTest.php
@@ -118,7 +118,7 @@ protected function setUp() {
    * Tests forum functionality through the admin and user interfaces.
    */
   public function testForum() {
-    // Check that the basic forum install creates a default forum topic
+    //Check that the basic forum install creates a default forum topic
     $this->drupalGet('/forum');
     // Look for the "General discussion" default forum
     $this->assertRaw(Link::createFromRoute(t('General discussion'), 'forum.page', ['taxonomy_term' => 1])->toString(), "Found the default forum at the /forum listing");
@@ -525,8 +525,8 @@ public function testForumWithNewPost() {
    * @param bool $container
    *   TRUE if $forum is a container; FALSE otherwise.
    *
-   * @return object|null
-   *   The created topic node or NULL if the forum is a container.
+   * @return object
+   *   The created topic node.
    */
   public function createForumTopic($forum, $container = FALSE) {
     // Generate a random subject/body.
diff --git a/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumConfigsTest.php b/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumConfigsTest.php
index 302c3d1aee..7aa848e6df 100644
--- a/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumConfigsTest.php
+++ b/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumConfigsTest.php
@@ -36,7 +36,7 @@ public function testForumSettings() {
     $this->assertIdentical(15, $config->get('topics.hot_threshold'));
     $this->assertIdentical(25, $config->get('topics.page_limit'));
     $this->assertIdentical(1, $config->get('topics.order'));
-    $this->assertIdentical('forums', $config->get('vocabulary'));
+    $this->assertIdentical('vocabulary_1_i_0_', $config->get('vocabulary'));
     // This is 'forum_block_num_0' in D6, but block:active:limit' in D8.
     $this->assertSame(3, $config->get('block.active.limit'));
     // This is 'forum_block_num_1' in D6, but 'block:new:limit' in D8.
diff --git a/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumTest.php b/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumTest.php
deleted file mode 100644
index 6f5d48c1dd..0000000000
--- a/core/modules/forum/tests/src/Kernel/Migrate/d6/MigrateForumTest.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-namespace Drupal\Tests\forum\Kernel\Migrate\d6;
-
-use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\Core\Entity\Entity\EntityViewDisplay;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\node\Entity\Node;
-use Drupal\Tests\node\Kernel\Migrate\d6\MigrateNodeTestBase;
-
-/**
- * Tests forum migration from Drupal 6 to Drupal 8.
- *
- * @group migrate_drupal_6
- */
-class MigrateForumTest extends MigrateNodeTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = [
-    'comment',
-    'forum',
-    'menu_ui',
-    'taxonomy',
-  ];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('comment');
-    $this->installSchema('comment', ['comment_entity_statistics']);
-    $this->installSchema('forum', ['forum', 'forum_index']);
-    $this->installConfig(['comment', 'forum']);
-    $this->migrateContent();
-    $this->migrateTaxonomy();
-    $this->executeMigrations([
-      'd6_comment_type',
-      'd6_comment_field',
-      'd6_comment_field_instance',
-      'd6_comment_entity_display',
-      'd6_comment_entity_form_display',
-      'd6_comment',
-      'd6_term_node',
-    ]);
-  }
-
-  /**
-   * Tests forum migration.
-   */
-  public function testForumMigration() {
-    // Tests that the taxonomy_forums field storage config exists.
-    $field_storage_config = FieldStorageConfig::load('node.taxonomy_forums');
-    $this->assertInstanceOf(FieldStorageConfig::class, $field_storage_config);
-
-    // Tests that the taxonomy_forums field config exists.
-    $field_config = FieldConfig::load('node.forum.taxonomy_forums');
-    $this->assertInstanceOf(FieldConfig::class, $field_config);
-
-    // Tests that the taxonomy_forums entity view display component exists.
-    $entity_view_display = EntityViewDisplay::load('node.forum.default')->getComponent('taxonomy_forums');
-    $this->assertTrue(is_array($entity_view_display));
-
-    // Tests that the taxonomy_forums entity form display component exists.
-    $entity_form_display = EntityFormDisplay::load('node.forum.default')->getComponent('taxonomy_forums');
-    $this->assertTrue(is_array($entity_form_display));
-
-    // Test that the taxonomy_forums field has the right value.
-    $node = Node::load(19);
-    $this->assertEquals(8, $node->taxonomy_forums->target_id);
-  }
-
-}
diff --git a/core/modules/hal/src/LinkManager/TypeLinkManagerInterface.php b/core/modules/hal/src/LinkManager/TypeLinkManagerInterface.php
index 708b9ab13e..c3dabe419a 100644
--- a/core/modules/hal/src/LinkManager/TypeLinkManagerInterface.php
+++ b/core/modules/hal/src/LinkManager/TypeLinkManagerInterface.php
@@ -31,7 +31,7 @@ public function getTypeUri($entity_type, $bundle, $context = []);
    * @param array $context
    *   Context from the normalizer/serializer operation.
    *
-   * @return array|bool
+   * @return array | boolean
    *   If the URI matches a bundle, returns an array containing entity_type and
    *   bundle. Otherwise, returns false.
    */
diff --git a/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php b/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
index eb45247285..1fc118dc5b 100644
--- a/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
+++ b/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
@@ -74,15 +74,15 @@ public function normalize($entity, $format = NULL, array $context = []) {
 
     // If the fields to use were specified, only output those field values.
     if (isset($context['included_fields'])) {
-      $field_items = [];
+      $fields = [];
       foreach ($context['included_fields'] as $field_name) {
-        $field_items[] = $entity->get($field_name);
+        $fields[] = $entity->get($field_name);
       }
     }
     else {
-      $field_items = $entity->getFields();
+      $fields = $entity->getFields();
     }
-    foreach ($field_items as $field) {
+    foreach ($fields as $field) {
       // Continue if the current user does not have access to view this field.
       if (!$field->access('view', $context['account'])) {
         continue;
diff --git a/core/modules/hal/src/Normalizer/FieldItemNormalizer.php b/core/modules/hal/src/Normalizer/FieldItemNormalizer.php
index b437ae765b..0c2ee9ed4d 100644
--- a/core/modules/hal/src/Normalizer/FieldItemNormalizer.php
+++ b/core/modules/hal/src/Normalizer/FieldItemNormalizer.php
@@ -110,7 +110,7 @@ protected function normalizedFieldValues(FieldItemInterface $field_item, $format
    * entity. This is the reason for using target_instances, from which the
    * property path can be traversed up to the root.
    *
-   * @param \Drupal\Core\Field\FieldItemInterface $item
+   * @param \Drupal\Core\Field\FieldItemInterface $field_item
    *   The untranslated field item instance.
    * @param $langcode
    *   The langcode.
diff --git a/core/modules/hal/src/Normalizer/FieldNormalizer.php b/core/modules/hal/src/Normalizer/FieldNormalizer.php
index 1ac987c1ef..167499a26f 100644
--- a/core/modules/hal/src/Normalizer/FieldNormalizer.php
+++ b/core/modules/hal/src/Normalizer/FieldNormalizer.php
@@ -18,18 +18,18 @@ class FieldNormalizer extends SerializationFieldNormalizer {
   /**
    * {@inheritdoc}
    */
-  public function normalize($field_items, $format = NULL, array $context = []) {
+  public function normalize($field, $format = NULL, array $context = []) {
     $normalized_field_items = [];
 
     // Get the field definition.
-    $entity = $field_items->getEntity();
-    $field_name = $field_items->getName();
-    $field_definition = $field_items->getFieldDefinition();
+    $entity = $field->getEntity();
+    $field_name = $field->getName();
+    $field_definition = $field->getFieldDefinition();
 
     // If this field is not translatable, it can simply be normalized without
     // separating it into different translations.
     if (!$field_definition->isTranslatable()) {
-      $normalized_field_items = $this->normalizeFieldItems($field_items, $format, $context);
+      $normalized_field_items = $this->normalizeFieldItems($field, $format, $context);
     }
     // Otherwise, the languages have to be extracted from the entity and passed
     // in to the field item normalizer in the context. The langcode is appended
@@ -38,21 +38,22 @@ public function normalize($field_items, $format = NULL, array $context = []) {
       foreach ($entity->getTranslationLanguages() as $language) {
         $context['langcode'] = $language->getId();
         $translation = $entity->getTranslation($language->getId());
-        $translated_field_items = $translation->get($field_name);
-        $normalized_field_items = array_merge($normalized_field_items, $this->normalizeFieldItems($translated_field_items, $format, $context));
+        $translated_field = $translation->get($field_name);
+        $normalized_field_items = array_merge($normalized_field_items, $this->normalizeFieldItems($translated_field, $format, $context));
       }
     }
 
     // Merge deep so that links set in entity reference normalizers are merged
     // into the links property.
-    return NestedArray::mergeDeepArray($normalized_field_items);
+    $normalized = NestedArray::mergeDeepArray($normalized_field_items);
+    return $normalized;
   }
 
   /**
    * Helper function to normalize field items.
    *
-   * @param \Drupal\Core\Field\FieldItemListInterface $field_items
-   *   The field item list object.
+   * @param \Drupal\Core\Field\FieldItemListInterface $field
+   *   The field object.
    * @param string $format
    *   The format.
    * @param array $context
@@ -61,10 +62,10 @@ public function normalize($field_items, $format = NULL, array $context = []) {
    * @return array
    *   The array of normalized field items.
    */
-  protected function normalizeFieldItems($field_items, $format, $context) {
+  protected function normalizeFieldItems($field, $format, $context) {
     $normalized_field_items = [];
-    if (!$field_items->isEmpty()) {
-      foreach ($field_items as $field_item) {
+    if (!$field->isEmpty()) {
+      foreach ($field as $field_item) {
         $normalized_field_items[] = $this->serializer->normalize($field_item, $format, $context);
       }
     }
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonAnonTest.php
deleted file mode 100644
index d4ee9ab0e1..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonAnonTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\BlockContent;
-
-use Drupal\Core\Cache\Cache;
-use Drupal\Tests\hal\Functional\EntityResource\HalEntityNormalizationTrait;
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\BlockContent\BlockContentResourceTestBase;
-
-/**
- * @group hal
- */
-class BlockContentHalJsonAnonTest extends BlockContentResourceTestBase {
-
-  use HalEntityNormalizationTrait;
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    $default_normalization = parent::getExpectedNormalizedEntity();
-
-    $normalization = $this->applyHalFieldNormalization($default_normalization);
-
-    return $normalization + [
-      '_links' => [
-        'self' => [
-          'href' => $this->baseUrl . '/block/1?_format=hal_json',
-        ],
-        'type' => [
-          'href' => $this->baseUrl . '/rest/type/block_content/basic',
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    return parent::getNormalizedPostEntity() + [
-      '_links' => [
-        'type' => [
-          'href' => $this->baseUrl . '/rest/type/block_content/basic',
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedCacheContexts() {
-    // The 'url.site' cache context is added for '_links' in the response.
-    return Cache::mergeTags(parent::getExpectedCacheContexts(), ['url.site']);
-  }
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonBasicAuthTest.php
deleted file mode 100644
index 94d3ff4ec5..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonBasicAuthTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\BlockContent;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group hal
- */
-class BlockContentHalJsonBasicAuthTest extends BlockContentHalJsonAnonTest {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonCookieTest.php
deleted file mode 100644
index 9cc0f25138..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonCookieTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\BlockContent;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group hal
- */
-class BlockContentHalJsonCookieTest extends BlockContentHalJsonAnonTest {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonAnonTest.php
deleted file mode 100644
index 57d6177922..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonAnonTest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\ContactForm\ContactFormResourceTestBase;
-
-/**
- * @group hal
- */
-class ContactFormHalJsonAnonTest extends ContactFormResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonBasicAuthTest.php
deleted file mode 100644
index 9aec186e15..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonBasicAuthTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\ContactForm\ContactFormResourceTestBase;
-
-/**
- * @group hal
- */
-class ContactFormHalJsonBasicAuthTest extends ContactFormResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal', 'basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonCookieTest.php
deleted file mode 100644
index 0d78991f95..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/ContactForm/ContactFormHalJsonCookieTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\ContactForm\ContactFormResourceTestBase;
-
-/**
- * @group hal
- */
-class ContactFormHalJsonCookieTest extends ContactFormResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonAnonTest.php
deleted file mode 100644
index 9e6bcb3065..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonAnonTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\hal\Functional\EntityResource\HalEntityNormalizationTrait;
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle\EntityTestBundleResourceTestBase;
-
-/**
- * @group hal
- */
-class EntityTestBundleHalJsonAnonTest extends EntityTestBundleResourceTestBase {
-
-  use HalEntityNormalizationTrait;
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonBasicAuthTest.php
deleted file mode 100644
index 09e5970890..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonBasicAuthTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle\EntityTestBundleResourceTestBase;
-
-/**
- * @group hal
- */
-class EntityTestBundleHalJsonBasicAuthTest extends EntityTestBundleResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal', 'basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonCookieTest.php
deleted file mode 100644
index 7f499fa016..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleHalJsonCookieTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle\EntityTestBundleResourceTestBase;
-
-/**
- * @group hal
- */
-class EntityTestBundleHalJsonCookieTest extends EntityTestBundleResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonAnonTest.php
deleted file mode 100644
index afa9465f53..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonAnonTest.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\Media;
-
-use Drupal\file\Entity\File;
-use Drupal\Tests\hal\Functional\EntityResource\HalEntityNormalizationTrait;
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\Media\MediaResourceTestBase;
-use Drupal\user\Entity\User;
-
-/**
- * @group hal
- */
-class MediaHalJsonAnonTest extends MediaResourceTestBase {
-
-  use HalEntityNormalizationTrait;
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    $default_normalization = parent::getExpectedNormalizedEntity();
-
-    $normalization = $this->applyHalFieldNormalization($default_normalization);
-
-    $file = File::load(1);
-    $thumbnail = File::load(2);
-    $author = User::load($this->entity->getOwnerId());
-    return $normalization + [
-      '_links' => [
-        'self' => [
-          'href' => $this->baseUrl . '/media/1?_format=hal_json',
-        ],
-        'type' => [
-          'href' => $this->baseUrl . '/rest/type/media/camelids',
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/field_media_file_1' => [
-          [
-            'href' => $file->url(),
-            'lang' => 'en',
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/revision_user' => [
-          [
-            'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json',
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/thumbnail' => [
-          [
-            'href' => $thumbnail->url(),
-            'lang' => 'en',
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/uid' => [
-          [
-            'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json',
-            'lang' => 'en',
-          ],
-        ],
-      ],
-      '_embedded' => [
-        $this->baseUrl . '/rest/relation/media/camelids/field_media_file_1' => [
-          [
-            '_links' => [
-              'self' => [
-                'href' => $file->url(),
-              ],
-              'type' => [
-                'href' => $this->baseUrl . '/rest/type/file/file',
-              ],
-            ],
-            'lang' => 'en',
-            'uri' => [
-              [
-                'value' => $file->url(),
-              ],
-            ],
-            'uuid' => [
-              [
-                'value' => $file->uuid(),
-              ],
-            ],
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/revision_user' => [
-          [
-            '_links' => [
-              'self' => [
-                'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json',
-              ],
-              'type' => [
-                'href' => $this->baseUrl . '/rest/type/user/user',
-              ],
-            ],
-            'uuid' => [
-              [
-                'value' => $author->uuid(),
-              ],
-            ],
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/thumbnail' => [
-          [
-            '_links' => [
-              'self' => [
-                'href' => $thumbnail->url(),
-              ],
-              'type' => [
-                'href' => $this->baseUrl . '/rest/type/file/file',
-              ],
-            ],
-            'lang' => 'en',
-            'uri' => [
-              [
-                'value' => $thumbnail->url(),
-              ],
-            ],
-            'uuid' => [
-              [
-                'value' => $thumbnail->uuid(),
-              ],
-            ],
-          ],
-        ],
-        $this->baseUrl . '/rest/relation/media/camelids/uid' => [
-          [
-            '_links' => [
-              'self' => [
-                'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json',
-              ],
-              'type' => [
-                'href' => $this->baseUrl . '/rest/type/user/user',
-              ],
-            ],
-            'uuid' => [
-              [
-                'value' => $author->uuid(),
-              ],
-            ],
-            'lang' => 'en',
-          ],
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    return parent::getNormalizedPostEntity() + [
-      '_links' => [
-        'type' => [
-          'href' => $this->baseUrl . '/rest/type/media/camelids',
-        ],
-      ],
-    ];
-  }
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonBasicAuthTest.php
deleted file mode 100644
index a645cbfba6..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonBasicAuthTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\Media;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group hal
- */
-class MediaHalJsonBasicAuthTest extends MediaHalJsonAnonTest {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonCookieTest.php
deleted file mode 100644
index a197eab860..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonCookieTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\Media;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group hal
- */
-class MediaHalJsonCookieTest extends MediaHalJsonAnonTest {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonAnonTest.php
deleted file mode 100644
index 1b83df1e9b..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonAnonTest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\MediaType\MediaTypeResourceTestBase;
-
-/**
- * @group hal
- */
-class MediaTypeHalJsonAnonTest extends MediaTypeResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonBasicAuthTest.php b/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonBasicAuthTest.php
deleted file mode 100644
index 20c29f2f18..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonBasicAuthTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\MediaType\MediaTypeResourceTestBase;
-
-/**
- * @group hal
- */
-class MediaTypeHalJsonBasicAuthTest extends MediaTypeResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal', 'basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonCookieTest.php b/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonCookieTest.php
deleted file mode 100644
index 8c6048556b..0000000000
--- a/core/modules/hal/tests/src/Functional/EntityResource/MediaType/MediaTypeHalJsonCookieTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests\hal\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\MediaType\MediaTypeResourceTestBase;
-
-/**
- * @group hal
- */
-class MediaTypeHalJsonCookieTest extends MediaTypeResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['hal'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/hal/tests/src/Functional/Update/CreateHalSettingsForLinkDomainUpdateTest.php b/core/modules/hal/tests/src/Functional/Update/CreateHalSettingsForLinkDomainUpdateTest.php
index 5afed645c5..dbc999c9d4 100644
--- a/core/modules/hal/tests/src/Functional/Update/CreateHalSettingsForLinkDomainUpdateTest.php
+++ b/core/modules/hal/tests/src/Functional/Update/CreateHalSettingsForLinkDomainUpdateTest.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\hal\Functional\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that 'hal.settings' is created, to store 'link_domain'.
diff --git a/core/modules/hal/tests/src/Functional/Update/MigrateLinkDomainSettingFromRestToHalUpdateTest.php b/core/modules/hal/tests/src/Functional/Update/MigrateLinkDomainSettingFromRestToHalUpdateTest.php
index 344caf1e1c..1677420752 100644
--- a/core/modules/hal/tests/src/Functional/Update/MigrateLinkDomainSettingFromRestToHalUpdateTest.php
+++ b/core/modules/hal/tests/src/Functional/Update/MigrateLinkDomainSettingFromRestToHalUpdateTest.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\hal\Functional\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * 'link_domain' is migrated from 'rest.settings' to 'hal.settings'.
diff --git a/core/modules/hal/tests/src/Kernel/DenormalizeTest.php b/core/modules/hal/tests/src/Kernel/DenormalizeTest.php
index bed2ff6829..d3662cb597 100644
--- a/core/modules/hal/tests/src/Kernel/DenormalizeTest.php
+++ b/core/modules/hal/tests/src/Kernel/DenormalizeTest.php
@@ -62,7 +62,8 @@ public function testTypeHandling() {
 
     // No type.
     $data_with_no_type = [
-      '_links' => [],
+      '_links' => [
+      ],
     ];
     try {
       $this->serializer->denormalize($data_with_no_type, $this->entityClass, $this->format);
@@ -135,7 +136,7 @@ public function testMarkFieldForDeletion() {
       ],
       'field_test_text' => [],
     ];
-    $entity = $this->serializer->denormalize($data, get_class($entity), $this->format, ['target_instance' => $entity ]);
+    $entity = $this->serializer->denormalize($data, get_class($entity), $this->format, [ 'target_instance' => $entity ]);
     $this->assertEqual($entity->field_test_text->count(), 0);
   }
 
diff --git a/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php b/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php
index c4b67f54e3..8f535c52c9 100644
--- a/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php
+++ b/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php
@@ -44,7 +44,8 @@ public function testNormalize() {
 
     $expected_array = [
       'uri' => [
-        ['value' => file_create_url($file->getFileUri())],
+        [
+          'value' => file_create_url($file->getFileUri())],
       ],
     ];
 
diff --git a/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php b/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php
index 098868ea89..57413ad816 100644
--- a/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php
+++ b/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php
@@ -17,7 +17,7 @@ class HalLinkManagerTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['hal', 'hal_test', 'serialization', 'system', 'node', 'user', 'field'];
+  public static $modules = [ 'hal', 'hal_test', 'serialization', 'system', 'node', 'user', 'field'];
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/help/tests/modules/help_page_test/help_page_test.module b/core/modules/help/tests/modules/help_page_test/help_page_test.module
index f57728d53f..67bcac33a8 100644
--- a/core/modules/help/tests/modules/help_page_test/help_page_test.module
+++ b/core/modules/help/tests/modules/help_page_test/help_page_test.module
@@ -5,7 +5,7 @@
  * Help Page Test module to test the help page.
  */
 
-use Drupal\Core\Routing\RouteMatchInterface;
+use \Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/help/tests/modules/help_test/help_test.module b/core/modules/help/tests/modules/help_test/help_test.module
index 9f67eccc65..2fd49912ed 100644
--- a/core/modules/help/tests/modules/help_test/help_test.module
+++ b/core/modules/help/tests/modules/help_test/help_test.module
@@ -5,7 +5,7 @@
  * Test Help module.
  */
 
-use Drupal\Core\Routing\RouteMatchInterface;
+use \Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/help/tests/modules/more_help_page_test/more_help_page_test.module b/core/modules/help/tests/modules/more_help_page_test/more_help_page_test.module
index 4bc939751c..60eb4fc830 100644
--- a/core/modules/help/tests/modules/more_help_page_test/more_help_page_test.module
+++ b/core/modules/help/tests/modules/more_help_page_test/more_help_page_test.module
@@ -5,7 +5,7 @@
  * More Help Page Test module to test the help blocks.
  */
 
-use Drupal\Core\Routing\RouteMatchInterface;
+use \Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/history/src/Controller/HistoryController.php b/core/modules/history/src/Controller/HistoryController.php
index c6a4834903..6a4e80a238 100644
--- a/core/modules/history/src/Controller/HistoryController.php
+++ b/core/modules/history/src/Controller/HistoryController.php
@@ -51,7 +51,7 @@ public function readNode(Request $request, NodeInterface $node) {
     // Update the history table, stating that this user viewed this node.
     history_write($node->id());
 
-    return new JsonResponse((int) history_read($node->id()));
+    return new JsonResponse((int)history_read($node->id()));
   }
 
 }
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 7dc1ff444e..89450cc6fe 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -422,7 +422,7 @@ function image_field_storage_config_update(FieldStorageConfigInterface $field_st
   if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field_storage->getSetting('uri_scheme'))) {
     $directory = $field_storage->getSetting('uri_scheme') . '://default_images/';
     file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
-    file_move($file_new, $directory . $file_new->getFilename());
+    file_move($file_new, $directory . $file_new->filename);
   }
 }
 
@@ -460,7 +460,7 @@ function image_field_config_update(FieldConfigInterface $field) {
   if ($file_new && (file_uri_scheme($file_new->getFileUri()) != $field_storage->getSetting('uri_scheme'))) {
     $directory = $field_storage->getSetting('uri_scheme') . '://default_images/';
     file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
-    file_move($file_new, $directory . $file_new->getFilename());
+    file_move($file_new, $directory . $file_new->filename);
   }
 }
 
diff --git a/core/modules/image/migration_templates/d7_image_settings.yml b/core/modules/image/migration_templates/d7_image_settings.yml
index 354706a55a..bfae4d5bb5 100644
--- a/core/modules/image/migration_templates/d7_image_settings.yml
+++ b/core/modules/image/migration_templates/d7_image_settings.yml
@@ -8,7 +8,6 @@ source:
     - allow_insecure_derivatives
     - suppress_itok_output
     - image_style_preview_image
-  source_module: image
 process:
   suppress_itok_output: suppress_itok_output
   allow_insecure_derivatives: allow_insecure_derivatives
diff --git a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
index 9e58ccd70d..7b8b275216 100644
--- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
+++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
@@ -3,7 +3,6 @@
 namespace Drupal\image\Plugin\Field\FieldType;
 
 use Drupal\Component\Utility\Random;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -314,18 +313,13 @@ public function preSave() {
     $height = $this->height;
 
     // Determine the dimensions if necessary.
-    if ($this->entity && $this->entity instanceof EntityInterface) {
-      if (empty($width) || empty($height)) {
-        $image = \Drupal::service('image.factory')->get($this->entity->getFileUri());
-        if ($image->isValid()) {
-          $this->width = $image->getWidth();
-          $this->height = $image->getHeight();
-        }
+    if (empty($width) || empty($height)) {
+      $image = \Drupal::service('image.factory')->get($this->entity->getFileUri());
+      if ($image->isValid()) {
+        $this->width = $image->getWidth();
+        $this->height = $image->getHeight();
       }
     }
-    else {
-      trigger_error(sprintf("Missing file with ID %s.", $this->target_id), E_USER_WARNING);
-    }
   }
 
   /**
diff --git a/core/modules/image/src/Plugin/migrate/source/d6/ImageCachePreset.php b/core/modules/image/src/Plugin/migrate/source/d6/ImageCachePreset.php
index 662648d7ab..aade9abdb4 100644
--- a/core/modules/image/src/Plugin/migrate/source/d6/ImageCachePreset.php
+++ b/core/modules/image/src/Plugin/migrate/source/d6/ImageCachePreset.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_imagecache_presets",
- *   source_module = "imagecache"
+ *   source_provider = "imagecache"
  * )
  */
 class ImageCachePreset extends DrupalSqlBase {
diff --git a/core/modules/image/src/Plugin/migrate/source/d7/ImageStyles.php b/core/modules/image/src/Plugin/migrate/source/d7/ImageStyles.php
index 070cc9bfdc..dab62f3a9e 100644
--- a/core/modules/image/src/Plugin/migrate/source/d7/ImageStyles.php
+++ b/core/modules/image/src/Plugin/migrate/source/d7/ImageStyles.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d7_image_styles",
- *   source_module = "image"
+ *   source_provider = "image"
  * )
  */
 class ImageStyles extends DrupalSqlBase {
diff --git a/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php
index 6255e41ab3..d04a1c4d70 100644
--- a/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php
+++ b/core/modules/image/src/Tests/ImageFieldDefaultImagesTest.php
@@ -1,7 +1,6 @@
 <?php
 
 namespace Drupal\image\Tests;
-
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\field\Entity\FieldConfig;
@@ -9,7 +8,7 @@
 use Drupal\field\Entity\FieldStorageConfig;
 
 /**
- * Tests setting up default images both to the field and field storage.
+ * Tests setting up default images both to the field and field field.
  *
  * @group image
  */
@@ -23,7 +22,7 @@ class ImageFieldDefaultImagesTest extends ImageFieldTestBase {
   public static $modules = ['field_ui'];
 
   /**
-   * Tests CRUD for fields and field storages with default images.
+   * Tests CRUD for fields and fields fields with default images.
    */
   public function testDefaultImages() {
     $node_storage = $this->container->get('entity.manager')->getStorage('node');
@@ -38,17 +37,16 @@ public function testDefaultImages() {
       $file->save();
     }
     $default_images = [];
-    foreach (['field_storage', 'field', 'field2', 'field_storage_new', 'field_new', 'field_storage_private', 'field_private'] as $image_target) {
+    foreach (['field', 'field', 'field2', 'field_new', 'field_new'] as $image_target) {
       $file = File::create((array) array_pop($files));
       $file->save();
       $default_images[$image_target] = $file;
     }
 
-    // Create an image field storage and add a field to the article content
-    // type.
+    // Create an image field and add an field to the article content type.
     $field_name = strtolower($this->randomMachineName());
     $storage_settings['default_image'] = [
-      'uuid' => $default_images['field_storage']->uuid(),
+      'uuid' => $default_images['field']->uuid(),
       'alt' => '',
       'title' => '',
       'width' => 0,
@@ -74,11 +72,11 @@ public function testDefaultImages() {
 
     $field_storage = $field->getFieldStorageDefinition();
 
-    // The field storage default image id should be 1.
-    $this->assertEqual($field_storage->getSetting('default_image')['uuid'], $default_images['field_storage']->uuid());
+    // The field default image id should be 1.
+    $this->assertEqual($field_storage->getSetting('default_image')['uuid'], $default_images['field']->uuid());
 
     // Also test \Drupal\field\Entity\FieldStorageConfig::getSettings().
-    $this->assertEqual($field_storage->getSettings()['default_image']['uuid'], $default_images['field_storage']->uuid());
+    $this->assertEqual($field_storage->getSettings()['default_image']['uuid'], $default_images['field']->uuid());
 
     // Add another field with another default image to the page content type.
     $field2 = FieldConfig::create([
@@ -106,16 +104,15 @@ public function testDefaultImages() {
       ->setComponent($field_name)
       ->save();
 
-    // Confirm the defaults are present on the article field storage settings
-    // form.
+    // Confirm the defaults are present on the article field settings form.
     $field_id = $field->id();
     $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
     $this->assertFieldByXpath(
       '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage']->id(),
+      $default_images['field']->id(),
       format_string(
-        'Article image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage']->id()]
+        'Article image field default equals expected file ID of @fid.',
+        ['@fid' => $default_images['field']->id()]
       )
     );
     // Confirm the defaults are present on the article field edit form.
@@ -124,19 +121,19 @@ public function testDefaultImages() {
       '//input[@name="settings[default_image][uuid][fids]"]',
       $default_images['field']->id(),
       format_string(
-        'Article image field default equals expected file ID of @fid.',
+        'Article image field field default equals expected file ID of @fid.',
         ['@fid' => $default_images['field']->id()]
       )
     );
 
-    // Confirm the defaults are present on the page field storage settings form.
+    // Confirm the defaults are present on the page field settings form.
     $this->drupalGet("admin/structure/types/manage/page/fields/$field_id/storage");
     $this->assertFieldByXpath(
       '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage']->id(),
+      $default_images['field']->id(),
       format_string(
-        'Page image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage']->id()]
+        'Page image field default equals expected file ID of @fid.',
+        ['@fid' => $default_images['field']->id()]
       )
     );
     // Confirm the defaults are present on the page field edit form.
@@ -146,7 +143,7 @@ public function testDefaultImages() {
       '//input[@name="settings[default_image][uuid][fids]"]',
       $default_images['field2']->id(),
       format_string(
-        'Page image field default equals expected file ID of @fid.',
+        'Page image field field default equals expected file ID of @fid.',
         ['@fid' => $default_images['field2']->id()]
       )
     );
@@ -184,23 +181,22 @@ public function testDefaultImages() {
 
     // Upload a new default for the field storage.
     $default_image_settings = $field_storage->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_storage_new']->uuid();
+    $default_image_settings['uuid'] = $default_images['field_new']->uuid();
     $field_storage->setSetting('default_image', $default_image_settings);
     $field_storage->save();
 
-    // Confirm that the new default is used on the article field storage
-    // settings form.
+    // Confirm that the new default is used on the article field settings form.
     $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
     $this->assertFieldByXpath(
       '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage_new']->id(),
+      $default_images['field_new']->id(),
       format_string(
-        'Updated image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage_new']->id()]
+        'Updated image field default equals expected file ID of @fid.',
+        ['@fid' => $default_images['field_new']->id()]
       )
     );
 
-    // Reload the nodes and confirm the field defaults are used.
+    // Reload the nodes and confirm the field field defaults are used.
     $node_storage->resetCache([$article->id(), $page->id()]);
     $article_built = $this->drupalBuildEntityView($article = $node_storage->load($article->id()));
     $page_built = $this->drupalBuildEntityView($page = $node_storage->load($page->id()));
@@ -221,19 +217,20 @@ public function testDefaultImages() {
       )
     );
 
-    // Upload a new default for the article's field.
+    // Upload a new default for the article's field field.
     $default_image_settings = $field->getSetting('default_image');
     $default_image_settings['uuid'] = $default_images['field_new']->uuid();
     $field->setSetting('default_image', $default_image_settings);
     $field->save();
 
-    // Confirm the new field default is used on the article field admin form.
+    // Confirm the new field field default is used on the article field
+    // admin form.
     $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
     $this->assertFieldByXpath(
       '//input[@name="settings[default_image][uuid][fids]"]',
       $default_images['field_new']->id(),
       format_string(
-        'Updated article image field default equals expected file ID of @fid.',
+        'Updated article image field field default equals expected file ID of @fid.',
         ['@fid' => $default_images['field_new']->id()]
       )
     );
@@ -267,31 +264,31 @@ public function testDefaultImages() {
     $this->drupalGet('node/add/article');
     $this->assertRaw($file->getFilename());
 
-    // Remove the field default from articles.
+    // Remove the instance default from articles.
     $default_image_settings = $field->getSetting('default_image');
     $default_image_settings['uuid'] = 0;
     $field->setSetting('default_image', $default_image_settings);
     $field->save();
 
-    // Confirm the article field default has been removed.
+    // Confirm the article field field default has been removed.
     $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
     $this->assertFieldByXpath(
       '//input[@name="settings[default_image][uuid][fids]"]',
       '',
-      'Updated article image field default has been successfully removed.'
+      'Updated article image field field default has been successfully removed.'
     );
 
     // Reload the nodes.
     $node_storage->resetCache([$article->id(), $page->id()]);
     $article_built = $this->drupalBuildEntityView($article = $node_storage->load($article->id()));
     $page_built = $this->drupalBuildEntityView($page = $node_storage->load($page->id()));
-    // Confirm the article uses the new field storage (not field) default.
+    // Confirm the article uses the new field (not field) default.
     $this->assertEqual(
       $article_built[$field_name][0]['#item']->target_id,
-      $default_images['field_storage_new']->id(),
+      $default_images['field_new']->id(),
       format_string(
         'An existing article node without an image has the expected default image file ID of @fid.',
-        ['@fid' => $default_images['field_storage_new']->id()]
+        ['@fid' => $default_images['field_new']->id()]
       )
     );
     // Confirm the page remains unchanged.
@@ -310,52 +307,13 @@ public function testDefaultImages() {
     $this->assertText('Only files with the following extensions are allowed: png gif jpg jpeg.');
 
     // Confirm the default image is shown on the node form.
-    $file = File::load($default_images['field_storage_new']->id());
+    $file = File::load($default_images['field_new']->id());
     $this->drupalGet('node/add/article');
     $this->assertRaw($file->getFilename());
-
-    // Change the default image for the field storage and also change the upload
-    // destination to the private filesystem at the same time.
-    $default_image_settings = $field_storage->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_storage_private']->uuid();
-    $field_storage->setSetting('default_image', $default_image_settings);
-    $field_storage->setSetting('uri_scheme', 'private');
-    $field_storage->save();
-
-    // Confirm that the new default is used on the article field storage
-    // settings form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id/storage");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_storage_private']->id(),
-      format_string(
-        'Updated image field storage default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_storage_private']->id()]
-      )
-    );
-
-    // Upload a new default for the article's field after setting the field
-    // storage upload destination to 'private'.
-    $default_image_settings = $field->getSetting('default_image');
-    $default_image_settings['uuid'] = $default_images['field_private']->uuid();
-    $field->setSetting('default_image', $default_image_settings);
-    $field->save();
-
-    // Confirm the new field field default is used on the article field
-    // admin form.
-    $this->drupalGet("admin/structure/types/manage/article/fields/$field_id");
-    $this->assertFieldByXpath(
-      '//input[@name="settings[default_image][uuid][fids]"]',
-      $default_images['field_private']->id(),
-      format_string(
-        'Updated article image field default equals expected file ID of @fid.',
-        ['@fid' => $default_images['field_private']->id()]
-      )
-    );
   }
 
   /**
-   * Tests image field and field storage having an invalid default image.
+   * Tests image field and field having an invalid default image.
    */
   public function testInvalidDefaultImage() {
     $field_storage = FieldStorageConfig::create([
diff --git a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php
index 8296601bab..44254c6141 100644
--- a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php
+++ b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php
@@ -199,7 +199,7 @@ public function doImageStyleUrlAndPathTests($scheme, $clean_url = TRUE, $extra_s
       else {
         // Check for PNG-Signature (cf. http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.2) in the
         // response body.
-        $this->assertNoRaw(chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10), 'No PNG signature found in the response body.');
+        $this->assertNoRaw( chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10), 'No PNG signature found in the response body.');
       }
     }
     else {
diff --git a/core/modules/image/tests/src/Functional/Update/ImageUpdateTest.php b/core/modules/image/src/Tests/Update/ImageUpdateTest.php
similarity index 88%
rename from core/modules/image/tests/src/Functional/Update/ImageUpdateTest.php
rename to core/modules/image/src/Tests/Update/ImageUpdateTest.php
index c3a5ddf270..f3d4775b6a 100644
--- a/core/modules/image/tests/src/Functional/Update/ImageUpdateTest.php
+++ b/core/modules/image/src/Tests/Update/ImageUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\image\Functional\Update;
+namespace Drupal\image\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests Image update path.
@@ -16,7 +16,7 @@ class ImageUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/image/tests/src/Kernel/ImageItemTest.php b/core/modules/image/tests/src/Kernel/ImageItemTest.php
index 951d1907f8..f7a1305450 100644
--- a/core/modules/image/tests/src/Kernel/ImageItemTest.php
+++ b/core/modules/image/tests/src/Kernel/ImageItemTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\image\Kernel;
 
-use Drupal\Core\Entity\EntityStorageException;
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
@@ -130,26 +129,4 @@ public function testImageItem() {
     $this->assertEqual($entity->image_test->entity->get('filemime')->value, 'image/jpeg');
   }
 
-  /**
-   * Tests a malformed image.
-   */
-  public function testImageItemMalformed() {
-    // Validate entity is an image and don't gather dimensions if it is not.
-    $entity = EntityTest::create();
-    $entity->image_test = NULL;
-    $entity->image_test->target_id = 9999;
-    // PHPUnit re-throws E_USER_WARNING as an exception.
-    try {
-      $entity->save();
-      $this->fail('Exception did not fail');
-    }
-    catch (EntityStorageException $exception) {
-      $this->assertInstanceOf(\PHPUnit_Framework_Error_Warning::class, $exception->getPrevious());
-      $this->assertEquals($exception->getMessage(), 'Missing file with ID 9999.');
-      $this->assertEmpty($entity->image_test->width);
-      $this->assertEmpty($entity->image_test->height);
-    }
-
-  }
-
 }
diff --git a/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php b/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
index e92685b845..d9381407d9 100644
--- a/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
+++ b/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
@@ -141,11 +141,9 @@ public function testInvalidCropValues() {
 
     $this->startCollectingMessages();
     $this->executeMigration('d6_imagecache_presets');
-    $this->assertEqual([
-      'error' => [
-        'The Drupal 8 image crop effect does not support numeric values for x and y offsets. Use keywords to set crop effect offsets instead.',
-      ],
-    ], $this->migrateMessages);
+    $this->assertEqual(['error' => [
+     'The Drupal 8 image crop effect does not support numeric values for x and y offsets. Use keywords to set crop effect offsets instead.'
+    ]], $this->migrateMessages);
   }
 
   /**
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 91163f7ce0..8066aa9194 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -43,15 +43,15 @@ function language_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dt>' . t('Making a block visible per language') . '</dt>';
       $output .= '<dd>' . t('If the Block module is enabled, then the Language module allows you to set the visibility of a block based on selected languages on the <a href=":blocks">Block layout</a> page.', [':blocks' => (\Drupal::moduleHandler()->moduleExists('block')) ? \Drupal::url('block.admin_display') : '#']) . '</dd>';
       $output .= '<dt>' . t('Choosing user languages') . '</dt>';
-      $output .= '<dd>' . t("Users can choose a <em>Site language</em> on their profile page. This language is used for email messages, and can be used by modules to determine a user's language. It can also be used for interface text, if the <em>User</em> method is enabled as a <em>Detection and selection</em> method (see below). Administrative users can choose a separate <em>Administration pages language</em> for the interface text on administration pages. This configuration is only available on the user's profile page if the <em>Account administration pages</em> method is enabled (see below).") . '</dd>';
+      $output .= '<dd>' . t('Users can choose a <em>Site language</em> on their profile page. This language is used for email messages, and can be used by modules to determine a user\'s language. It can also be used for interface text, if the <em>User</em> method is enabled as a <em>Detection and selection</em> method (see below). Administrative users can choose a separate <em>Administration pages language</em> for the interface text on administration pages. This configuration is only available on the user\'s profile page if the <em>Account administration pages</em> method is enabled (see below).') . '</dd>';
       $output .= '<dt>' . t('Language detection and selection') . '</dt>';
       $output .= '<dd>' . t('The <a href=":detection">Detection and selection</a> page provides several methods for deciding which language is used for displaying interface text. When a method detects and selects an interface language, then the following methods in the list are not applied. You can order them by importance, with your preferred method at the top of the list, followed by one or several fall-back methods.', [':detection' => \Drupal::url('language.negotiation')]);
       $output .= '<ul><li>' . t('<em>URL</em> sets the interface language based on a path prefix or domain (for example specifying <em>de</em> for German would result in URLs like <em>example.com/de/contact</em>). The default language does not require a path prefix, but can have one assigned as well. If the language detection is done by domain name, a domain needs to be specified for each language.') . '</li>';
       $output .= '<li>' . t('<em>Session</em> determines the interface language from a request or session parameter (for example <em>example.com?language=de</em> would set the interface language to German based on the use of <em>de</em> as the <em>language</em> parameter).') . '</li>';
-      $output .= '<li>' . t("<em>User</em> follows the language configuration set on the user's profile page.") . '</li>';
+      $output .= '<li>' . t('<em>User</em> follows the language configuration set on the user\'s profile page.') . '</li>';
       $output .= '<li>' . t('<em>Browser</em> sets the interface language based on the browser\'s language settings. Since browsers use different language codes to refer to the same languages, you can add and edit languages codes to map the browser language codes to the <a href=":language_list">language codes</a> used on your site.', [':language_list' => \Drupal::url('entity.configurable_language.collection')]) . '</li>';
       $output .= '<li>' . t('<em>Account administration pages</em> follows the configuration set as <em>Administration pages language</em> on the profile page of an administrative user. This method is similar to the <em>User</em> method, but only sets the interface text language on administration pages, independent of the interface text language on other pages.') . '</li>';
-      $output .= '<li>' . t("<em>Selected language</em> allows you to specify the site's default language or a specific language as the fall-back language. This method should be listed last.") . '</li></ul></dd>';
+      $output .= '<li>' . t('<em>Selected language</em> allows you to specify the site\'s default language or a specific language as the fall-back language. This method should be listed last.') . '</li></ul></dd>';
       $output .= '</dl>';
       return $output;
 
diff --git a/core/modules/language/migration_templates/d6_language_negotiation_settings.yml b/core/modules/language/migration_templates/d6_language_negotiation_settings.yml
index 2530ebcee8..abc71f68f9 100644
--- a/core/modules/language/migration_templates/d6_language_negotiation_settings.yml
+++ b/core/modules/language/migration_templates/d6_language_negotiation_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - language_negotiation
-  source_module: language
 process:
   session/parameter:
     plugin: default_value
diff --git a/core/modules/language/migration_templates/d6_language_types.yml b/core/modules/language/migration_templates/d6_language_types.yml
index 52289c5de1..05ce3001ec 100644
--- a/core/modules/language/migration_templates/d6_language_types.yml
+++ b/core/modules/language/migration_templates/d6_language_types.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - language_negotiation
-  source_module: language
 process:
   all:
     plugin: default_value
diff --git a/core/modules/language/migration_templates/d7_language_negotiation_settings.yml b/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
index 7e113b83d2..7759965336 100644
--- a/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
+++ b/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
@@ -7,7 +7,6 @@ source:
   variables:
     - locale_language_negotiation_session_param
     - locale_language_negotiation_url_part
-  source_module: locale
 process:
   session/parameter:
     plugin: default_value
diff --git a/core/modules/language/migration_templates/d7_language_types.yml b/core/modules/language/migration_templates/d7_language_types.yml
index 10d6ac768b..3a634a2e65 100644
--- a/core/modules/language/migration_templates/d7_language_types.yml
+++ b/core/modules/language/migration_templates/d7_language_types.yml
@@ -12,7 +12,6 @@ source:
     - locale_language_providers_weight_language
     - locale_language_providers_weight_language_content
     - locale_language_providers_weight_language_url
-  source_module: language
 process:
   all:
     plugin: language_types
diff --git a/core/modules/language/migration_templates/default_language.yml b/core/modules/language/migration_templates/default_language.yml
index ddb966f5db..6d7604deed 100644
--- a/core/modules/language/migration_templates/default_language.yml
+++ b/core/modules/language/migration_templates/default_language.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - language_default
-  source_module: locale
 process:
   default_langcode:
     -
diff --git a/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php b/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php
index 3df20c559f..9e5729aff7 100644
--- a/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php
+++ b/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php
@@ -52,7 +52,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface {
    *   The language manager service.
    * @param \Drupal\language\LanguageNegotiatorInterface $negotiator
    *   The language negotiator.
-   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation
+   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation;
    *   The translation service.
    * @param \Drupal\Core\Session\AccountInterface $current_user
    *   The current active user.
diff --git a/core/modules/language/src/Form/NegotiationBrowserForm.php b/core/modules/language/src/Form/NegotiationBrowserForm.php
index be2edef9e8..5535fe07d0 100644
--- a/core/modules/language/src/Form/NegotiationBrowserForm.php
+++ b/core/modules/language/src/Form/NegotiationBrowserForm.php
@@ -23,6 +23,9 @@ class NegotiationBrowserForm extends ConfigFormBase {
 
   /**
    * {@inheritdoc}
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler
    */
   public function __construct(ConfigFactoryInterface $config_factory, ConfigurableLanguageManagerInterface $language_manager ) {
     parent::__construct($config_factory);
diff --git a/core/modules/language/src/LanguageNegotiationMethodInterface.php b/core/modules/language/src/LanguageNegotiationMethodInterface.php
index 0488516f2d..0225fe9355 100644
--- a/core/modules/language/src/LanguageNegotiationMethodInterface.php
+++ b/core/modules/language/src/LanguageNegotiationMethodInterface.php
@@ -24,7 +24,7 @@ public function setLanguageManager(ConfigurableLanguageManagerInterface $languag
   /**
    * Injects the configuration factory.
    *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The configuration factory.
    */
   public function setConfig(ConfigFactoryInterface $config);
diff --git a/core/modules/language/src/LanguageNegotiator.php b/core/modules/language/src/LanguageNegotiator.php
index a236a48d62..db558992a4 100644
--- a/core/modules/language/src/LanguageNegotiator.php
+++ b/core/modules/language/src/LanguageNegotiator.php
@@ -74,7 +74,7 @@ class LanguageNegotiator implements LanguageNegotiatorInterface {
    * Constructs a new LanguageNegotiator object.
    *
    * @param \Drupal\language\ConfigurableLanguageManagerInterface $language_manager
-   *   The language manager.
+   *    The language manager.
    * @param \Drupal\Component\Plugin\PluginManagerInterface $negotiator_manager
    *   The language negotiation methods plugin manager
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
diff --git a/core/modules/language/src/Plugin/migrate/source/Language.php b/core/modules/language/src/Plugin/migrate/source/Language.php
index c232675223..fa6a199603 100644
--- a/core/modules/language/src/Plugin/migrate/source/Language.php
+++ b/core/modules/language/src/Plugin/migrate/source/Language.php
@@ -8,7 +8,7 @@
 /**
  * @MigrateSource(
  *   id = "language",
- *   source_module = "locale"
+ *   source_provider = "locale"
  * )
  */
 class Language extends DrupalSqlBase {
diff --git a/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettings.php b/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettings.php
index 369238c4fc..ab9ba83813 100644
--- a/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettings.php
+++ b/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettings.php
@@ -10,7 +10,6 @@
  *
  * @MigrateSource(
  *   id = "d6_language_content_settings",
- *   source_module = "locale"
  * )
  */
 class LanguageContentSettings extends DrupalSqlBase {
diff --git a/core/modules/language/src/Plugin/migrate/source/d7/LanguageContentSettings.php b/core/modules/language/src/Plugin/migrate/source/d7/LanguageContentSettings.php
index efe87086d5..cb748aec22 100644
--- a/core/modules/language/src/Plugin/migrate/source/d7/LanguageContentSettings.php
+++ b/core/modules/language/src/Plugin/migrate/source/d7/LanguageContentSettings.php
@@ -10,7 +10,6 @@
  *
  * @MigrateSource(
  *   id = "d7_language_content_settings",
- *   source_module = "locale"
  * )
  */
 class LanguageContentSettings extends DrupalSqlBase {
diff --git a/core/modules/language/tests/src/Functional/Update/LanguageSelectWidgetUpdateTest.php b/core/modules/language/src/Tests/Update/LanguageSelectWidgetUpdateTest.php
similarity index 81%
rename from core/modules/language/tests/src/Functional/Update/LanguageSelectWidgetUpdateTest.php
rename to core/modules/language/src/Tests/Update/LanguageSelectWidgetUpdateTest.php
index afc8464609..b0559831a9 100644
--- a/core/modules/language/tests/src/Functional/Update/LanguageSelectWidgetUpdateTest.php
+++ b/core/modules/language/src/Tests/Update/LanguageSelectWidgetUpdateTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\language\Functional\Update;
+namespace Drupal\language\Tests\Update;
 
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests the update path for the language_select widget.
@@ -17,7 +17,7 @@ class LanguageSelectWidgetUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/language/tests/language_test/src/Controller/LanguageTestController.php b/core/modules/language/tests/language_test/src/Controller/LanguageTestController.php
index 2737f31cbf..441b2eb872 100644
--- a/core/modules/language/tests/language_test/src/Controller/LanguageTestController.php
+++ b/core/modules/language/tests/language_test/src/Controller/LanguageTestController.php
@@ -53,7 +53,7 @@ public static function create(ContainerInterface $container) {
   /**
    * Route entity upcasting test helper.
    *
-   * @param \Drupal\language\ConfigurableLanguageInterface $configurable_language
+   * @param \Drupal\language\ConfigurableLanguageInterface $language
    *   The ConfigurableLanguage object from the route.
    *
    * @return string
diff --git a/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php b/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php
index 3f69cf491b..27c7410b9b 100644
--- a/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php
+++ b/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php
@@ -35,9 +35,9 @@ public function testArgument() {
       ]);
       $this->executeView($view, [$langcode]);
 
-      $expected = [
-        ['name' => $name],
-      ];
+      $expected = [[
+        'name' => $name,
+      ]];
       $this->assertIdenticalResultset($view, $expected, ['views_test_data_name' => 'name']);
       $view->destroy();
     }
diff --git a/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php b/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php
index c94d623e93..c9dc98cbf3 100644
--- a/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php
+++ b/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php
@@ -36,9 +36,9 @@ public function testFilter() {
       ]);
       $this->executeView($view);
 
-      $expected = [
-        ['name' => $name],
-      ];
+      $expected = [[
+        'name' => $name,
+      ]];
       $this->assertIdenticalResultset($view, $expected, ['views_test_data_name' => 'name']);
 
       $expected = [
diff --git a/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
index c3955df56a..06820d0631 100644
--- a/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
+++ b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
@@ -4,9 +4,6 @@
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\language\Entity\ContentLanguageSettings;
 use Drupal\Tests\UnitTestCase;
 
@@ -30,13 +27,6 @@ class ContentLanguageSettingsUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
   /**
    * The ID of the type of the entity under test.
    *
@@ -72,8 +62,7 @@ protected function setUp() {
     $this->entityTypeId = $this->randomMachineName();
     $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
 
-    $this->entityManager = new EntityManager();
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
 
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
@@ -83,13 +72,9 @@ protected function setUp() {
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('uuid', $this->uuid);
     $container->set('config.typed', $this->typedConfigManager);
     $container->set('config.storage', $this->configEntityStorageInterface);
-    // Inject the container into entity.manager so it can defer to other entity
-    // services.
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
   }
 
@@ -103,7 +88,7 @@ public function testCalculateDependencies() {
       ->method('getBundleConfigDependency')
       ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id']));
 
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with('test_entity_type')
       ->will($this->returnValue($target_entity_type));
@@ -269,20 +254,16 @@ public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $
       ->method('create')
       ->will($this->returnValue($nullConfig));
 
-    $this->entityTypeManager
+    $this->entityManager
       ->expects($this->any())
       ->method('getStorage')
       ->with('language_content_settings')
       ->will($this->returnValue($this->configEntityStorageInterface));
-
-    $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
-    $entity_type_repository->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getEntityTypeFromClass')
-      ->with(ContentLanguageSettings::class)
+      ->with('Drupal\language\Entity\ContentLanguageSettings')
       ->willReturn('language_content_settings');
 
-    \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
-
     $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle);
 
     $this->assertSame($expected_langcode, $config->getDefaultLangcode());
diff --git a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php
index 5d772a98ce..e354f00871 100644
--- a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php
+++ b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php
@@ -135,7 +135,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin
           $values['title'] = mt_rand(0, 1) ? $random->sentences(4) : '';
           break;
       }
-      $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (count($tlds) - 1))];
+      $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (sizeof($tlds) - 1))];
     }
     else {
       $values['uri'] = 'base:' . $random->name(mt_rand(1, 64));
diff --git a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php b/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php
deleted file mode 100644
index 8acf70a998..0000000000
--- a/core/modules/link/src/Plugin/migrate/cckfield/LinkField.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace Drupal\link\Plugin\migrate\cckfield;
-
-@trigger_error('LinkField is deprecated in Drupal 8.3.x and will be be removed before Drupal 9.0.x. Use \Drupal\link\Plugin\migrate\field\d6\LinkField instead.', E_USER_DEPRECATED);
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
-
-/**
- * @MigrateCckField(
- *   id = "link",
- *   core = {6},
- *   type_map = {
- *     "link_field" = "link"
- *   }
- * )
- *
- * @deprecated in Drupal 8.3.x and will be removed in Drupal 9.0.x. Use
- * \Drupal\link\Plugin\migrate\field\d6\LinkField instead.
- *
- * @see https://www.drupal.org/node/2751897
- */
-class LinkField extends CckFieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterMap() {
-    // See d6_field_formatter_settings.yml and CckFieldPluginBase
-    // processFieldFormatter().
-    return [
-      'default' => 'link',
-      'plain' => 'link',
-      'absolute' => 'link',
-      'title_plain' => 'link',
-      'url' => 'link',
-      'short' => 'link',
-      'label' => 'link',
-      'separate' => 'link_separate',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'd6_cck_link',
-      'source' => $field_name,
-    ];
-    $migration->mergeProcessOfProperty($field_name, $process);
-  }
-
-}
diff --git a/core/modules/link/src/Plugin/migrate/cckfield/d7/LinkField.php b/core/modules/link/src/Plugin/migrate/cckfield/d7/LinkField.php
deleted file mode 100644
index 6a7ff8898b..0000000000
--- a/core/modules/link/src/Plugin/migrate/cckfield/d7/LinkField.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace Drupal\link\Plugin\migrate\cckfield\d7;
-
-@trigger_error('LinkField is deprecated in Drupal 8.3.x and will be be removed before Drupal 9.0.x. Use \Drupal\link\Plugin\migrate\field\d7\LinkField instead.', E_USER_DEPRECATED);
-
-use Drupal\link\Plugin\migrate\cckfield\LinkField as D6LinkField;
-use Drupal\migrate\Plugin\MigrationInterface;
-
-/**
- * @MigrateCckField(
- *   id = "link_field",
- *   core = {7},
- *   type_map = {
- *     "link_field" = "link"
- *   }
- * )
- *
- * This plugin provides the exact same functionality as the Drupal 6 "link"
- * plugin with the exception that the plugin ID "link_field" is used in the
- * field type map.
- *
- * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\link\Plugin\migrate\field\d7\LinkField instead.
- *
- * @see https://www.drupal.org/node/2751897
- */
-class LinkField extends D6LinkField {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldWidgetMap() {
-    // By default, use the plugin ID for the widget types.
-    return ['link_field' => 'link_default'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldInstance(MigrationInterface $migration) {
-    $process = [
-      'plugin' => 'static_map',
-      'source' => 'settings/title',
-      'bypass' => TRUE,
-      'map' => [
-        'disabled' => DRUPAL_DISABLED,
-        'optional' => DRUPAL_OPTIONAL,
-        'required' => DRUPAL_REQUIRED,
-      ],
-    ];
-    $migration->mergeProcessOfProperty('settings/title', $process);
-  }
-
-}
diff --git a/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php b/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php
index 92ff4a4e79..2d1b77aa10 100644
--- a/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php
+++ b/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php
@@ -14,4 +14,4 @@
  * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
  * \Drupal\link\Plugin\migrate\process\d6\FieldLink instead.
  */
-class CckLink extends FieldLink {}
+class CckLink extends FieldLink { }
diff --git a/core/modules/link/tests/src/Kernel/Plugin/migrate/cckfield/d7/LinkCckTest.php b/core/modules/link/tests/src/Kernel/Plugin/migrate/cckfield/d7/LinkCckTest.php
deleted file mode 100644
index 77d35e091f..0000000000
--- a/core/modules/link/tests/src/Kernel/Plugin/migrate/cckfield/d7/LinkCckTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace Drupal\Tests\link\Kernel\Plugin\migrate\cckfield\d7;
-
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\link\Plugin\migrate\cckfield\d7\LinkField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\link\Plugin\migrate\cckfield\d7\LinkField
- * @group link
- * @group legacy
- */
-class LinkCckTest extends KernelTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $modules = ['system'];
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->plugin = new LinkField([], 'link', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldInstance() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processFieldInstance($this->migration);
-
-    $expected = [
-      'plugin' => 'static_map',
-      'source' => 'settings/title',
-      'bypass' => TRUE,
-      'map' => [
-        'disabled' => DRUPAL_DISABLED,
-        'optional' => DRUPAL_OPTIONAL,
-        'required' => DRUPAL_REQUIRED,
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/link/tests/src/Kernel/Plugin/migrate/field/d7/LinkFieldTest.php b/core/modules/link/tests/src/Kernel/Plugin/migrate/field/d7/LinkFieldTest.php
deleted file mode 100644
index 7dea25e774..0000000000
--- a/core/modules/link/tests/src/Kernel/Plugin/migrate/field/d7/LinkFieldTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-namespace Drupal\Tests\link\Kernel\Plugin\migrate\field\d7;
-
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\link\Plugin\migrate\field\d7\LinkField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\link\Plugin\migrate\field\d7\LinkField
- * @group link
- */
-class LinkFieldTest extends KernelTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $modules = ['system'];
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->plugin = new LinkField([], 'link', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's ProcessFieldInstance() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldInstance
-   */
-  public function testProcessFieldInstance() {
-    $this->plugin->processFieldInstance($this->migration);
-
-    $expected = [
-      'plugin' => 'static_map',
-      'source' => 'settings/title',
-      'bypass' => TRUE,
-      'map' => [
-        'disabled' => DRUPAL_DISABLED,
-        'optional' => DRUPAL_OPTIONAL,
-        'required' => DRUPAL_REQUIRED,
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/link/tests/src/Unit/Plugin/migrate/cckfield/LinkCckTest.php b/core/modules/link/tests/src/Unit/Plugin/migrate/cckfield/LinkCckTest.php
deleted file mode 100644
index f549a0dc1b..0000000000
--- a/core/modules/link/tests/src/Unit/Plugin/migrate/cckfield/LinkCckTest.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace Drupal\Tests\link\Unit\Plugin\migrate\cckfield;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\link\Plugin\migrate\cckfield\LinkField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\link\Plugin\migrate\cckfield\LinkField
- * @group link
- * @group legacy
- */
-class LinkCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new LinkField([], 'link', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processCckFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processCckFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'd6_cck_link',
-      'source' => 'somefieldname',
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/link/tests/src/Unit/Plugin/migrate/field/d6/LinkFieldTest.php b/core/modules/link/tests/src/Unit/Plugin/migrate/field/d6/LinkFieldTest.php
deleted file mode 100644
index 645e3e13a9..0000000000
--- a/core/modules/link/tests/src/Unit/Plugin/migrate/field/d6/LinkFieldTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-namespace Drupal\Tests\link\Unit\Plugin\migrate\field\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\link\Plugin\migrate\field\d6\LinkField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\link\Plugin\migrate\field\d6\LinkField
- * @group link
- */
-class LinkFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new LinkField([], 'link', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // mergeProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to mergeProcessOfProperty().
-    $migration->mergeProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'd6_field_link',
-      'source' => 'somefieldname',
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/locale/locale.batch.inc b/core/modules/locale/locale.batch.inc
index fade172826..7edc85d676 100644
--- a/core/modules/locale/locale.batch.inc
+++ b/core/modules/locale/locale.batch.inc
@@ -238,13 +238,11 @@ function locale_translation_http_check($uri) {
   $logger = \Drupal::logger('locale');
   try {
     $actual_uri = NULL;
-    $response = \Drupal::service('http_client_factory')->fromOptions([
-      'allow_redirects' => [
-        'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $request_uri) use (&$actual_uri) {
-          $actual_uri = (string) $request_uri;
-        }
-      ],
-    ])->head($uri);
+    $response = \Drupal::service('http_client_factory')->fromOptions(['allow_redirects' => [
+      'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $request_uri) use (&$actual_uri) {
+        $actual_uri = (string) $request_uri;
+      }
+    ]])->head($uri);
     $result = [];
 
     // Return the effective URL if it differs from the requested.
diff --git a/core/modules/locale/migration_templates/locale_settings.yml b/core/modules/locale/migration_templates/locale_settings.yml
index dbd7b61b78..6eebe20455 100644
--- a/core/modules/locale/migration_templates/locale_settings.yml
+++ b/core/modules/locale/migration_templates/locale_settings.yml
@@ -8,7 +8,6 @@ source:
   variables:
     - locale_cache_strings
     - locale_js_directory
-  source_module: locale
 process:
   cache_strings: locale_cache_strings
   'javascript/directory': locale_js_directory
diff --git a/core/modules/locale/src/Form/ImportForm.php b/core/modules/locale/src/Form/ImportForm.php
index 40a77204b4..f2bd45b844 100644
--- a/core/modules/locale/src/Form/ImportForm.php
+++ b/core/modules/locale/src/Form/ImportForm.php
@@ -166,7 +166,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->moduleHandler->loadInclude('locale', 'translation.inc');
+    \Drupal::moduleHandler()->loadInclude('locale', 'translation.inc');
     // Add language, if not yet supported.
     $language = $this->languageManager->getLanguage($form_state->getValue('langcode'));
     if (empty($language)) {
@@ -185,6 +185,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     batch_set($batch);
 
     // Create or update all configuration translations for this language.
+    \Drupal::moduleHandler()->loadInclude('locale', 'bulk.inc');
     if ($batch = locale_config_batch_update_components($options, [$form_state->getValue('langcode')])) {
       batch_set($batch);
     }
diff --git a/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php b/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
index beae85d3e6..4d1b9df2cd 100644
--- a/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
@@ -231,7 +231,7 @@ protected function assertNodeConfig($required, $optional) {
     }
 
     // Check the optional default configuration in node module.
-    $string = $this->storage->findString(['source' => 'No front page content has been created yet.<br/>Follow the <a href="https://www.drupal.org/docs/user_guide/en/index.html">User Guide</a> to start building your site.', 'context' => '', 'type' => 'configuration']);
+    $string = $this->storage->findString(['source' => 'No front page content has been created yet.', 'context' => '', 'type' => 'configuration']);
     if ($optional) {
       $this->assertFalse($this->config('views.view.frontpage')->isNew());
       $this->assertTrue($string, 'Node view text can be found with node and views modules.');
diff --git a/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php b/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
index 581c98fbab..e3a2c2612e 100644
--- a/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
@@ -341,8 +341,7 @@ public function testConfigtranslationImportingPoFile() {
 
     // Import a .po file to translate.
     $this->importPoFile($this->getPoFileWithConfigDe(), [
-      'langcode' => $langcode,
-    ]);
+      'langcode' => $langcode]);
 
     // Check that the 'Anonymous' string is translated.
     $config = \Drupal::languageManager()->getLanguageConfigOverride($langcode, 'user.settings');
diff --git a/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php b/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
index d46fa5ea91..bbb825832b 100644
--- a/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
@@ -21,86 +21,73 @@ class LocaleJavascriptTranslationTest extends BrowserTestBase {
   public static $modules = ['locale', 'locale_test'];
 
   public function testFileParsing() {
+    $filename = __DIR__ . '/../../locale_test.js';
 
-    // This test is for ensuring that the regular expression in
-    // _locale_parse_js_file() finds translatable source strings in all valid
-    // JavaScript syntax regardless of the coding style used, especially with
-    // respect to optional whitespace, line breaks, etc.
-    // - We test locale_test.es6.js, because that is the one that contains a
-    //   variety of whitespace styles.
-    // - We also test the transpiled locale_test.js as an extra double-check
-    //   that JavaScript transpilation doesn't change what
-    //   _locale_parse_js_file() finds.
-    $files[] = __DIR__ . '/../../locale_test.es6.js';
-    $files[] = __DIR__ . '/../../locale_test.js';
-
-    foreach ($files as $filename) {
-      // Parse the file to look for source strings.
-      _locale_parse_js_file($filename);
-
-      // Get all of the source strings that were found.
-      $strings = $this->container
-        ->get('locale.storage')
-        ->getStrings([
-          'type' => 'javascript',
-          'name' => $filename,
-        ]);
-
-      $source_strings = [];
-      foreach ($strings as $string) {
-        $source_strings[$string->source] = $string->context;
-      }
-
-      $etx = LOCALE_PLURAL_DELIMITER;
-      // List of all strings that should be in the file.
-      $test_strings = [
-        'Standard Call t' => '',
-        'Whitespace Call t' => '',
-
-        'Single Quote t' => '',
-        "Single Quote \\'Escaped\\' t" => '',
-        'Single Quote Concat strings t' => '',
-
-        'Double Quote t' => '',
-        "Double Quote \\\"Escaped\\\" t" => '',
-        'Double Quote Concat strings t' => '',
-
-        'Context !key Args t' => 'Context string',
-
-        'Context Unquoted t' => 'Context string unquoted',
-        'Context Single Quoted t' => 'Context string single quoted',
-        'Context Double Quoted t' => 'Context string double quoted',
-
-        "Standard Call plural{$etx}Standard Call @count plural" => '',
-        "Whitespace Call plural{$etx}Whitespace Call @count plural" => '',
-
-        "Single Quote plural{$etx}Single Quote @count plural" => '',
-        "Single Quote \\'Escaped\\' plural{$etx}Single Quote \\'Escaped\\' @count plural" => '',
-
-        "Double Quote plural{$etx}Double Quote @count plural" => '',
-        "Double Quote \\\"Escaped\\\" plural{$etx}Double Quote \\\"Escaped\\\" @count plural" => '',
-
-        "Context !key Args plural{$etx}Context !key Args @count plural" => 'Context string',
-
-        "Context Unquoted plural{$etx}Context Unquoted @count plural" => 'Context string unquoted',
-        "Context Single Quoted plural{$etx}Context Single Quoted @count plural" => 'Context string single quoted',
-        "Context Double Quoted plural{$etx}Context Double Quoted @count plural" => 'Context string double quoted',
-      ];
-
-      // Assert that all strings were found properly.
-      foreach ($test_strings as $str => $context) {
-        $args = ['%source' => $str, '%context' => $context];
-
-        // Make sure that the string was found in the file.
-        $this->assertTrue(isset($source_strings[$str]), SafeMarkup::format('Found source string: %source', $args));
-
-        // Make sure that the proper context was matched.
-        $message = $context ? SafeMarkup::format('Context for %source is %context', $args) : SafeMarkup::format('Context for %source is blank', $args);
-        $this->assertTrue(isset($source_strings[$str]) && $source_strings[$str] === $context, $message);
-      }
-
-      $this->assertEqual(count($source_strings), count($test_strings), 'Found correct number of source strings.');
+    // Parse the file to look for source strings.
+    _locale_parse_js_file($filename);
+
+    // Get all of the source strings that were found.
+    $strings = $this->container
+      ->get('locale.storage')
+      ->getStrings([
+        'type' => 'javascript',
+        'name' => $filename,
+      ]);
+
+    $source_strings = [];
+    foreach ($strings as $string) {
+      $source_strings[$string->source] = $string->context;
     }
+
+    $etx = LOCALE_PLURAL_DELIMITER;
+    // List of all strings that should be in the file.
+    $test_strings = [
+      'Standard Call t' => '',
+      'Whitespace Call t' => '',
+
+      'Single Quote t' => '',
+      "Single Quote \\'Escaped\\' t" => '',
+      'Single Quote Concat strings t' => '',
+
+      'Double Quote t' => '',
+      "Double Quote \\\"Escaped\\\" t" => '',
+      'Double Quote Concat strings t' => '',
+
+      'Context !key Args t' => 'Context string',
+
+      'Context Unquoted t' => 'Context string unquoted',
+      'Context Single Quoted t' => 'Context string single quoted',
+      'Context Double Quoted t' => 'Context string double quoted',
+
+      "Standard Call plural{$etx}Standard Call @count plural" => '',
+      "Whitespace Call plural{$etx}Whitespace Call @count plural" => '',
+
+      "Single Quote plural{$etx}Single Quote @count plural" => '',
+      "Single Quote \\'Escaped\\' plural{$etx}Single Quote \\'Escaped\\' @count plural" => '',
+
+      "Double Quote plural{$etx}Double Quote @count plural" => '',
+      "Double Quote \\\"Escaped\\\" plural{$etx}Double Quote \\\"Escaped\\\" @count plural" => '',
+
+      "Context !key Args plural{$etx}Context !key Args @count plural" => 'Context string',
+
+      "Context Unquoted plural{$etx}Context Unquoted @count plural" => 'Context string unquoted',
+      "Context Single Quoted plural{$etx}Context Single Quoted @count plural" => 'Context string single quoted',
+      "Context Double Quoted plural{$etx}Context Double Quoted @count plural" => 'Context string double quoted',
+    ];
+
+    // Assert that all strings were found properly.
+    foreach ($test_strings as $str => $context) {
+      $args = ['%source' => $str, '%context' => $context];
+
+      // Make sure that the string was found in the file.
+      $this->assertTrue(isset($source_strings[$str]), SafeMarkup::format('Found source string: %source', $args));
+
+      // Make sure that the proper context was matched.
+      $message = $context ? SafeMarkup::format('Context for %source is %context', $args) : SafeMarkup::format('Context for %source is blank', $args);
+      $this->assertTrue(isset($source_strings[$str]) && $source_strings[$str] === $context, $message);
+    }
+
+    $this->assertEqual(count($source_strings), count($test_strings), 'Found correct number of source strings.');
   }
 
   /**
diff --git a/core/modules/media/media.install b/core/modules/media/media.install
index 86a95188d1..ef95793b9d 100644
--- a/core/modules/media/media.install
+++ b/core/modules/media/media.install
@@ -5,7 +5,7 @@
  * Install, uninstall and update hooks for Media module.
  */
 
-use Drupal\user\RoleInterface;
+use \Drupal\user\RoleInterface;
 
 /**
  * Implements hook_install().
@@ -35,6 +35,15 @@ function media_install() {
   }
 }
 
+/**
+ * Implements hook_uninstall().
+ *
+ * @TODO Remove when https://www.drupal.org/node/2884202 is fixed.
+ */
+function media_uninstall() {
+  \Drupal::moduleHandler()->invoke('field', 'cron');
+}
+
 /**
  * Implements hook_requirements().
  */
@@ -59,21 +68,6 @@ function media_requirements($phase) {
         $requirements['media']['severity'] = REQUIREMENT_ERROR;
       }
     }
-
-    // Prevent installation if the 1.x branch of the contrib module is enabled.
-    if (\Drupal::moduleHandler()->moduleExists('media_entity')) {
-      $info = system_get_info('module', 'media_entity');
-      if (version_compare($info['version'], '8.x-2') < 0) {
-        $requirements['media_module_incompatibility'] = [
-          'title' => t('Media'),
-          'description' => t('The Media module is not compatible with contrib <a href=":url">Media Entity</a> 1.x branch. Please check the 2.x branch of that module for an upgrade path.', [
-            ':url' => 'https://drupal.org/project/media_entity',
-          ]),
-          'severity' => REQUIREMENT_ERROR,
-        ];
-      }
-    }
   }
-
   return $requirements;
 }
diff --git a/core/modules/media/media.permissions.yml b/core/modules/media/media.permissions.yml
index 107882cb6a..79eadb5058 100644
--- a/core/modules/media/media.permissions.yml
+++ b/core/modules/media/media.permissions.yml
@@ -27,7 +27,3 @@ create media:
 view all media revisions:
   title: 'View all media revisions'
   description: 'To view a revision, you also need permission to view the media item.'
-
-access media overview:
-  title: 'Access media overview'
-  description: 'Users with this permission can access the media overview page.'
diff --git a/core/modules/media/src/Entity/Media.php b/core/modules/media/src/Entity/Media.php
index 1f8c8d3a47..d175572450 100644
--- a/core/modules/media/src/Entity/Media.php
+++ b/core/modules/media/src/Entity/Media.php
@@ -77,6 +77,7 @@
  *     "delete-form" = "/media/{media}/delete",
  *     "edit-form" = "/media/{media}/edit",
  *     "revision" = "/media/{media}/revisions/{media_revision}/view",
+ *     "admin-form" = "/admin/structure/media/manage/{media_type}"
  *   }
  * )
  */
@@ -84,35 +85,6 @@ class Media extends EditorialContentEntityBase implements MediaInterface {
 
   use StringTranslationTrait;
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getName() {
-    $name = $this->get('name');
-
-    if ($name->isEmpty()) {
-      $media_source = $this->getSource();
-      return $media_source->getMetadata($this, $media_source->getPluginDefinition()['default_name_metadata_attribute']);
-    }
-    else {
-      return $name->value;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function label() {
-    return $this->getName();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setName($name) {
-    return $this->set('name', $name);
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -152,7 +124,7 @@ public function getOwnerId() {
    * {@inheritdoc}
    */
   public function setOwnerId($uid) {
-    return $this->set('uid', $uid);
+    $this->set('uid', $uid);
   }
 
   /**
@@ -316,9 +288,10 @@ public function preSave(EntityStorageInterface $storage) {
           }
         }
 
-        // Try to set a default name for this media item if no name is provided.
-        if ($translation->get('name')->isEmpty()) {
-          $translation->setName($translation->getName());
+        // Try to set a default name for this media item if no label is
+        // provided.
+        if (!$translation->label()) {
+          $translation->set('name', $media_source->getMetadata($translation, $media_source->getPluginDefinition()['default_name_metadata_attribute']));
         }
 
         // Set thumbnail.
diff --git a/core/modules/media/src/MediaAccessControlHandler.php b/core/modules/media/src/MediaAccessControlHandler.php
index 434abfe719..f753e7fdb2 100644
--- a/core/modules/media/src/MediaAccessControlHandler.php
+++ b/core/modules/media/src/MediaAccessControlHandler.php
@@ -23,13 +23,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
     $is_owner = ($account->id() && $account->id() === $entity->getOwnerId());
     switch ($operation) {
       case 'view':
-        $access_result = AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished())
+        return AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished())
           ->cachePerPermissions()
           ->addCacheableDependency($entity);
-        if (!$access_result->isAllowed()) {
-          $access_result->setReason("The 'view media' permission is required and the media item must be published.");
-        }
-        return $access_result;
 
       case 'update':
         if ($account->hasPermission('update any media')) {
diff --git a/core/modules/media/src/MediaInterface.php b/core/modules/media/src/MediaInterface.php
index 912bf97f3e..70644418ed 100644
--- a/core/modules/media/src/MediaInterface.php
+++ b/core/modules/media/src/MediaInterface.php
@@ -13,24 +13,6 @@
  */
 interface MediaInterface extends ContentEntityInterface, EntityChangedInterface, RevisionLogInterface, EntityOwnerInterface, EntityPublishedInterface {
 
-  /**
-   * Gets the media item name.
-   *
-   * @return string
-   *   The name of the media item.
-   */
-  public function getName();
-
-  /**
-   * Sets the media item name.
-   *
-   * @param string $name
-   *   The name of the media item.
-   *
-   * @return $this
-   */
-  public function setName($name);
-
   /**
    * Returns the media item creation timestamp.
    *
diff --git a/core/modules/media/src/Plugin/views/wizard/Media.php b/core/modules/media/src/Plugin/views/wizard/Media.php
index 30a7ad6323..eb457015dc 100644
--- a/core/modules/media/src/Plugin/views/wizard/Media.php
+++ b/core/modules/media/src/Plugin/views/wizard/Media.php
@@ -22,6 +22,22 @@ class Media extends WizardPluginBase {
    */
   protected $createdColumn = 'media_field_data-created';
 
+  /**
+   * Set default values for the filters.
+   *
+   * @var array
+   */
+  protected $filters = [
+    'status' => [
+      'value' => '1',
+      'table' => 'media_field_data',
+      'field' => 'status',
+      'plugin_id' => 'boolean',
+      'entity_type' => 'media',
+      'entity_field' => 'status',
+    ],
+  ];
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/media/src/Plugin/views/wizard/MediaRevision.php b/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
index 10b51547b9..7abc41aad7 100644
--- a/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
+++ b/core/modules/media/src/Plugin/views/wizard/MediaRevision.php
@@ -22,6 +22,22 @@ class MediaRevision extends WizardPluginBase {
    */
   protected $createdColumn = 'media_field_revision-created';
 
+  /**
+   * Set default values for the filters.
+   *
+   * @var array
+   */
+  protected $filters = [
+    'status' => [
+      'value' => '1',
+      'table' => 'media_field_revision',
+      'field' => 'status',
+      'plugin_id' => 'boolean',
+      'entity_type' => 'media',
+      'entity_field' => 'status',
+    ],
+  ];
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/media/tests/src/Functional/MediaAccessTest.php b/core/modules/media/tests/src/Functional/MediaAccessTest.php
index d5c23041fa..070a980dfc 100644
--- a/core/modules/media/tests/src/Functional/MediaAccessTest.php
+++ b/core/modules/media/tests/src/Functional/MediaAccessTest.php
@@ -12,7 +12,7 @@
  *
  * @group media
  */
-class MediaAccessTest extends MediaUiFunctionalTest {
+class MediaAccessTest extends MediaFunctionalTestBase {
 
   use AssertPageCacheContextsAndTagsTrait;
 
@@ -60,11 +60,9 @@ public function testMediaAccess() {
     $this->drupalGet('media/' . $media->id());
     $this->assertCacheContext('user.permissions');
     $assert_session->statusCodeEquals(403);
-    $access_result = $media->access('view', NULL, TRUE);
-    $this->assertSame("The 'view media' permission is required and the media item must be published.", $access_result->getReason());
     $this->grantPermissions($role, ['view media']);
     $this->drupalGet('media/' . $media->id());
-    $this->assertCacheContext('user');
+    $this->assertCacheContext('user.permissions');
     $assert_session->statusCodeEquals(200);
 
     // Test 'create media' permission.
@@ -107,28 +105,6 @@ public function testMediaAccess() {
     $this->drupalGet('media/' . $media->id() . '/delete');
     $this->assertCacheContext('user.permissions');
     $assert_session->statusCodeEquals(200);
-
-    // Test the 'access media overview' permission.
-    $this->grantPermissions($role, ['access content overview']);
-    $this->drupalGet('admin/content');
-    $assert_session->linkByHrefNotExists('/admin/content/media');
-    $this->assertCacheContext('user');
-
-    // Create a new role, which implicitly checks if the permission exists.
-    $mediaOverviewRole = $this->createRole(['access content overview', 'access media overview']);
-    $this->nonAdminUser->addRole($mediaOverviewRole);
-    $this->nonAdminUser->save();
-
-    $this->drupalGet('admin/content');
-    $assert_session->linkByHrefExists('/admin/content/media');
-    $this->clickLink('Media');
-    $this->assertCacheContext('user.permissions');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->elementExists('css', '.view-media');
-    $assert_session->pageTextContains($this->loggedInUser->getDisplayName());
-    $assert_session->pageTextContains($this->nonAdminUser->getDisplayName());
-    $assert_session->linkByHrefExists('/media/' . $media->id());
-    $assert_session->linkByHrefExists('/media/' . $user_media->id());
   }
 
 }
diff --git a/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php b/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
index d56e1565f7..75e0d06c16 100644
--- a/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
+++ b/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
@@ -45,7 +45,7 @@
   /**
    * A non-admin test user account.
    *
-   * @var \Drupal\user\UserInterface
+   * @var \Drupal\Core\Session\AccountInterface
    */
   protected $nonAdminUser;
 
diff --git a/core/modules/media/tests/src/Functional/MediaRevisionTest.php b/core/modules/media/tests/src/Functional/MediaRevisionTest.php
index b8ff7c556c..9ce5f9e384 100644
--- a/core/modules/media/tests/src/Functional/MediaRevisionTest.php
+++ b/core/modules/media/tests/src/Functional/MediaRevisionTest.php
@@ -65,7 +65,7 @@ public function testRevisions() {
     $assert->statusCodeEquals(200);
 
     // Confirm the revision page shows the correct title.
-    $assert->pageTextContains($media->getName());
+    $assert->pageTextContains($media->label());
 
     // Confirm that the last revision is the default revision.
     $this->assertTrue($media->isDefaultRevision(), 'Last revision is the default.');
@@ -168,7 +168,7 @@ public function testImageMediaRevision() {
    *   A media object with up to date revision information.
    */
   protected function createMediaRevision(MediaInterface $media) {
-    $media->setName($this->randomMachineName());
+    $media->set('name', $this->randomMachineName());
     $media->setNewRevision();
     $media->save();
     return $media;
diff --git a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
index 74ac67c20e..4caab94083 100644
--- a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
+++ b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
@@ -67,7 +67,7 @@ public function testMediaWithOnlyOneMediaType() {
       ->getStorage('media')
       ->loadUnchanged($media_id);
     $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
-    $this->assertEquals($media->getName(), $media_name);
+    $this->assertEquals($media->label(), $media_name);
     $assert_session->titleEquals($media_name . ' | Drupal');
 
     // Tests media edit form.
@@ -83,7 +83,7 @@ public function testMediaWithOnlyOneMediaType() {
     $media = $this->container->get('entity_type.manager')
       ->getStorage('media')
       ->loadUnchanged($media_id);
-    $this->assertEquals($media->getName(), $media_name2);
+    $this->assertEquals($media->label(), $media_name2);
     $assert_session->titleEquals($media_name2 . ' | Drupal');
 
     // Test that there is no empty vertical tabs element, if the container is
@@ -171,12 +171,12 @@ public function testMediaWithMultipleMediaTypes() {
     // Go to first media item.
     $this->drupalGet('media/' . $first_media_item->id());
     $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains($first_media_item->getName());
+    $assert_session->pageTextContains($first_media_item->label());
 
     // Go to second media item.
     $this->drupalGet('media/' . $second_media_item->id());
     $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains($second_media_item->getName());
+    $assert_session->pageTextContains($second_media_item->label());
   }
 
 }
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php
index c638f830ca..6cc7936fe5 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceFileTest.php
@@ -55,16 +55,9 @@ public function testMediaFileSource() {
     // Make sure the thumbnail is displayed.
     $assert_session->elementAttributeContains('css', '.image-style-thumbnail', 'src', 'generic.png');
 
-    // Make sure checkbox changes the visibility of log message field.
-    $this->drupalGet("media/1/edit");
-    $page->uncheckField('revision');
-    $assert_session->elementAttributeContains('css', '.field--name-revision-log-message', 'style', 'display: none');
-    $page->checkField('revision');
-    $assert_session->elementAttributeNotContains('css', '.field--name-revision-log-message', 'style', 'display');
-
     // Load the media and check if the label was properly populated.
     $media = Media::load(1);
-    $this->assertEquals($test_filename, $media->getName());
+    $this->assertEquals($test_filename, $media->label());
 
     // Test the MIME type icon.
     $icon_base = \Drupal::config('media.settings')->get('icon_base_uri');
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
index dd9944281b..33fe10d8e5 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
@@ -72,7 +72,7 @@ public function testMediaImageSource() {
 
     // Load the media and check that all fields are properly populated.
     $media = Media::load(1);
-    $this->assertEquals('example_1.jpeg', $media->getName());
+    $this->assertEquals('example_1.jpeg', $media->label());
     $this->assertEquals('200', $media->get('field_string_width')->value);
     $this->assertEquals('89', $media->get('field_string_height')->value);
   }
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php
index ce0f185ecb..c6ea4ec7db 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php
@@ -123,6 +123,7 @@ public function doTestCreateMediaType($media_type_id, $source_id, array $provide
 
     // Save the form to create the type.
     $page->pressButton('Save');
+    $assert_session->statusCodeEquals(200);
     $assert_session->pageTextContains('The media type ' . $media_type_id . ' has been added.');
     $this->drupalGet('admin/structure/media');
     $assert_session->pageTextContains($media_type_id);
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
index 981da61d59..38a6227440 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
@@ -54,6 +54,7 @@ public function testMediaTypes() {
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/structure/media');
+    $assert_session->statusCodeEquals(200);
     $assert_session->pageTextContains('No media types available. Add media type.');
     $assert_session->linkExists('Add media type');
 
@@ -68,8 +69,10 @@ public function testMediaTypes() {
     $this->assertJsCondition("jQuery('.form-item-source-configuration-test-config-value').length > 0;");
     $page->fillField('description', $description);
     $page->pressButton('Save');
+    $assert_session->statusCodeEquals(200);
     $assert_session->pageTextContains('The media type ' . $name . ' has been added.');
     $this->drupalGet('admin/structure/media');
+    $assert_session->statusCodeEquals(200);
     $assert_session->pageTextContains($name);
     $assert_session->pageTextContains($description);
 
@@ -139,7 +142,7 @@ public function testMediaTypes() {
     $page->uncheckField('options[status]');
     $page->checkField('options[queue_thumbnail_downloads]');
     $page->pressButton('Save');
-    $assert_session->pageTextContains("The media type $new_name has been updated.");
+    $assert_session->statusCodeEquals(200);
 
     // Test if edit worked and if new field values have been saved as expected.
     $this->drupalGet('admin/structure/media/manage/' . $this->testMediaType->id());
diff --git a/core/modules/media/tests/src/Kernel/MediaCreationTest.php b/core/modules/media/tests/src/Kernel/MediaCreationTest.php
index baf837f2c2..123470341b 100644
--- a/core/modules/media/tests/src/Kernel/MediaCreationTest.php
+++ b/core/modules/media/tests/src/Kernel/MediaCreationTest.php
@@ -50,7 +50,7 @@ public function testMediaEntityCreation() {
 
     $this->assertInstanceOf(MediaInterface::class, Media::load($media->id()), 'The new media item has not been created in the database.');
     $this->assertEquals($this->testMediaType->id(), $media->bundle(), 'The media item was not created with the correct type.');
-    $this->assertEquals('Unnamed', $media->getName(), 'The media item was not created with the correct name.');
+    $this->assertEquals('Unnamed', $media->label(), 'The media item was not created with the correct name.');
     $source_field_name = $media->bundle->entity->getSource()->getSourceFieldDefinition($media->bundle->entity)->getName();
     $this->assertEquals('Nation of sheep, ruled by wolves, owned by pigs.', $media->get($source_field_name)->value, 'Source returns incorrect source field value.');
   }
diff --git a/core/modules/media/tests/src/Kernel/MediaLinkRelationsTest.php b/core/modules/media/tests/src/Kernel/MediaLinkRelationsTest.php
deleted file mode 100644
index 164df60e72..0000000000
--- a/core/modules/media/tests/src/Kernel/MediaLinkRelationsTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Drupal\Tests\media\Kernel;
-
-use Drupal\media\Entity\Media;
-
-/**
- * Tests link relationships for Media entity.
- *
- * @group media
- */
-class MediaLinkRelationsTest extends MediaKernelTestBase {
-
-  /**
-   * Tests that all link relationships for Media exist.
-   */
-  public function testExistLinkRelationships() {
-    /** @var \Drupal\Core\Http\LinkRelationTypeManager $link_relation_type_manager */
-    $link_relation_type_manager = $this->container->get('plugin.manager.link_relation_type');
-    $media = Media::create(['bundle' => $this->testMediaType->id()]);
-    $media->save();
-    foreach ($media->uriRelationships() as $relation_name) {
-      $this->assertTrue($link_relation_type_manager->hasDefinition($relation_name), "Link relationship '{$relation_name}' for Media entity");
-    }
-  }
-
-}
diff --git a/core/modules/media/tests/src/Kernel/MediaSourceTest.php b/core/modules/media/tests/src/Kernel/MediaSourceTest.php
index fc30326fb1..90f6f2b592 100644
--- a/core/modules/media/tests/src/Kernel/MediaSourceTest.php
+++ b/core/modules/media/tests/src/Kernel/MediaSourceTest.php
@@ -25,11 +25,8 @@ public function testDefaultName() {
     $media_source = $media->getSource();
     $this->assertEquals('default_name', $media_source->getPluginDefinition()['default_name_metadata_attribute'], 'Default metadata attribute is not used for the default name.');
     $this->assertEquals('media:' . $media->bundle() . ':' . $media->uuid(), $media_source->getMetadata($media, 'default_name'), 'Value of the default name metadata attribute does not look correct.');
-    $this->assertEquals('media:' . $media->bundle() . ':' . $media->uuid(), $media->getName(), 'Default name was not used correctly by getName().');
-    $this->assertEquals($media->getName(), $media->label(), 'Default name and label are not the same.');
     $media->save();
-    $this->assertEquals('media:' . $media->bundle() . ':' . $media->uuid(), $media->getName(), 'Default name was not saved correctly.');
-    $this->assertEquals($media->getName(), $media->label(), 'The label changed during save.');
+    $this->assertEquals('media:' . $media->bundle() . ':' . $media->uuid(), $media->label(), 'Default name was not set correctly.');
 
     // Make sure that the user-supplied name is used.
     /** @var \Drupal\media\MediaInterface $media */
@@ -42,8 +39,7 @@ public function testDefaultName() {
     $this->assertEquals('default_name', $media_source->getPluginDefinition()['default_name_metadata_attribute'], 'Default metadata attribute is not used for the default name.');
     $this->assertEquals('media:' . $media->bundle() . ':' . $media->uuid(), $media_source->getMetadata($media, 'default_name'), 'Value of the default name metadata attribute does not look correct.');
     $media->save();
-    $this->assertEquals($name, $media->getName(), 'User-supplied name was not set correctly.');
-    $this->assertEquals($media->getName(), $media->label(), 'The user-supplied name does not match the label.');
+    $this->assertEquals($name, $media->label(), 'User-supplied name was not set correctly.');
 
     // Change the default name attribute and see if it is used to set the name.
     $name = 'Old Major';
@@ -55,8 +51,7 @@ public function testDefaultName() {
     $this->assertEquals('alternative_name', $media_source->getPluginDefinition()['default_name_metadata_attribute'], 'Correct metadata attribute is not used for the default name.');
     $this->assertEquals($name, $media_source->getMetadata($media, 'alternative_name'), 'Value of the default name metadata attribute does not look correct.');
     $media->save();
-    $this->assertEquals($name, $media->getName(), 'Default name was not set correctly.');
-    $this->assertEquals($media->getName(), $media->label(), 'The default name does not match the label.');
+    $this->assertEquals($name, $media->label(), 'Default name was not set correctly.');
   }
 
   /**
@@ -268,7 +263,7 @@ public function testThumbnail() {
       'field_media_test' => 'some_value',
     ]);
     $media->save();
-    $this->assertEquals('Boxer', $media->getName(), 'Correct name was not set on the media entity.');
+    $this->assertEquals('Boxer', $media->label(), 'Correct name was not set on the media entity.');
     $this->assertEquals('This will be title.', $media->thumbnail->title, 'Title text was not set on the thumbnail.');
     $this->assertEquals('This will be alt.', $media->thumbnail->alt, 'Alt text was not set on the thumbnail.');
   }
@@ -298,7 +293,7 @@ public function testConstraints() {
     $this->assertEquals('Inappropriate text.', $violations->get(0)->getMessage(), 'Incorrect constraint validation message found.');
 
     // Fix the violation and make sure it is not reported anymore.
-    $media->setName('I love Drupal!');
+    $media->set('name', 'I love Drupal!');
     $violations = $media->validate();
     $this->assertCount(0, $violations, 'Expected number of validations not found.');
 
@@ -306,7 +301,6 @@ public function testConstraints() {
     $this->assertEmpty($media->id(), 'Entity ID was found.');
     $media->save();
     $this->assertNotEmpty($media->id(), 'Entity ID was not found.');
-    $this->assertSame($media->getName(), 'I love Drupal!');
 
     // Test source field constraints.
     \Drupal::state()->set('media_source_test_field_constraints', [
diff --git a/core/modules/media/tests/src/Kernel/MediaTest.php b/core/modules/media/tests/src/Kernel/MediaTest.php
deleted file mode 100644
index 5971f65353..0000000000
--- a/core/modules/media/tests/src/Kernel/MediaTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Drupal\Tests\media\Kernel;
-
-use Drupal\media\Entity\Media;
-
-/**
- * Tests Media.
- *
- * @group media
- */
-class MediaTest extends MediaKernelTestBase {
-
-  /**
-   * Tests various aspects of a Media entity.
-   */
-  public function testEntity() {
-    $media = Media::create(['bundle' => $this->testMediaType->id()]);
-
-    $this->assertSame($media, $media->setOwnerId($this->user->id()), 'setOwnerId() method returns its own entity.');
-  }
-
-}
diff --git a/core/modules/menu_link_content/menu_link_content.module b/core/modules/menu_link_content/menu_link_content.module
index f94a139d46..0e02ba948b 100644
--- a/core/modules/menu_link_content/menu_link_content.module
+++ b/core/modules/menu_link_content/menu_link_content.module
@@ -5,7 +5,6 @@
  * Allows administrators to create custom menu links.
  */
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\system\MenuInterface;
 
@@ -82,24 +81,3 @@ function menu_link_content_path_update($path) {
 function menu_link_content_path_delete($path) {
   _menu_link_content_update_path_alias($path['alias']);
 }
-
-/**
- * Implements hook_entity_predelete().
- */
-function menu_link_content_entity_predelete(EntityInterface $entity) {
-  /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
-  $menu_link_manager = \Drupal::service('plugin.manager.menu.link');
-  foreach ($entity->uriRelationships() as $rel) {
-    $url = $entity->toUrl($rel);
-    // Delete all MenuLinkContent links that point to this entity route.
-    $result = $menu_link_manager->loadLinksByRoute($url->getRouteName(), $url->getRouteParameters());
-
-    if ($result) {
-      foreach ($result as $id => $instance) {
-        if ($instance->isDeletable() && strpos($id, 'menu_link_content:') === 0) {
-          $instance->deleteLink();
-        }
-      }
-    }
-  }
-}
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/process/d6/LinkUri.php b/core/modules/menu_link_content/src/Plugin/migrate/process/d6/LinkUri.php
index 7467c72f19..0a4c918387 100644
--- a/core/modules/menu_link_content/src/Plugin/migrate/process/d6/LinkUri.php
+++ b/core/modules/menu_link_content/src/Plugin/migrate/process/d6/LinkUri.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\menu_link_content\Plugin\migrate\process\d6;
 
-use Drupal\menu_link_content\Plugin\migrate\process\LinkUri as RealLinkUri;
+use \Drupal\menu_link_content\Plugin\migrate\process\LinkUri as RealLinkUri;
 
 /**
  * Processes a link path into an 'internal:' or 'entity:' URI.
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
index 2efb8acfd1..338d3ecef9 100644
--- a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
+++ b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
@@ -11,7 +11,6 @@
  *
  * @MigrateSource(
  *   id = "menu_link",
- *   source_module = "menu"
  * )
  */
 class MenuLink extends DrupalSqlBase {
diff --git a/core/modules/menu_link_content/tests/src/Functional/LinksTest.php b/core/modules/menu_link_content/tests/src/Functional/LinksTest.php
index 0fbe4a4be7..5a7121af79 100644
--- a/core/modules/menu_link_content/tests/src/Functional/LinksTest.php
+++ b/core/modules/menu_link_content/tests/src/Functional/LinksTest.php
@@ -3,11 +3,9 @@
 namespace Drupal\Tests\menu_link_content\Functional;
 
 use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Core\Menu\MenuTreeParameters;
 use Drupal\menu_link_content\Entity\MenuLinkContent;
-use Drupal\system\Entity\Menu;
 use Drupal\Tests\BrowserTestBase;
-use Drupal\user\Entity\User;
+use Drupal\system\Entity\Menu;
 
 /**
  * Tests handling of menu links hierarchies.
@@ -142,21 +140,6 @@ public function testCreateLink() {
     $this->assertEqual($link->getChangedTime(), REQUEST_TIME, 'Changing a menu link sets "changed" timestamp.');
   }
 
-  /**
-   * Tests that menu link pointing to entities get removed on entity remove.
-   */
-  public function testMenuLinkOnEntityDelete() {
-    $user = User::create(['name' => 'username']);
-    $user->save();
-    $menu_link_content = MenuLinkContent::create(['menu_name' => 'menu_test', 'link' => [['uri' => 'entity:user/' . $user->id()]], 'bundle' => 'menu_test']);
-    $menu_link_content->save();
-    $menu_tree_condition = (new MenuTreeParameters())->addCondition('route_name', 'entity.user.canonical');
-    $this->assertCount(1, \Drupal::menuTree()->load('menu_test', $menu_tree_condition));
-
-    $user->delete();
-    $this->assertCount(0, \Drupal::menuTree()->load('menu_test', $menu_tree_condition));
-  }
-
   /**
    * Test automatic reparenting of menu links.
    */
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index e46d97152a..ed33b147d3 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -10,6 +10,7 @@
 
 use Drupal\Core\Breadcrumb\Breadcrumb;
 use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Block\BlockPluginInterface;
 use Drupal\Core\Link;
 use Drupal\Core\Menu\MenuLinkInterface;
@@ -169,6 +170,24 @@ function _menu_ui_node_save(NodeInterface $node, array $values) {
   $entity->save();
 }
 
+/**
+ * Implements hook_ENTITY_TYPE_predelete() for node entities.
+ */
+function menu_ui_node_predelete(EntityInterface $node) {
+  // Delete all MenuLinkContent links that point to this node.
+  /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
+  $menu_link_manager = \Drupal::service('plugin.manager.menu.link');
+  $result = $menu_link_manager->loadLinksByRoute('entity.node.canonical', ['node' => $node->id()]);
+
+  if (!empty($result)) {
+    foreach ($result as $id => $instance) {
+      if ($instance->isDeletable() && strpos($id, 'menu_link_content:') === 0) {
+        $instance->deleteLink();
+      }
+    }
+  }
+}
+
 /**
  * Returns the definition for a menu link for the given node.
  *
diff --git a/core/modules/menu_ui/migration_templates/menu_settings.yml b/core/modules/menu_ui/migration_templates/menu_settings.yml
index d3b1501cfa..dee5f9ee6c 100644
--- a/core/modules/menu_ui/migration_templates/menu_settings.yml
+++ b/core/modules/menu_ui/migration_templates/menu_settings.yml
@@ -8,7 +8,6 @@ source:
   plugin: variable
   variables:
     - menu_override_parent_selector
-  source_module: menu
 process:
   override_parent_selector: menu_override_parent_selector
 destination:
diff --git a/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php b/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php
index 0b08ebd979..f7bf7f88d4 100644
--- a/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php
+++ b/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php
@@ -82,9 +82,9 @@ public function testMenuBlock() {
       'parent' => '',
       'title' => 'Alpaca',
       'menu_name' => 'llama',
-      'link' => [
-        ['uri' => 'internal:/'],
-      ],
+      'link' => [[
+        'uri' => 'internal:/',
+      ]],
       'bundle' => 'menu_name',
     ]);
     $menu_link_2->save();
diff --git a/core/modules/migrate/src/Annotation/MigrateDestination.php b/core/modules/migrate/src/Annotation/MigrateDestination.php
index 4342ba72e6..1fd51d70e5 100644
--- a/core/modules/migrate/src/Annotation/MigrateDestination.php
+++ b/core/modules/migrate/src/Annotation/MigrateDestination.php
@@ -43,15 +43,4 @@ class MigrateDestination extends Plugin {
    */
   public $requirements_met = TRUE;
 
-  /**
-   * Identifies the system handling the data the destination plugin will write.
-   *
-   * The destination plugin itself determines how the value is used. For
-   * example, Migrate Drupal's destination plugins expect destination_module to
-   * be the name of a module that must be installed on the destination.
-   *
-   * @var string
-   */
-  public $destination_module;
-
 }
diff --git a/core/modules/migrate/src/Annotation/MigrateSource.php b/core/modules/migrate/src/Annotation/MigrateSource.php
index 8445ca014a..95a2431536 100644
--- a/core/modules/migrate/src/Annotation/MigrateSource.php
+++ b/core/modules/migrate/src/Annotation/MigrateSource.php
@@ -43,15 +43,16 @@ class MigrateSource extends Plugin implements MultipleProviderAnnotationInterfac
   /**
    * Identifies the system providing the data the source plugin will read.
    *
-   * The source plugin itself determines how the value is used. For example,
-   * Migrate Drupal's source plugins expect source_module to be the name of a
-   * module that must be installed and enabled in the source database.
+   * This can be any type, and the source plugin itself determines how the value
+   * is used. For example, Migrate Drupal's source plugins expect
+   * source_provider to be the name of a module that must be installed and
+   * enabled in the source database.
    *
    * @see \Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase::checkRequirements
    *
-   * @var string
+   * @var mixed
    */
-  public $source_module;
+  public $source_provider;
 
   /**
    * Specifies the minimum version of the source provider.
@@ -59,7 +60,7 @@ class MigrateSource extends Plugin implements MultipleProviderAnnotationInterfac
    * This can be any type, and the source plugin itself determines how it is
    * used. For example, Migrate Drupal's source plugins expect this to be an
    * integer representing the minimum installed database schema version of the
-   * module specified by source_module.
+   * module specified by source_provider.
    *
    * @var mixed
    */
diff --git a/core/modules/migrate/src/MigrateExecutable.php b/core/modules/migrate/src/MigrateExecutable.php
index 224746f381..e8316e4129 100644
--- a/core/modules/migrate/src/MigrateExecutable.php
+++ b/core/modules/migrate/src/MigrateExecutable.php
@@ -96,16 +96,16 @@ class MigrateExecutable implements MigrateExecutableInterface {
    * @param \Drupal\migrate\Plugin\MigrationInterface $migration
    *   The migration to run.
    * @param \Drupal\migrate\MigrateMessageInterface $message
-   *   (optional) The migrate message service.
+   *   The message to record.
    * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
-   *   (optional) The event dispatcher.
+   *   The event dispatcher.
    *
    * @throws \Drupal\migrate\MigrateException
    */
-  public function __construct(MigrationInterface $migration, MigrateMessageInterface $message = NULL, EventDispatcherInterface $event_dispatcher = NULL) {
+  public function __construct(MigrationInterface $migration, MigrateMessageInterface $message, EventDispatcherInterface $event_dispatcher = NULL) {
     $this->migration = $migration;
-    $this->message = $message ?: new MigrateMessage();
-    $this->migration->getIdMap()->setMessage($this->message);
+    $this->message = $message;
+    $this->migration->getIdMap()->setMessage($message);
     $this->eventDispatcher = $event_dispatcher;
     // Record the memory limit in bytes
     $limit = trim(ini_get('memory_limit'));
@@ -534,9 +534,6 @@ protected function attemptMemoryReclaim() {
 
     // @TODO: explore resetting the container.
 
-    // Run garbage collector to further reduce memory.
-    gc_collect_cycles();
-
     return memory_get_usage();
   }
 
diff --git a/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php b/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php
index a42d70f4f4..866e80cbe0 100644
--- a/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php
+++ b/core/modules/migrate/src/Plugin/MigrateDestinationInterface.php
@@ -133,12 +133,4 @@ public function supportsRollback();
    */
   public function rollbackAction();
 
-  /**
-   * Gets the destination module handling the destination data.
-   *
-   * @return string|null
-   *   The destination module or NULL if not found.
-   */
-  public function getDestinationModule();
-
 }
diff --git a/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php
index 31322a5724..7ba0168ee6 100644
--- a/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php
+++ b/core/modules/migrate/src/Plugin/MigrateIdMapInterface.php
@@ -229,7 +229,7 @@ public function lookupDestinationId(array $source_id_values);
    *   If unkeyed, the first count($source_id_values) keys will be assumed.
    *
    * @return array
-   *   An array of arrays of destination identifier values.
+   *    An array of arrays of destination identifier values.
    *
    * @throws \Drupal\migrate\MigrateException
    *   Thrown when $source_id_values contains unknown keys, or is the wrong
@@ -268,10 +268,10 @@ public function destroy();
   public function getQualifiedMapTableName();
 
   /**
-   * Sets the migrate message service.
+   * Sets the migrate message.
    *
    * @param \Drupal\migrate\MigrateMessageInterface $message
-   *   The migrate message service.
+   *   The message to display.
    */
   public function setMessage(MigrateMessageInterface $message);
 
diff --git a/core/modules/migrate/src/Plugin/MigrateSourceInterface.php b/core/modules/migrate/src/Plugin/MigrateSourceInterface.php
index a40af2e2bc..ef1785e6fb 100644
--- a/core/modules/migrate/src/Plugin/MigrateSourceInterface.php
+++ b/core/modules/migrate/src/Plugin/MigrateSourceInterface.php
@@ -100,12 +100,4 @@ public function __toString();
    */
   public function getIds();
 
-  /**
-   * Gets the source module providing the source data.
-   *
-   * @return string|null
-   *   The source module or NULL if not found.
-   */
-  public function getSourceModule();
-
 }
diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php
index c81d498460..c7457b2025 100644
--- a/core/modules/migrate/src/Plugin/Migration.php
+++ b/core/modules/migrate/src/Plugin/Migration.php
@@ -572,7 +572,7 @@ public function setProcessOfProperty($property, $process_of_property) {
    */
   public function mergeProcessOfProperty($property, array $process_of_property) {
     // If we already have a process value then merge the incoming process array
-    // otherwise simply set it.
+    //otherwise simply set it.
     $current_process = $this->getProcess();
     if (isset($current_process[$property])) {
       $this->process = NestedArray::mergeDeepArray([$current_process, $this->getProcessNormalized([$property => $process_of_property])], TRUE);
diff --git a/core/modules/migrate/src/Plugin/MigrationInterface.php b/core/modules/migrate/src/Plugin/MigrationInterface.php
index a2a7fb2d94..3165d81b11 100644
--- a/core/modules/migrate/src/Plugin/MigrationInterface.php
+++ b/core/modules/migrate/src/Plugin/MigrationInterface.php
@@ -153,7 +153,7 @@ public function allRowsProcessed();
   /**
    * Set the current migration status.
    *
-   * @param int $status
+   * @param int $result
    *   One of the STATUS_* constants.
    */
   public function setStatus($status);
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php b/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php
index eaf3b54da6..660248494e 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/ComponentEntityDisplayBase.php
@@ -64,6 +64,6 @@ public function fields(MigrationInterface $migration = NULL) {
    * @return \Drupal\Core\Entity\Display\EntityDisplayInterface
    *   The entity display object.
    */
-  abstract protected function getEntity($entity_type, $bundle, $mode);
+  protected abstract function getEntity($entity_type, $bundle, $mode);
 
 }
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Config.php b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
index 18d78a325e..b8db601d14 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Config.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
@@ -195,26 +195,4 @@ public function rollback(array $destination_identifier) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getDestinationModule() {
-    if (!empty($this->configuration['destination_module'])) {
-      return $this->configuration['destination_module'];
-    }
-    if (!empty($this->pluginDefinition['destination_module'])) {
-      return $this->pluginDefinition['destination_module'];
-    }
-    // Config translations require the config_translation module so set the
-    // migration provider to 'config_translation'. The corresponding non
-    // translated configuration is expected to be handled in a separate
-    // migration.
-    if (isset($this->configuration['translations'])) {
-      return 'config_translation';
-    }
-    // Get the module handling this configuration object from the config_name,
-    // which is of the form <module_name>.<configuration object name>
-    return !empty($this->configuration['config_name']) ? explode('.', $this->configuration['config_name'], 2)[0] : NULL;
-  }
-
 }
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php b/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php
index d6c3088817..18a95e6bfb 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/DestinationBase.php
@@ -110,22 +110,4 @@ protected function setRollbackAction(array $id_map, $update_action = MigrateIdMa
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getDestinationModule() {
-    if (!empty($this->configuration['destination_module'])) {
-      return $this->configuration['destination_module'];
-    }
-    if (!empty($this->pluginDefinition['destination_module'])) {
-      return $this->pluginDefinition['destination_module'];
-    }
-    if (is_string($this->migration->provider)) {
-      return $this->migration->provider;
-    }
-    else {
-      return reset($this->migration->provider);
-    }
-  }
-
 }
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 5d40593962..1b2c2e7a5b 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -11,48 +11,7 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Provides a generic destination to import entities.
- *
- * Available configuration keys:
- * - translations: (optional) Boolean, if TRUE, the destination will be
- *   associated with the langcode provided by the source plugin. Defaults to
- *   FALSE.
- *
- * Examples:
- *
- * @code
- * source:
- *   plugin: d7_node
- * process:
- *   nid: tnid
- *   vid: vid
- *   langcode: language
- *   title: title
- *   ...
- *   revision_timestamp: timestamp
- * destination:
- *   plugin: entity:node
- * @endcode
- *
- * This will save the processed, migrated row as a node.
- *
- * @code
- * source:
- *   plugin: d7_node
- * process:
- *   nid: tnid
- *   vid: vid
- *   langcode: language
- *   title: title
- *   ...
- *   revision_timestamp: timestamp
- * destination:
- *   plugin: entity:node
- *   translations: true
- * @endcode
- *
- * This will save the processed, migrated row as a node with the relevant
- * langcode because the translations configuration is set to "true".
+ * Provides entity destination plugin.
  *
  * @MigrateDestination(
  *   id = "entity",
diff --git a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
index 6bdd51ebf0..27b756904a 100644
--- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
+++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
@@ -6,7 +6,6 @@
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\PluginBase;
-use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Event\MigrateIdMapMessageEvent;
 use Drupal\migrate\MigrateException;
@@ -56,7 +55,7 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP
   protected $messageTableName;
 
   /**
-   * The migrate message service.
+   * The migrate message.
    *
    * @var \Drupal\migrate\MigrateMessageInterface
    */
@@ -157,7 +156,6 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->migration = $migration;
     $this->eventDispatcher = $event_dispatcher;
-    $this->message = new MigrateMessage();
   }
 
   /**
diff --git a/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php b/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
index e635918839..eda44b755c 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
@@ -22,4 +22,4 @@
  *
  * @see https://www.drupal.org/node/2873762
  */
-class DedupeEntity extends MakeUniqueEntityField {}
+class DedupeEntity extends MakeUniqueEntityField { }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Migration.php b/core/modules/migrate/src/Plugin/migrate/process/Migration.php
index ef8ad72c3c..1b4160a3e3 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Migration.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Migration.php
@@ -17,4 +17,4 @@
  * @deprecated in Drupal 8.3.x and will be removed in Drupal 9.0.x.
  *  Use \Drupal\migrate\Plugin\migrate\process\MigrationLookup instead.
  */
-class Migration extends MigrationLookup {}
+class Migration extends MigrationLookup { }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
index 5f144a4df3..835fd691c9 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
@@ -222,16 +222,15 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       // Do a normal migration with the stub row.
       $migrate_executable->processRow($stub_row, $process);
       $destination_ids = [];
-      $id_map = $migration->getIdMap();
       try {
         $destination_ids = $destination_plugin->import($stub_row);
       }
       catch (\Exception $e) {
-        $id_map->saveMessage($stub_row->getSourceIdValues(), $e->getMessage());
+        $migration->getIdMap()->saveMessage($stub_row->getSourceIdValues(), $e->getMessage());
       }
 
       if ($destination_ids) {
-        $id_map->saveIdMapping($stub_row, $destination_ids, MigrateIdMapInterface::STATUS_NEEDS_UPDATE);
+        $migration->getIdMap()->saveIdMapping($stub_row, $destination_ids, MigrateIdMapInterface::STATUS_NEEDS_UPDATE);
       }
     }
     if ($destination_ids) {
diff --git a/core/modules/migrate/src/Plugin/migrate/source/EmbeddedDataSource.php b/core/modules/migrate/src/Plugin/migrate/source/EmbeddedDataSource.php
index 8cee6ddbe4..0bb35f3e24 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/EmbeddedDataSource.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/EmbeddedDataSource.php
@@ -28,8 +28,8 @@
  *     -
  *       channel_machine_name: movies
  *       channel_description: Movies
- *   ids:
- *     channel_machine_name:
+ *     ids:
+ *       channel_machine_name:
  *       type: string
  * @endcode
  *
diff --git a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
index 503b1e3d50..e35585034e 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/SourcePluginBase.php
@@ -177,7 +177,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    * @return array
    *   An array of the data for this source.
    */
-  abstract protected function initializeIterator();
+  protected abstract function initializeIterator();
 
   /**
    * Gets the module handler.
@@ -541,17 +541,4 @@ public function postRollback(MigrateRollbackEvent $event) {
     $this->saveHighWater(NULL);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getSourceModule() {
-    if (!empty($this->configuration['source_module'])) {
-      return $this->configuration['source_module'];
-    }
-    elseif (!empty($this->pluginDefinition['source_module'])) {
-      return $this->pluginDefinition['source_module'];
-    }
-    return NULL;
-  }
-
 }
diff --git a/core/modules/migrate/tests/modules/migrate_external_translated_test/src/Plugin/migrate/source/MigrateExternalTranslatedTestSource.php b/core/modules/migrate/tests/modules/migrate_external_translated_test/src/Plugin/migrate/source/MigrateExternalTranslatedTestSource.php
index 8edaeccdea..ceda6d82e4 100644
--- a/core/modules/migrate/tests/modules/migrate_external_translated_test/src/Plugin/migrate/source/MigrateExternalTranslatedTestSource.php
+++ b/core/modules/migrate/tests/modules/migrate_external_translated_test/src/Plugin/migrate/source/MigrateExternalTranslatedTestSource.php
@@ -8,8 +8,7 @@
  * A simple migrate source for our tests.
  *
  * @MigrateSource(
- *   id = "migrate_external_translated_test",
- *   source_module = "migrate_external_translated_test"
+ *   id = "migrate_external_translated_test"
  * )
  */
 class MigrateExternalTranslatedTestSource extends SourcePluginBase {
diff --git a/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php b/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php
index ccbebff307..2a73d702ee 100644
--- a/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php
+++ b/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\migrate\Functional\process;
 
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\Tests\BrowserTestBase;
@@ -50,7 +51,7 @@ public function testExceptionThrow() {
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
 
     // Check that the migration has completed.
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php b/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
index 54c60ba928..0ebc719ec9 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
@@ -5,6 +5,7 @@
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
@@ -189,7 +190,7 @@ public function testEntityWithStringId() {
     ];
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
     $this->assertEquals(MigrationInterface::RESULT_COMPLETED, $result);
 
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php b/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php
index 8dc4aa9ad4..4de21fde02 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php
@@ -7,6 +7,7 @@
 use Drupal\migrate\Event\MigrateMapSaveEvent;
 use Drupal\migrate\Event\MigratePostRowSaveEvent;
 use Drupal\migrate\Event\MigratePreRowSaveEvent;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Event\MigrateEvents;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\KernelTests\KernelTestBase;
@@ -75,7 +76,7 @@ public function testMigrateEvents() {
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     // As the import runs, events will be dispatched, recording the received
     // information in state.
     $executable->import();
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php b/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php
index 207af4d8e1..d99329e181 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\migrate\Kernel;
 
 use Drupal\migrate\Event\MigratePostRowSaveEvent;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Event\MigrateEvents;
 use Drupal\migrate\MigrateExecutable;
@@ -55,7 +56,7 @@ public function testMigrateEvents() {
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     // When the import runs, the first row imported will trigger an
     // interruption.
     $result = $executable->import();
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php b/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php
index 8c5e01e513..3b0091d925 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\migrate\Kernel;
 
 use Drupal\KernelTests\KernelTestBase;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate\Plugin\MigrateIdMapInterface;
@@ -49,7 +50,7 @@ public function testPrepareRowSkip() {
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
     $this->assertEqual($result, MigrationInterface::RESULT_COMPLETED);
 
@@ -84,7 +85,7 @@ public function testPrepareRowSkip() {
     ];
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
     $this->assertEquals($result, MigrationInterface::RESULT_COMPLETED);
 
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php b/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php
index 76c9419757..90187c92fc 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php
@@ -39,9 +39,7 @@ protected function getDatabase(array $source_data) {
         ->createTable($table, [
           // SQLite uses loose affinity typing, so it's OK for every field to
           // be a text field.
-          'fields' => array_map(function() {
-            return ['type' => 'text'];
-          }, $pilot),
+          'fields' => array_map(function() { return ['type' => 'text']; }, $pilot),
         ]);
 
       $fields = array_keys($pilot);
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php b/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
index 2f1a49eaae..b0fc0b8aad 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
@@ -230,9 +230,7 @@ protected function mockFailure($migration, array $row, $status = MigrateIdMapInt
       $migration = $this->getMigration($migration);
     }
     /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */
-    $destination = array_map(function() {
-      return NULL;
-    }, $migration->getDestinationPlugin()->getIds());
+    $destination = array_map(function() { return NULL; }, $migration->getDestinationPlugin()->getIds());
     $row = new Row($row, $migration->getSourcePlugin()->getIds());
     $migration->getIdMap()->saveIdMapping($row, $destination, $status);
   }
diff --git a/core/modules/migrate/tests/src/Kernel/NodeCommentCombinationTrait.php b/core/modules/migrate/tests/src/Kernel/NodeCommentCombinationTrait.php
deleted file mode 100644
index 6f04b3a4f4..0000000000
--- a/core/modules/migrate/tests/src/Kernel/NodeCommentCombinationTrait.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace Drupal\Tests\migrate\Kernel;
-
-use Drupal\comment\Entity\CommentType;
-use Drupal\node\Entity\NodeType;
-
-/**
- * Provides methods for testing node and comment combinations.
- */
-trait NodeCommentCombinationTrait {
-
-  /**
-   * Creates a node type with a corresponding comment type.
-   *
-   * @param string $node_type
-   *   The node type ID.
-   * @param string $comment_type
-   *   (optional) The comment type ID, if not provided defaults to
-   *   comment_node_{type}.
-   */
-  protected function createNodeCommentCombination($node_type, $comment_type = NULL) {
-    if (!$comment_type) {
-      $comment_type = "comment_node_$node_type";
-    }
-    NodeType::create([
-      'type' => $node_type,
-      'label' => $this->randomString(),
-    ])->save();
-
-    CommentType::create([
-      'id' => $comment_type,
-      'label' => $this->randomString(),
-      'target_entity_type_id' => 'node',
-    ])->save();
-  }
-
-}
diff --git a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php
index 62f3d19ba3..d532848ccc 100644
--- a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php
+++ b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php
@@ -89,9 +89,7 @@ public function testGetDefinitions() {
     // Any database-based source plugins should fail a requirements test in the
     // absence of a source database connection (e.g., a connection with the
     // 'migrate' key).
-    $source_plugins = array_map(function ($migration_plugin) {
-      return $migration_plugin->getSourcePlugin();
-    }, $migration_plugins);
+    $source_plugins = array_map(function ($migration_plugin) { return $migration_plugin->getSourcePlugin(); }, $migration_plugins);
     foreach ($source_plugins as $id => $source_plugin) {
       if ($source_plugin instanceof RequirementsInterface) {
         try {
diff --git a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationProvidersExistTest.php b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationProvidersExistTest.php
deleted file mode 100644
index 8e166998c4..0000000000
--- a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationProvidersExistTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Drupal\Tests\migrate\Kernel\Plugin;
-
-use Drupal\Component\Render\FormattableMarkup;
-use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
-use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
-
-/**
- * Tests that modules exist for all source and destination plugins.
- *
- * @group migrate_drupal_ui
- */
-class MigrationProvidersExistTest extends MigrateDrupalTestBase {
-
-  use FileSystemModuleDiscoveryDataProviderTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['migration_provider_test'];
-
-  /**
-   * Tests that modules exist for all source and destination plugins.
-   */
-  public function testProvidersExist() {
-    // Install all available modules.
-    $module_handler = $this->container->get('module_handler');
-    $modules = $this->coreModuleListDataProvider();
-    $modules_enabled = $module_handler->getModuleList();
-    $modules_to_enable = array_keys(array_diff_key($modules, $modules_enabled));
-    $this->enableModules($modules_to_enable);
-
-    /** @var \Drupal\migrate\Plugin\MigrationPluginManager $plugin_manager */
-    $plugin_manager = $this->container->get('plugin.manager.migration');
-    // Get all the migrations
-    $migrations = $plugin_manager->createInstances(array_keys($plugin_manager->getDefinitions()));
-    // Ensure the test module was enabled.
-    $this->assertTrue(array_key_exists('migration_provider_test', $migrations));
-    $this->assertTrue(array_key_exists('migration_provider_no_annotation', $migrations));
-    /** @var \Drupal\migrate\Plugin\Migration $migration */
-    foreach ($migrations as $migration) {
-      $source_module = $migration->getSourcePlugin()->getSourceModule();
-      $destination_module = $migration->getDestinationPlugin()->getDestinationModule();
-      $migration_id = $migration->getPluginId();
-      if ($migration_id == 'migration_provider_test') {
-        $this->assertFalse($source_module, new FormattableMarkup('Source module not found for @migration_id.', ['@migration_id' => $migration_id]));
-        $this->assertFalse($destination_module, new FormattableMarkup('Destination module not found for @migration_id.', ['@migration_id' => $migration_id]));
-      }
-      elseif ($migration_id == 'migration_provider_no_annotation') {
-        $this->assertFalse($source_module, new FormattableMarkup('Source module not found for @migration_id.', ['@migration_id' => $migration_id]));
-        $this->assertTrue($destination_module, new FormattableMarkup('Destination module found for @migration_id.', ['@migration_id' => $migration_id]));
-      }
-      else {
-        $this->assertTrue($source_module, new FormattableMarkup('Source module found for @migration_id.', ['@migration_id' => $migration_id]));
-        $this->assertTrue($destination_module, new FormattableMarkup('Destination module found for @migration_id.', ['@migration_id' => $migration_id]));
-      }
-      // Destination module can't be migrate or migrate_drupal or migrate_drupal_ui
-      $invalid_destinations = ['migrate', 'migrate_drupal', 'migrate_drupal_ui'];
-      $this->assertNotContains($destination_module, $invalid_destinations, new FormattableMarkup('Invalid destination for @migration_id.', ['@migration_id' => $migration_id]));
-    }
-  }
-
-}
diff --git a/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php b/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
index 9338b9e3c9..8c747abadf 100644
--- a/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrationInterface;
 
 /**
@@ -65,7 +66,7 @@ public function testMultipleValueExplode(array $source_data, array $expected_dat
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
 
     // Migration needs to succeed before further assertions are made.
diff --git a/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php b/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
index dc63de3db6..b4cc0e82b3 100644
--- a/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\MigrationInterface;
 
 /**
@@ -93,7 +94,7 @@ public function testScalarAndMultipleValues(array $source_data, array $expected_
 
     $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
 
-    $executable = new MigrateExecutable($migration);
+    $executable = new MigrateExecutable($migration, new MigrateMessage());
     $result = $executable->import();
 
     // Migration needs to succeed before further assertions are made.
diff --git a/core/modules/migrate/tests/src/Unit/MigrateTestCase.php b/core/modules/migrate/tests/src/Unit/MigrateTestCase.php
index cbac03a84e..19db21a6ff 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateTestCase.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateTestCase.php
@@ -147,9 +147,7 @@ protected function getDatabase(array $database_contents, $connection_options = [
   protected function createSchemaFromRow(array $row) {
     // SQLite uses loose ("affinity") typing, so it is OK for every column to be
     // a text field.
-    $fields = array_map(function() {
-      return ['type' => 'text'];
-    }, $row);
+    $fields = array_map(function() { return ['type' => 'text']; }, $row);
     return ['fields' => $fields];
   }
 
diff --git a/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php b/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
index c38d04184b..e6bb37b059 100644
--- a/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
+++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
@@ -113,7 +113,7 @@ public function testUntranslatable() {
     $this->storage->getEntityType()->willReturn($entity_type->reveal());
 
     $destination = new EntityTestDestination(
-      ['translations' => TRUE ],
+      [ 'translations' => TRUE ],
       '',
       [],
       $this->migration->reveal(),
diff --git a/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php b/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php
index cde58b7a93..377533465f 100644
--- a/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php
@@ -166,9 +166,7 @@ protected function entityQueryExpects($count) {
       ->will($this->returnValue($this->entityQuery));
     $this->entityQuery->expects($this->exactly($count + 1))
       ->method('execute')
-      ->will($this->returnCallback(function () use (&$count) {
-        return $count--;
-      }));
+      ->will($this->returnCallback(function () use (&$count) { return $count--;}));
   }
 
   /**
diff --git a/core/modules/migrate/tests/src/Unit/process/GetTest.php b/core/modules/migrate/tests/src/Unit/process/GetTest.php
index b87893550d..01ab2da74d 100644
--- a/core/modules/migrate/tests/src/Unit/process/GetTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/GetTest.php
@@ -48,9 +48,7 @@ public function testTransformSourceArray() {
     $this->plugin->setSource(['test1', 'test2']);
     $this->row->expects($this->exactly(2))
       ->method('getSourceProperty')
-      ->will($this->returnCallback(function ($argument)  use ($map) {
-        return $map[$argument];
-      }));
+      ->will($this->returnCallback(function ($argument)  use ($map) { return $map[$argument]; } ));
     $value = $this->plugin->transform(NULL, $this->migrateExecutable, $this->row, 'destinationproperty');
     $this->assertSame($value, ['source_value1', 'source_value2']);
   }
@@ -81,9 +79,7 @@ public function testTransformSourceArrayAt() {
     $this->plugin->setSource(['test1', '@@test2', '@@test3', 'test4']);
     $this->row->expects($this->exactly(4))
       ->method('getSourceProperty')
-      ->will($this->returnCallback(function ($argument)  use ($map) {
-        return $map[$argument];
-      }));
+      ->will($this->returnCallback(function ($argument)  use ($map) { return $map[$argument]; } ));
     $value = $this->plugin->transform(NULL, $this->migrateExecutable, $this->row, 'destinationproperty');
     $this->assertSame($value, ['source_value1', 'source_value2', 'source_value3', 'source_value4']);
   }
diff --git a/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php b/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php
index 531eded259..2f33e621e8 100644
--- a/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php
@@ -165,9 +165,7 @@ protected function entityQueryExpects($count) {
       ->will($this->returnValue($this->entityQuery));
     $this->entityQuery->expects($this->exactly($count + 1))
       ->method('execute')
-      ->will($this->returnCallback(function () use (&$count) {
-        return $count--;
-      }));
+      ->will($this->returnCallback(function () use (&$count) { return $count--;}));
   }
 
   /**
diff --git a/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php b/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
index dd18928d4a..f30c184458 100644
--- a/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
@@ -199,43 +199,4 @@ public function successfulLookupDataProvider() {
     ];
   }
 
-  /**
-   * Tests that a message is successfully created if import fails.
-   */
-  public function testImportException() {
-    $migration_plugin = $this->prophesize(MigrationInterface::class);
-    $migration_plugin_manager = $this->prophesize(MigrationPluginManagerInterface::class);
-    $process_plugin_manager = $this->prophesize(MigratePluginManager::class);
-
-    $destination_id_map = $this->prophesize(MigrateIdMapInterface::class);
-    $destination_migration = $this->prophesize('Drupal\migrate\Plugin\Migration');
-    $destination_migration->getIdMap()->willReturn($destination_id_map->reveal());
-    $migration_plugin_manager->createInstances(['destination_migration'])
-      ->willReturn(['destination_migration' => $destination_migration->reveal()]);
-    $destination_id_map->lookupDestinationId([1])->willReturn(NULL);
-    $destination_id_map->saveMessage(Argument::any(), Argument::any())->willReturn(NULL);
-    $destination_id_map->saveIdMapping(Argument::any(), Argument::any(), Argument::any())->shouldNotBeCalled();
-
-    $configuration = [
-      'no_stub' => FALSE,
-      'migration' => 'destination_migration',
-    ];
-
-    $destination_migration->id()->willReturn('destination_migration');
-    $destination_migration->getDestinationPlugin(TRUE)->shouldBeCalled();
-    $destination_migration->getProcess()->willReturn([]);
-    $destination_migration->getSourceConfiguration()->willReturn([]);
-
-    $source_plugin = $this->prophesize(MigrateSourceInterface::class);
-    $source_plugin->getIds()->willReturn(['nid']);
-    $destination_migration->getSourcePlugin()->willReturn($source_plugin->reveal());
-    $destination_plugin = $this->prophesize(MigrateDestinationInterface::class);
-    $e = new \Exception();
-    $destination_plugin->import(Argument::any())->willThrow($e);
-    $destination_migration->getDestinationPlugin(TRUE)->willReturn($destination_plugin->reveal());
-
-    $migration = new MigrationLookup($configuration, '', [], $migration_plugin->reveal(), $migration_plugin_manager->reveal(), $process_plugin_manager->reveal());
-    $migration->transform(1, $this->migrateExecutable, $this->row, '');
-  }
-
 }
diff --git a/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php b/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php
index df41e82840..1f7d94ae0d 100644
--- a/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\migrate\Plugin\migrate\process\UrlEncode;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Row;
 use Drupal\Tests\migrate\Unit\MigrateTestCase;
 
@@ -55,7 +56,7 @@ public function testUrls($input, $output) {
    *   Encoded URL.
    */
   protected function doTransform($value) {
-    $executable = new MigrateExecutable($this->getMigration());
+    $executable = new MigrateExecutable($this->getMigration(), new MigrateMessage());
     $row = new Row();
 
     return (new UrlEncode([], 'urlencode', []))
diff --git a/core/modules/migrate_drupal/migrate_drupal.module b/core/modules/migrate_drupal/migrate_drupal.module
index 9f623ea337..8399f3f4fa 100644
--- a/core/modules/migrate_drupal/migrate_drupal.module
+++ b/core/modules/migrate_drupal/migrate_drupal.module
@@ -9,6 +9,7 @@
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\migrate\Exception\RequirementsException;
 use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateMessage;
 use Drupal\migrate\Plugin\RequirementsInterface;
 
 /**
@@ -48,7 +49,7 @@ function migrate_drupal_migration_plugins_alter(&$definitions) {
       if ($source_plugin instanceof RequirementsInterface) {
         $source_plugin->checkRequirements();
       }
-      $executable = new MigrateExecutable($vocabulary_migration);
+      $executable = new MigrateExecutable($vocabulary_migration, new MigrateMessage());
       $process = ['vid' => $definitions['d6_taxonomy_vocabulary']['process']['vid']];
       foreach ($source_plugin as $row) {
         $executable->processRow($row, $process);
@@ -57,15 +58,7 @@ function migrate_drupal_migration_plugins_alter(&$definitions) {
         foreach ($plugin_ids as $plugin_id) {
           // Match the field name derivation in d6_vocabulary_field.yml.
           $field_name = substr('field_' . $row->getDestinationProperty('vid'), 0, 32);
-
-          // The Forum module is expecting 'taxonomy_forums' as the field name
-          // for the forum nodes. The 'forum_vocabulary' source property is
-          // evaluated in Drupal\taxonomy\Plugin\migrate\source\d6\Vocabulary
-          // and is set to true if the vocabulary vid being migrated is the
-          // same as the one in the 'forum_nav_vocabulary' variable on the
-          // source site.
-          $destination_vid = $row->getSourceProperty('forum_vocabulary') ? 'taxonomy_forums' : $field_name;
-          $definitions[$plugin_id]['process'][$destination_vid] = 'tid';
+          $definitions[$plugin_id]['process'][$field_name] = 'tid';
         }
       }
     }
diff --git a/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php b/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
index 20558200e9..73949e1383 100644
--- a/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
+++ b/core/modules/migrate_drupal/src/Annotation/MigrateCckField.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\migrate_drupal\Annotation;
 
-@trigger_error('MigrateCckField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField instead.', E_USER_DEPRECATED);
+@trigger_error('MigrateCckField is deprecated in Drupal 8.3.x and will be
+removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField
+instead.', E_USER_DEPRECATED);
 
 /**
  * Deprecated: Defines a cckfield plugin annotation object.
@@ -12,8 +14,6 @@
  *
  * Plugin Namespace: Plugin\migrate\cckfield
  *
- * @see https://www.drupal.org/node/2751897
- *
  * @Annotation
  */
 class MigrateCckField extends MigrateField {
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
index 6dceeab70c..49f41a3817 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldInterface.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\migrate_drupal\Plugin;
 
-@trigger_error('MigrateCckFieldInterface is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField instead.', E_USER_DEPRECATED);
+@trigger_error('MigrateCckFieldInterface is deprecated in Drupal 8.3.x and will
+be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField
+instead.', E_USER_DEPRECATED);
 
 use Drupal\migrate\Plugin\MigrationInterface;
 
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php
index 515e71e054..9ade1e517d 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\migrate_drupal\Plugin;
 
-@trigger_error('MigrateCckFieldPluginManager is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateFieldPluginManager instead.', E_USER_DEPRECATED);
+@trigger_error('MigrateCckFieldPluginManager is deprecated in Drupal 8.3.x and will
+be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateFieldPluginManager
+instead.', E_USER_DEPRECATED);
 
 /**
  * Deprecated: Plugin manager for migrate field plugins.
@@ -10,8 +12,6 @@
  * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
  *   \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManager instead.
  *
- * @see https://www.drupal.org/node/2751897
- *
  * @ingroup migration
  */
-class MigrateCckFieldPluginManager extends MigrateFieldPluginManager implements MigrateCckFieldPluginManagerInterface {}
+class MigrateCckFieldPluginManager extends MigrateFieldPluginManager implements MigrateCckFieldPluginManagerInterface { }
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php
index 8eba728f7d..bdb2879282 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\migrate_drupal\Plugin;
 
-@trigger_error('MigrateCckFieldPluginManagerInterface is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateFieldPluginManagerInterface instead.', E_USER_DEPRECATED);
+@trigger_error('MigrateCckFieldPluginManagerInterface is deprecated in Drupal 8.3.x
+and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateFieldPluginManagerInterface
+instead.', E_USER_DEPRECATED);
 
 /**
  * Provides an interface for cck field plugin manager.
@@ -12,4 +14,4 @@
  *
  * @see https://www.drupal.org/node/2751897
  */
-interface MigrateCckFieldPluginManagerInterface extends MigrateFieldPluginManagerInterface {}
+interface MigrateCckFieldPluginManagerInterface extends MigrateFieldPluginManagerInterface { }
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateFieldInterface.php b/core/modules/migrate_drupal/src/Plugin/MigrateFieldInterface.php
index 2aac5d18eb..c8cecad333 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateFieldInterface.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateFieldInterface.php
@@ -43,17 +43,6 @@ public function processFieldWidget(MigrationInterface $migration);
    */
   public function processFieldFormatter(MigrationInterface $migration);
 
-  /**
-   * Get the field formatter type from the source.
-   *
-   * @param \Drupal\migrate\Row $row
-   *   The field being migrated.
-   *
-   * @return string
-   *   The field formatter type.
-   */
-  public function getFieldFormatterType(Row $row);
-
   /**
    * Get a map between D6 formatters and D8 formatters for this field type.
    *
@@ -64,17 +53,6 @@ public function getFieldFormatterType(Row $row);
    */
   public function getFieldFormatterMap();
 
-  /**
-   * Get the field widget type from the source.
-   *
-   * @param \Drupal\migrate\Row $row
-   *   The field being migrated.
-   *
-   * @return string
-   *   The field widget type.
-   */
-  public function getFieldWidgetType(Row $row);
-
   /**
    * Get a map between D6 and D8 widgets for this field type.
    *
diff --git a/core/modules/migrate_drupal/src/Plugin/MigrateFieldPluginManager.php b/core/modules/migrate_drupal/src/Plugin/MigrateFieldPluginManager.php
index 2b33c858b9..60651571f1 100644
--- a/core/modules/migrate_drupal/src/Plugin/MigrateFieldPluginManager.php
+++ b/core/modules/migrate_drupal/src/Plugin/MigrateFieldPluginManager.php
@@ -7,7 +7,7 @@
 use Drupal\migrate\Plugin\MigrationInterface;
 
 /**
- * Plugin manager for migrate field plugins.
+ * Plugin manager for migrate cckfield plugins.
  *
  * @see \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
  * @see \Drupal\migrate\Annotation\MigrateField
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
index d608fb0191..082c05135e 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/CckMigration.php
@@ -2,15 +2,15 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate;
 
-@trigger_error('CckMigration is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Plugin\migrate\FieldMigration instead.', E_USER_DEPRECATED);
+@trigger_error('CckMigration is deprecated in Drupal 8.3.x and will be removed
+before Drupal 9.0.x. Use \Drupal\migrate_drupal\Plugin\migrate\FieldMigration
+instead.', E_USER_DEPRECATED);
 
 /**
  * Migration plugin class for migrations dealing with CCK field values.
  *
  * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
  * \Drupal\migrate_drupal\Plugin\migrate\FieldMigration instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class CckMigration extends FieldMigration {
 
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/FieldMigration.php b/core/modules/migrate_drupal/src/Plugin/migrate/FieldMigration.php
index 3ca8f26a8b..c7aaa2df35 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/FieldMigration.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/FieldMigration.php
@@ -140,25 +140,25 @@ public function getProcess() {
         $field_type = $row->getSourceProperty('type');
 
         try {
-          $plugin_id = $this->fieldPluginManager->getPluginIdFromFieldType($field_type, [], $this);
-          $manager = $this->fieldPluginManager;
+          $plugin_id = $this->cckPluginManager->getPluginIdFromFieldType($field_type, [], $this);
+          $Manager = $this->cckPluginManager;
         }
         catch (PluginNotFoundException $ex) {
           try {
-            $plugin_id = $this->cckPluginManager->getPluginIdFromFieldType($field_type, [], $this);
-            $manager = $this->cckPluginManager;
+            $plugin_id = $this->fieldPluginManager->getPluginIdFromFieldType($field_type, [], $this);
+            $Manager = $this->fieldPluginManager;
           }
           catch (PluginNotFoundException $ex) {
             continue;
           }
         }
 
-        if (!isset($this->processedFieldTypes[$field_type]) && $manager->hasDefinition($plugin_id)) {
+        if (!isset($this->processedFieldTypes[$field_type]) && $Manager->hasDefinition($plugin_id)) {
           $this->processedFieldTypes[$field_type] = TRUE;
           // Allow the field plugin to alter the migration as necessary so that
           // it knows how to handle fields of this type.
           if (!isset($this->fieldPluginCache[$field_type])) {
-            $this->fieldPluginCache[$field_type] = $manager->createInstance($plugin_id, [], $this);
+            $this->fieldPluginCache[$field_type] = $Manager->createInstance($plugin_id, [], $this);
           }
         }
         $method = $this->pluginDefinition[static::PLUGIN_METHOD];
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
index da1c7e9f80..79a65a7b73 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/cckfield/CckFieldPluginBase.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\cckfield;
 
-@trigger_error('CckFieldPluginBase is deprecated in Drupal 8.3.x and will be be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase instead.', E_USER_DEPRECATED);
+@trigger_error('CckFieldPluginBase is deprecated in Drupal 8.3.x and will be
+be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase
+instead.', E_USER_DEPRECATED);
 
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
@@ -10,11 +12,9 @@
 /**
  * The base class for all field plugins.
  *
- * @deprecated in Drupal 8.4.x, to be removed before Drupal 9.0.x. Use
+ * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
  * \Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase instead.
  *
- * @see https://www.drupal.org/node/2751897
- *
  * @ingroup migration
  */
 abstract class CckFieldPluginBase extends FieldPluginBase {
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
index c5e631a0e6..43df17057d 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
@@ -49,10 +49,10 @@ class EntityFieldStorageConfig extends BaseEntityFieldStorageConfig {
    *   The list of bundles this entity type has.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The configuration factory.
    * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_plugin_manager
    *   The field type plugin manager.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The configuration factory.
    */
   public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, LanguageManagerInterface $language_manager, ConfigFactoryInterface $config_factory, FieldTypePluginManagerInterface $field_type_plugin_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $language_manager, $config_factory, $field_type_plugin_manager);
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/FieldPluginBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/FieldPluginBase.php
index dc115abc99..852c6ca6ff 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/field/FieldPluginBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/FieldPluginBase.php
@@ -45,27 +45,6 @@ public function processFieldWidget(MigrationInterface $migration) {
     $migration->mergeProcessOfProperty('options/type', $process);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterType(Row $row) {
-    return $row->getSourceProperty('formatter/type');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterMap() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldWidgetType(Row $row) {
-    return $row->getSourceProperty('widget/type');
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -81,28 +60,12 @@ public function getFieldWidgetMap() {
    */
   public function processFieldFormatter(MigrationInterface $migration) {
     $process = [];
-
-    // Some migrate field plugin IDs are prefixed with 'd6_' or 'd7_'. Since the
-    // plugin ID is used in the static map as the module name, we have to remove
-    // this prefix from the plugin ID.
-    $plugin_id = preg_replace('/d[67]_/', '', $this->pluginId);
     foreach ($this->getFieldFormatterMap() as $source_format => $destination_format) {
-      $process[0]['map'][$plugin_id][$source_format] = $destination_format;
+      $process[0]['map'][$this->pluginId][$source_format] = $destination_format;
     }
     $migration->mergeProcessOfProperty('options/type', $process);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'get',
-      'source' => $field_name,
-    ];
-    $migration->mergeProcessOfProperty($field_name, $process);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php
index 1579afadc5..2f6f0992b3 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/NodeReference.php
@@ -15,6 +15,13 @@
  */
 class NodeReference extends FieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php b/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php
index 11df8ec243..4f1a6036ee 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/field/UserReference.php
@@ -15,6 +15,13 @@
  */
 class UserReference extends FieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
index 445441befd..ffff6269cd 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
@@ -94,14 +94,14 @@ public static function create(ContainerInterface $container, array $configuratio
    */
   public function checkRequirements() {
     if ($this->pluginDefinition['requirements_met'] === TRUE) {
-      if (isset($this->pluginDefinition['source_module'])) {
-        if ($this->moduleExists($this->pluginDefinition['source_module'])) {
-          if (isset($this->pluginDefinition['minimum_schema_version']) && !$this->getModuleSchemaVersion($this->pluginDefinition['source_module']) < $this->pluginDefinition['minimum_schema_version']) {
+      if (isset($this->pluginDefinition['source_provider'])) {
+        if ($this->moduleExists($this->pluginDefinition['source_provider'])) {
+          if (isset($this->pluginDefinition['minimum_schema_version']) && !$this->getModuleSchemaVersion($this->pluginDefinition['source_provider']) < $this->pluginDefinition['minimum_schema_version']) {
             throw new RequirementsException('Required minimum schema version ' . $this->pluginDefinition['minimum_schema_version'], ['minimum_schema_version' => $this->pluginDefinition['minimum_schema_version']]);
           }
         }
         else {
-          throw new RequirementsException('The module ' . $this->pluginDefinition['source_module'] . ' is not enabled in the source site.', ['source_module' => $this->pluginDefinition['source_module']]);
+          throw new RequirementsException('The module ' . $this->pluginDefinition['source_provider'] . ' is not enabled in the source site.', ['source_provider' => $this->pluginDefinition['source_provider']]);
         }
       }
     }
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/VariableTranslation.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/VariableTranslation.php
deleted file mode 100644
index 566a8402e0..0000000000
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/VariableTranslation.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
-
-use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\State\StateInterface;
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
-
-/**
- * Drupal i18n_variable source from database.
- *
- * @MigrateSource(
- *   id = "variable_translation"
- * )
- */
-class VariableTranslation extends DrupalSqlBase {
-
-  /**
-   * The variable names to fetch.
-   *
-   * @var array
-   */
-  protected $variables;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
-    $this->variables = $this->configuration['variables'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function initializeIterator() {
-    return new \ArrayIterator($this->values());
-  }
-
-  /**
-   * Return the values of the variables specified in the plugin configuration.
-   *
-   * @return array
-   *   An associative array where the keys are the variables specified in the
-   *   plugin configuration and the values are the values found in the source.
-   *   A key/value pair is added for the language code. Only those values are
-   *   returned that are actually in the database.
-   */
-  protected function values() {
-    $values = [];
-    $result = $this->prepareQuery()->execute()->FetchAllAssoc('language');
-    foreach ($result as $i18n_variable) {
-      $values[]['language'] = $i18n_variable->language;
-    }
-    $result = $this->prepareQuery()->execute()->FetchAll();
-    foreach ($result as $i18n_variable) {
-      foreach ($values as $key => $value) {
-        if ($values[$key]['language'] === $i18n_variable->language) {
-          $values[$key][$i18n_variable->name] = unserialize($i18n_variable->value);
-          break;
-        }
-      }
-    }
-    return $values;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function count() {
-    return $this->initializeIterator()->count();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fields() {
-    return array_combine($this->variables, $this->variables);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function query() {
-    return $this->getDatabase()
-      ->select('i18n_variable', 'v')
-      ->fields('v')
-      ->condition('name', (array) $this->configuration['variables'], 'IN');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getIds() {
-    $ids['language']['type'] = 'string';
-    return $ids;
-  }
-
-}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php
index dd8d0f0741..93832aa75b 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/i18nVariable.php
@@ -2,7 +2,10 @@
 
 namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
 
-@trigger_error('The ' . __NAMESPACE__ . '\i18nVariable is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use ' . __NAMESPACE__ . '\VariableTranslation', E_USER_DEPRECATED);
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\State\StateInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 
 /**
  * Drupal i18n_variable source from database.
@@ -10,10 +13,88 @@
  * @MigrateSource(
  *   id = "i18n_variable"
  * )
- *
- * @deprecated in Drupal 8.4.x and will be removed in Drupal 9.0.x. Use
- * \Drupal\migrate_drupal\Plugin\migrate\source\d6\VariableTranslation instead.
- *
- * @see https://www.drupal.org/node/2898649
  */
-class i18nVariable extends VariableTranslation {}
+class i18nVariable extends DrupalSqlBase {
+
+  /**
+   * The variable names to fetch.
+   *
+   * @var array
+   */
+  protected $variables;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
+    $this->variables = $this->configuration['variables'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializeIterator() {
+    return new \ArrayIterator($this->values());
+  }
+
+  /**
+   * Return the values of the variables specified in the plugin configuration.
+   *
+   * @return array
+   *   An associative array where the keys are the variables specified in the
+   *   plugin configuration and the values are the values found in the source.
+   *   A key/value pair is added for the language code. Only those values are
+   *   returned that are actually in the database.
+   */
+  protected function values() {
+    $values = [];
+    $result = $this->prepareQuery()->execute()->FetchAllAssoc('language');
+    foreach ($result as $i18n_variable) {
+      $values[]['language'] = $i18n_variable->language;
+    }
+    $result = $this->prepareQuery()->execute()->FetchAll();
+    foreach ($result as $i18n_variable) {
+      foreach ($values as $key => $value) {
+        if ($values[$key]['language'] === $i18n_variable->language) {
+          $values[$key][$i18n_variable->name] = unserialize($i18n_variable->value);
+          break;
+        }
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function count() {
+    return $this->initializeIterator()->count();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array_combine($this->variables, $this->variables);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->getDatabase()
+      ->select('i18n_variable', 'v')
+      ->fields('v')
+      ->condition('name', (array) $this->configuration['variables'], 'IN');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['language']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index 4ca588b9c7..a7beb5b439 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -1942,54 +1942,6 @@
   'mail' => 'comment3@example.com',
   'homepage' => 'https://www.drupal.org',
 ))
-->values(array(
-  'cid' => '4',
-  'pid' => '0',
-  'nid' => '19',
-  'uid' => '1',
-  'subject' => 'Subject 1',
-  'comment' => 'Comment 1',
-  'hostname' => '127.0.0.1',
-  'timestamp' => '1501955780',
-  'status' => '0',
-  'format' => '1',
-  'thread' => '01/',
-  'name' => 'root',
-  'mail' => '',
-  'homepage' => '',
-))
-->values(array(
-  'cid' => '5',
-  'pid' => '4',
-  'nid' => '19',
-  'uid' => '1',
-  'subject' => 'Subject 2',
-  'comment' => 'Comment 2',
-  'hostname' => '127.0.0.1',
-  'timestamp' => '1501955792',
-  'status' => '0',
-  'format' => '1',
-  'thread' => '01.00/',
-  'name' => 'root',
-  'mail' => '',
-  'homepage' => '',
-))
-->values(array(
-  'cid' => '6',
-  'pid' => '5',
-  'nid' => '19',
-  'uid' => '1',
-  'subject' => 'Subject 3',
-  'comment' => 'Comment 3',
-  'hostname' => '127.0.0.1',
-  'timestamp' => '1501955803',
-  'status' => '0',
-  'format' => '1',
-  'thread' => '01.00.00/',
-  'name' => 'root',
-  'mail' => '',
-  'homepage' => '',
-))
 ->execute();
 
 $connection->schema()->createTable('config', array(
@@ -8393,19 +8345,6 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('forum')
-->fields(array(
-  'nid',
-  'vid',
-  'tid',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '22',
-  'tid' => '8',
-))
-->execute();
-
 $connection->schema()->createTable('history', array(
   'fields' => array(
     'uid' => array(
@@ -8485,11 +8424,6 @@
   'nid' => '18',
   'timestamp' => '1493066711',
 ))
-->values(array(
-  'uid' => '1',
-  'nid' => '19',
-  'timestamp' => '1501955803',
-))
 ->execute();
 
 $connection->schema()->createTable('i18n_blocks', array(
@@ -9632,14 +9566,6 @@
   'objectindex' => '6',
   'format' => '0',
 ))
-->values(array(
-  'lid' => '1673',
-  'objectid' => '7',
-  'type' => 'vocabulary',
-  'property' => 'name',
-  'objectindex' => '7',
-  'format' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('i18n_variable', array(
@@ -22099,13 +22025,6 @@
   'source' => 'Type',
   'version' => '1',
 ))
-->values(array(
-  'lid' => '1673',
-  'location' => 'vocabulary:7:name',
-  'textgroup' => 'taxonomy',
-  'source' => 'Forums',
-  'version' => '1',
-))
 ->execute();
 
 $connection->schema()->createTable('locales_target', array(
@@ -43266,23 +43185,6 @@
   'tnid' => '0',
   'translate' => '0',
 ))
-->values(array(
-  'nid' => '19',
-  'vid' => '22',
-  'type' => 'forum',
-  'language' => '',
-  'title' => 'New Forum Topic',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1501955771',
-  'changed' => '1501955771',
-  'comment' => '2',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('node_access', array(
@@ -43482,13 +43384,6 @@
   'last_comment_uid' => '1',
   'comment_count' => '0',
 ))
-->values(array(
-  'nid' => '19',
-  'last_comment_timestamp' => '1501955803',
-  'last_comment_name' => '',
-  'last_comment_uid' => '1',
-  'comment_count' => '3',
-))
 ->execute();
 
 $connection->schema()->createTable('node_counter', array(
@@ -43564,12 +43459,6 @@
   'daycount' => '1',
   'timestamp' => '1493066711',
 ))
-->values(array(
-  'nid' => '19',
-  'totalcount' => '4',
-  'daycount' => '4',
-  'timestamp' => '1501955803',
-))
 ->execute();
 
 $connection->schema()->createTable('node_revisions', array(
@@ -43876,17 +43765,6 @@
   'timestamp' => '1494966544',
   'format' => '1',
 ))
-->values(array(
-  'nid' => '19',
-  'vid' => '22',
-  'uid' => '1',
-  'title' => 'New Forum Topic',
-  'body' => 'New Forum Body',
-  'teaser' => 'New Forum Body',
-  'log' => '',
-  'timestamp' => '1501955771',
-  'format' => '1',
-))
 ->execute();
 
 $connection->schema()->createTable('node_type', array(
@@ -46163,15 +46041,6 @@
   'language' => 'fr',
   'trid' => '0',
 ))
-->values(array(
-  'tid' => '8',
-  'vid' => '7',
-  'name' => 'General discussion',
-  'description' => '',
-  'weight' => '0',
-  'language' => '',
-  'trid' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('term_hierarchy', array(
@@ -46219,10 +46088,6 @@
   'tid' => '7',
   'parent' => '0',
 ))
-->values(array(
-  'tid' => '8',
-  'parent' => '0',
-))
 ->values(array(
   'tid' => '3',
   'parent' => '2',
@@ -46308,11 +46173,6 @@
   'vid' => '2',
   'tid' => '5',
 ))
-->values(array(
-  'nid' => '19',
-  'vid' => '22',
-  'tid' => '8',
-))
 ->execute();
 
 $connection->schema()->createTable('term_relation', array(
@@ -47791,7 +47651,7 @@
 ))
 ->values(array(
   'name' => 'forum_nav_vocabulary',
-  'value' => 's:1:"7";',
+  'value' => 's:1:"1";',
 ))
 ->values(array(
   'name' => 'forum_order',
@@ -48395,20 +48255,6 @@
   'weight' => '0',
   'language' => '',
 ))
-->values(array(
-  'vid' => '7',
-  'name' => 'Forums',
-  'description' => '',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '0',
-  'language' => '',
-))
 ->execute();
 
 $connection->schema()->createTable('vocabulary_node_types', array(
@@ -48444,7 +48290,7 @@
   'type' => 'article',
 ))
 ->values(array(
-  'vid' => '7',
+  'vid' => '1',
   'type' => 'forum',
 ))
 ->values(array(
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index e1481c2df7..5c9fea9f92 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -3441,141 +3441,6 @@
   'translatable' => '0',
   'deleted' => '0',
 ))
-->values(array(
-  'id' => '26',
-  'field_name' => 'field_text_plain',
-  'type' => 'text',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:1:{s:10:"max_length";s:3:"255";}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:27:"field_data_field_text_plain";a:2:{s:5:"value";s:22:"field_text_plain_value";s:6:"format";s:23:"field_text_plain_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:31:"field_revision_field_text_plain";a:2:{s:5:"value";s:22:"field_text_plain_value";s:6:"format";s:23:"field_text_plain_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"26";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '27',
-  'field_name' => 'field_text_filtered',
-  'type' => 'text',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:1:{s:10:"max_length";s:3:"255";}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:30:"field_data_field_text_filtered";a:2:{s:5:"value";s:25:"field_text_filtered_value";s:6:"format";s:26:"field_text_filtered_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:34:"field_revision_field_text_filtered";a:2:{s:5:"value";s:25:"field_text_filtered_value";s:6:"format";s:26:"field_text_filtered_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"27";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '28',
-  'field_name' => 'field_text_plain_filtered',
-  'type' => 'text',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:1:{s:10:"max_length";s:3:"255";}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:36:"field_data_field_text_plain_filtered";a:2:{s:5:"value";s:31:"field_text_plain_filtered_value";s:6:"format";s:32:"field_text_plain_filtered_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:40:"field_revision_field_text_plain_filtered";a:2:{s:5:"value";s:31:"field_text_plain_filtered_value";s:6:"format";s:32:"field_text_plain_filtered_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"28";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '29',
-  'field_name' => 'field_text_long_plain',
-  'type' => 'text_long',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:32:"field_data_field_text_long_plain";a:2:{s:5:"value";s:27:"field_text_long_plain_value";s:6:"format";s:28:"field_text_long_plain_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:36:"field_revision_field_text_long_plain";a:2:{s:5:"value";s:27:"field_text_long_plain_value";s:6:"format";s:28:"field_text_long_plain_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"29";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '30',
-  'field_name' => 'field_text_long_filtered',
-  'type' => 'text_long',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:35:"field_data_field_text_long_filtered";a:2:{s:5:"value";s:30:"field_text_long_filtered_value";s:6:"format";s:31:"field_text_long_filtered_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:39:"field_revision_field_text_long_filtered";a:2:{s:5:"value";s:30:"field_text_long_filtered_value";s:6:"format";s:31:"field_text_long_filtered_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"30";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '31',
-  'field_name' => 'field_text_long_plain_filtered',
-  'type' => 'text_long',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:41:"field_data_field_text_long_plain_filtered";a:2:{s:5:"value";s:36:"field_text_long_plain_filtered_value";s:6:"format";s:37:"field_text_long_plain_filtered_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:45:"field_revision_field_text_long_plain_filtered";a:2:{s:5:"value";s:36:"field_text_long_plain_filtered_value";s:6:"format";s:37:"field_text_long_plain_filtered_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"31";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '32',
-  'field_name' => 'field_text_sum_plain',
-  'type' => 'text_with_summary',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:31:"field_data_field_text_sum_plain";a:3:{s:5:"value";s:26:"field_text_sum_plain_value";s:7:"summary";s:28:"field_text_sum_plain_summary";s:6:"format";s:27:"field_text_sum_plain_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:35:"field_revision_field_text_sum_plain";a:3:{s:5:"value";s:26:"field_text_sum_plain_value";s:7:"summary";s:28:"field_text_sum_plain_summary";s:6:"format";s:27:"field_text_sum_plain_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"32";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '33',
-  'field_name' => 'field_text_sum_filtered',
-  'type' => 'text_with_summary',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:34:"field_data_field_text_sum_filtered";a:3:{s:5:"value";s:29:"field_text_sum_filtered_value";s:7:"summary";s:31:"field_text_sum_filtered_summary";s:6:"format";s:30:"field_text_sum_filtered_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:38:"field_revision_field_text_sum_filtered";a:3:{s:5:"value";s:29:"field_text_sum_filtered_value";s:7:"summary";s:31:"field_text_sum_filtered_summary";s:6:"format";s:30:"field_text_sum_filtered_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"33";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '34',
-  'field_name' => 'field_text_sum_plain_filtered',
-  'type' => 'text_with_summary',
-  'module' => 'text',
-  'active' => '1',
-  'storage_type' => 'field_sql_storage',
-  'storage_module' => 'field_sql_storage',
-  'storage_active' => '1',
-  'locked' => '0',
-  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:0:{}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:39:"field_data_field_text_sum_plain_filtere";a:3:{s:5:"value";s:34:"field_text_sum_plain_filtere_value";s:7:"summary";s:36:"field_text_sum_plain_filtere_summary";s:6:"format";s:35:"field_text_sum_plain_filtere_format";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:43:"field_revision_field_text_sum_plain_filtere";a:3:{s:5:"value";s:34:"field_text_sum_plain_filtere_value";s:7:"summary";s:36:"field_text_sum_plain_filtere_summary";s:6:"format";s:35:"field_text_sum_plain_filtere_format";}}}}}s:12:"foreign keys";a:1:{s:6:"format";a:2:{s:5:"table";s:13:"filter_format";s:7:"columns";a:1:{s:6:"format";s:6:"format";}}}s:7:"indexes";a:1:{s:6:"format";a:1:{i:0;s:6:"format";}}s:2:"id";s:2:"34";}',
-  'cardinality' => '1',
-  'translatable' => '0',
-  'deleted' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('field_config_instance', array(
@@ -3996,168 +3861,6 @@
   'data' => 'a:6:{s:5:"label";s:12:"Private file";s:6:"widget";a:5:{s:6:"weight";s:2:"19";s:4:"type";s:12:"file_generic";s:6:"module";s:4:"file";s:6:"active";i:1;s:8:"settings";a:1:{s:18:"progress_indicator";s:8:"throbber";}}s:8:"settings";a:5:{s:14:"file_directory";s:0:"";s:15:"file_extensions";s:3:"txt";s:12:"max_filesize";s:0:"";s:17:"description_field";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"file_default";s:8:"settings";a:0:{}s:6:"module";s:4:"file";s:6:"weight";i:18;}}s:8:"required";i:0;s:11:"description";s:0:"";}',
   'deleted' => '0',
 ))
-->values(array(
-  'id' => '43',
-  'field_id' => '26',
-  'field_name' => 'field_text_plain',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:10:"Text plain";s:6:"widget";a:5:{s:6:"weight";s:2:"11";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:11;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '44',
-  'field_id' => '27',
-  'field_name' => 'field_text_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:13:"Text filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"12";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:12;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '45',
-  'field_id' => '28',
-  'field_name' => 'field_text_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:23:"Text plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"13";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:13;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '46',
-  'field_id' => '29',
-  'field_name' => 'field_text_long_plain',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:15:"Text long plain";s:6:"widget";a:5:{s:6:"weight";s:2:"14";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:14;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '47',
-  'field_id' => '30',
-  'field_name' => 'field_text_long_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:18:"Text long filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"15";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:15;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '48',
-  'field_id' => '31',
-  'field_name' => 'field_text_long_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:28:"Text long plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"16";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:16;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '49',
-  'field_id' => '32',
-  'field_name' => 'field_text_sum_plain',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:18:"Text summary plain";s:6:"widget";a:5:{s:6:"weight";s:2:"17";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"0";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:17;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '50',
-  'field_id' => '33',
-  'field_name' => 'field_text_sum_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:21:"Text summary filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"18";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"1";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:18;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '51',
-  'field_id' => '34',
-  'field_name' => 'field_text_sum_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'data' => 'a:7:{s:5:"label";s:31:"Text summary plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"19";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"0";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:19;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '52',
-  'field_id' => '26',
-  'field_name' => 'field_text_plain',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:10:"Text plain";s:6:"widget";a:5:{s:6:"weight";s:2:"-2";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:1;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '53',
-  'field_id' => '27',
-  'field_name' => 'field_text_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:13:"Text filtered";s:6:"widget";a:5:{s:6:"weight";s:1:"0";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:2;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '54',
-  'field_id' => '28',
-  'field_name' => 'field_text_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:23:"Text plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:1:"2";s:4:"type";s:14:"text_textfield";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"size";s:2:"60";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:3;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '55',
-  'field_id' => '29',
-  'field_name' => 'field_text_long_plain',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:15:"Text long plain";s:6:"widget";a:5:{s:6:"weight";s:1:"4";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"0";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:4;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '56',
-  'field_id' => '30',
-  'field_name' => 'field_text_long_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:18:"Text long filtered";s:6:"widget";a:5:{s:6:"weight";s:1:"6";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:5;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '57',
-  'field_id' => '31',
-  'field_name' => 'field_text_long_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:28:"Text long plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:1:"8";s:4:"type";s:13:"text_textarea";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:1:{s:4:"rows";s:1:"5";}}s:8:"settings";a:2:{s:15:"text_processing";s:1:"1";s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:6;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '58',
-  'field_id' => '32',
-  'field_name' => 'field_text_sum_plain',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:18:"Text summary plain";s:6:"widget";a:5:{s:6:"weight";s:2:"10";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"0";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:7;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '59',
-  'field_id' => '33',
-  'field_name' => 'field_text_sum_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:21:"Text summary filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"12";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"1";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:8;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
-->values(array(
-  'id' => '60',
-  'field_id' => '34',
-  'field_name' => 'field_text_sum_plain_filtered',
-  'entity_type' => 'node',
-  'bundle' => 'page',
-  'data' => 'a:7:{s:5:"label";s:31:"Text summary plain and filtered";s:6:"widget";a:5:{s:6:"weight";s:2:"14";s:4:"type";s:26:"text_textarea_with_summary";s:6:"module";s:4:"text";s:6:"active";i:1;s:8:"settings";a:2:{s:4:"rows";s:2:"20";s:12:"summary_rows";i:5;}}s:8:"settings";a:3:{s:15:"text_processing";s:1:"1";s:15:"display_summary";i:0;s:18:"user_register_form";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:12:"text_default";s:8:"settings";a:0:{}s:6:"module";s:4:"text";s:6:"weight";i:9;}}s:8:"required";i:0;s:11:"description";s:0:"";s:13:"default_value";N;}',
-  'deleted' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('field_data_body', array(
@@ -6226,7 +5929,7 @@
 ))
 ->execute();
 
-$connection->schema()->createTable('field_data_field_text_filtered', array(
+$connection->schema()->createTable('field_data_field_text_list', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -6243,7 +5946,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -6270,12 +5973,7 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_filtered_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_filtered_format' => array(
+    'field_text_list_value' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -6283,38 +5981,38 @@
   ),
   'primary key' => array(
     'entity_type',
-    'entity_id',
     'deleted',
-    'delta',
+    'entity_id',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_filtered_format' => array(
-      'field_text_filtered_format',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_data_field_text_list', array(
+$connection->insert('field_data_field_text_list')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_text_list_value',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_list_value' => 'Some more text',
+))
+->execute();
+
+$connection->schema()->createTable('field_data_field_user_entityreference', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -6331,7 +6029,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'normal',
+      'size' => 'tiny',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -6358,1336 +6056,47 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_list_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_data_field_text_list')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_text_list_value',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_text_list_value' => 'Some more text',
-))
-->execute();
-
-$connection->schema()->createTable('field_data_field_text_long_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_long_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_long_filtered_format' => array(
-      'field_text_long_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_long_plain', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_long_plain_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_plain_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_long_plain_format' => array(
-      'field_text_long_plain_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_long_plain_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_long_plain_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_plain_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_long_plain_filtered_format' => array(
-      'field_text_long_plain_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_plain', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_plain_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_plain_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_plain_format' => array(
-      'field_text_plain_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_plain_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_plain_filtered_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_plain_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_plain_filtered_format' => array(
-      'field_text_plain_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_sum_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_sum_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_filtered_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_filtered_format' => array(
-      'field_text_sum_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_sum_plain', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_sum_plain_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_plain_format' => array(
-      'field_text_sum_plain_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_text_sum_plain_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_sum_plain_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_filtered_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_plain_filtered_format' => array(
-      'field_text_sum_plain_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_data_field_user_entityreference', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_user_entityreference_target_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_user_entityreference_target_id' => array(
-      'field_user_entityreference_target_id',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_data_field_user_entityreference')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_user_entityreference_target_id',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_user_entityreference_target_id' => '2',
-))
-->execute();
-
-$connection->schema()->createTable('field_data_taxonomy_forums', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'taxonomy_forums_tid' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_data_taxonomy_forums')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'taxonomy_forums_tid',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'forum',
-  'deleted' => '0',
-  'entity_id' => '6',
-  'revision_id' => '6',
-  'language' => 'und',
-  'delta' => '0',
-  'taxonomy_forums_tid' => '1',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'forum',
-  'deleted' => '0',
-  'entity_id' => '7',
-  'revision_id' => '7',
-  'language' => 'und',
-  'delta' => '0',
-  'taxonomy_forums_tid' => '1',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_body', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'body_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
-    'body_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
-    'body_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'revision_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_revision_body')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'body_value',
-  'body_summary',
-  'body_format',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
-  'language' => 'und',
-  'delta' => '0',
-  'body_value' => "...is that it's the absolute best show ever. Trust me, I would know.",
-  'body_summary' => '',
-  'body_format' => 'filtered_html',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '3',
-  'revision_id' => '3',
-  'language' => 'und',
-  'delta' => '0',
-  'body_value' => "is - ...is that it's the absolute best show ever. Trust me, I would know.",
-  'body_summary' => '',
-  'body_format' => 'filtered_html',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '4',
-  'revision_id' => '4',
-  'language' => 'und',
-  'delta' => '0',
-  'body_value' => 'is - Is that is it awesome.',
-  'body_summary' => '',
-  'body_format' => 'filtered_html',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '5',
-  'revision_id' => '5',
-  'language' => 'und',
-  'delta' => '0',
-  'body_value' => 'en - Is that is it awesome.',
-  'body_summary' => '',
-  'body_format' => 'filtered_html',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_comment_body', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'comment_body_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
-    'comment_body_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'revision_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_revision_comment_body')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'comment_body_value',
-  'comment_body_format',
-))
-->values(array(
-  'entity_type' => 'comment',
-  'bundle' => 'comment_node_test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'comment_body_value' => 'This is a comment',
-  'comment_body_format' => 'filtered_html',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_boolean', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
+    'field_user_entityreference_target_id' => array(
       'type' => 'int',
       'not null' => TRUE,
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_boolean_value' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
   ),
   'primary key' => array(
     'entity_type',
-    'deleted',
     'entity_id',
-    'revision_id',
-    'language',
+    'deleted',
     'delta',
+    'language',
   ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_revision_field_boolean')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_boolean_value',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_boolean_value' => '1',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_date', array(
-  'fields' => array(
+  'indexes' => array(
     'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
+      'entity_type',
     ),
     'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
+      'bundle',
     ),
     'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
+      'deleted',
     ),
     'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
+      'entity_id',
     ),
     'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
+      'revision_id',
     ),
     'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
+      'language',
     ),
-    'field_date_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '100',
+    'field_user_entityreference_target_id' => array(
+      'field_user_entityreference_target_id',
     ),
   ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'revision_id',
-    'language',
-    'delta',
-  ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_date')
+$connection->insert('field_data_field_user_entityreference')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -7696,7 +6105,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_date_value',
+  'field_user_entityreference_target_id',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -7706,11 +6115,11 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_date_value' => '2015-01-20 04:15:00',
+  'field_user_entityreference_target_id' => '2',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_date_with_end_time', array(
+$connection->schema()->createTable('field_data_taxonomy_forums', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -7738,7 +6147,7 @@
     ),
     'revision_id' => array(
       'type' => 'int',
-      'not null' => TRUE,
+      'not null' => FALSE,
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
@@ -7754,54 +6163,24 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_date_with_end_time_value' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
-    'field_date_with_end_time_value2' => array(
+    'taxonomy_forums_tid' => array(
       'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
     'entity_type',
     'deleted',
     'entity_id',
-    'revision_id',
     'language',
     'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_date_with_end_time')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_date_with_end_time_value',
-  'field_date_with_end_time_value2',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_date_with_end_time_value' => '1421727300',
-  'field_date_with_end_time_value2' => '1421727300',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_email', array(
+$connection->schema()->createTable('field_revision_body', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -7845,7 +6224,17 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_email_email' => array(
+    'body_value' => array(
+      'type' => 'text',
+      'not null' => FALSE,
+      'size' => 'normal',
+    ),
+    'body_summary' => array(
+      'type' => 'text',
+      'not null' => FALSE,
+      'size' => 'normal',
+    ),
+    'body_format' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -7862,7 +6251,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_email')
+$connection->insert('field_revision_body')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -7871,144 +6260,61 @@
   'revision_id',
   'language',
   'delta',
-  'field_email_email',
+  'body_value',
+  'body_summary',
+  'body_format',
 ))
 ->values(array(
   'entity_type' => 'node',
-  'bundle' => 'test_content_type',
+  'bundle' => 'article',
   'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
+  'entity_id' => '2',
+  'revision_id' => '2',
   'language' => 'und',
   'delta' => '0',
-  'field_email_email' => 'default@example.com',
+  'body_value' => "...is that it's the absolute best show ever. Trust me, I would know.",
+  'body_summary' => '',
+  'body_format' => 'filtered_html',
 ))
 ->values(array(
   'entity_type' => 'node',
-  'bundle' => 'test_content_type',
+  'bundle' => 'article',
   'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
+  'entity_id' => '3',
+  'revision_id' => '3',
   'language' => 'und',
-  'delta' => '1',
-  'field_email_email' => 'another@example.com',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_file', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_file_fid' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_file_display' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '1',
-      'unsigned' => TRUE,
-    ),
-    'field_file_description' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'revision_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->insert('field_revision_field_file')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_file_fid',
-  'field_file_display',
-  'field_file_description',
+  'delta' => '0',
+  'body_value' => "is - ...is that it's the absolute best show ever. Trust me, I would know.",
+  'body_summary' => '',
+  'body_format' => 'filtered_html',
 ))
 ->values(array(
   'entity_type' => 'node',
-  'bundle' => 'test_content_type',
+  'bundle' => 'article',
   'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
+  'entity_id' => '4',
+  'revision_id' => '4',
   'language' => 'und',
   'delta' => '0',
-  'field_file_fid' => '2',
-  'field_file_display' => '1',
-  'field_file_description' => 'file desc',
+  'body_value' => 'is - Is that is it awesome.',
+  'body_summary' => '',
+  'body_format' => 'filtered_html',
 ))
 ->values(array(
-  'entity_type' => 'user',
-  'bundle' => 'user',
+  'entity_type' => 'node',
+  'bundle' => 'article',
   'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
+  'entity_id' => '5',
+  'revision_id' => '5',
   'language' => 'und',
   'delta' => '0',
-  'field_file_fid' => '2',
-  'field_file_display' => '1',
-  'field_file_description' => 'file desc',
+  'body_value' => 'en - Is that is it awesome.',
+  'body_summary' => '',
+  'body_format' => 'filtered_html',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_float', array(
+$connection->schema()->createTable('field_revision_comment_body', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8052,11 +6358,15 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_float_value' => array(
-      'type' => 'numeric',
+    'comment_body_value' => array(
+      'type' => 'text',
       'not null' => FALSE,
-      'precision' => '10',
-      'scale' => '0',
+      'size' => 'normal',
+    ),
+    'comment_body_format' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '255',
     ),
   ),
   'primary key' => array(
@@ -8070,7 +6380,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_float')
+$connection->insert('field_revision_comment_body')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8079,105 +6389,23 @@
   'revision_id',
   'language',
   'delta',
-  'field_float_value',
+  'comment_body_value',
+  'comment_body_format',
 ))
 ->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
+  'entity_type' => 'comment',
+  'bundle' => 'comment_node_test_content_type',
   'deleted' => '0',
   'entity_id' => '1',
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_float_value' => '1',
+  'comment_body_value' => 'This is a comment',
+  'comment_body_format' => 'filtered_html',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_image', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_image_fid' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_image_alt' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '512',
-    ),
-    'field_image_title' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '1024',
-    ),
-    'field_image_width' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_image_height' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'deleted',
-    'entity_id',
-    'revision_id',
-    'language',
-    'delta',
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_revision_field_images', array(
+$connection->schema()->createTable('field_revision_field_boolean', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8221,33 +6449,10 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_images_fid' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_images_alt' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '512',
-    ),
-    'field_images_title' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '1024',
-    ),
-    'field_images_width' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_images_height' => array(
+    'field_boolean_value' => array(
       'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
-      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -8261,7 +6466,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_images')
+$connection->insert('field_revision_field_boolean')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8269,12 +6474,8 @@
   'entity_id',
   'revision_id',
   'language',
-  'delta',
-  'field_images_fid',
-  'field_images_alt',
-  'field_images_title',
-  'field_images_width',
-  'field_images_height',
+  'delta',
+  'field_boolean_value',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -8284,15 +6485,11 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_images_fid' => '1',
-  'field_images_alt' => 'alt text',
-  'field_images_title' => 'title text',
-  'field_images_width' => '93',
-  'field_images_height' => '93',
+  'field_boolean_value' => '1',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_integer', array(
+$connection->schema()->createTable('field_revision_field_date', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8336,10 +6533,10 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_integer_value' => array(
-      'type' => 'int',
+    'field_date_value' => array(
+      'type' => 'varchar',
       'not null' => FALSE,
-      'size' => 'normal',
+      'length' => '100',
     ),
   ),
   'primary key' => array(
@@ -8353,7 +6550,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_integer')
+$connection->insert('field_revision_field_date')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8362,7 +6559,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_integer_value',
+  'field_date_value',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -8372,31 +6569,11 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_integer_value' => '5',
-))
-->values(array(
-  'entity_type' => 'user',
-  'bundle' => 'user',
-  'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
-  'language' => 'und',
-  'delta' => '0',
-  'field_integer_value' => '99',
-))
-->values(array(
-  'entity_type' => 'taxonomy_term',
-  'bundle' => 'test_vocabulary',
-  'deleted' => '0',
-  'entity_id' => '4',
-  'revision_id' => '4',
-  'language' => 'und',
-  'delta' => '0',
-  'field_integer_value' => '6',
+  'field_date_value' => '2015-01-20 04:15:00',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_integer_list', array(
+$connection->schema()->createTable('field_revision_field_date_with_end_time', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8440,7 +6617,12 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_integer_list_value' => array(
+    'field_date_with_end_time_value' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+    ),
+    'field_date_with_end_time_value2' => array(
       'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
@@ -8457,7 +6639,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_integer_list')
+$connection->insert('field_revision_field_date_with_end_time')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8466,7 +6648,8 @@
   'revision_id',
   'language',
   'delta',
-  'field_integer_list_value',
+  'field_date_with_end_time_value',
+  'field_date_with_end_time_value2',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -8476,11 +6659,12 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_integer_list_value' => '7',
+  'field_date_with_end_time_value' => '1421727300',
+  'field_date_with_end_time_value2' => '1421727300',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_link', array(
+$connection->schema()->createTable('field_revision_field_email', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8524,21 +6708,11 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_link_url' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '2048',
-    ),
-    'field_link_title' => array(
+    'field_email_email' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
     ),
-    'field_link_attributes' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'normal',
-    ),
   ),
   'primary key' => array(
     'entity_type',
@@ -8551,7 +6725,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_link')
+$connection->insert('field_revision_field_email')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8560,9 +6734,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_link_url',
-  'field_link_title',
-  'field_link_attributes',
+  'field_email_email',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -8572,37 +6744,21 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_link_url' => 'http://google.com',
-  'field_link_title' => 'Click Here',
-  'field_link_attributes' => 'a:1:{s:5:"title";s:10:"Click Here";}',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
-  'language' => 'und',
-  'delta' => '0',
-  'field_link_url' => '<front>',
-  'field_link_title' => 'Home',
-  'field_link_attributes' => 'a:0:{}',
+  'field_email_email' => 'default@example.com',
 ))
 ->values(array(
   'entity_type' => 'node',
-  'bundle' => 'article',
+  'bundle' => 'test_content_type',
   'deleted' => '0',
-  'entity_id' => '3',
-  'revision_id' => '3',
+  'entity_id' => '1',
+  'revision_id' => '1',
   'language' => 'und',
-  'delta' => '0',
-  'field_link_url' => '<front>',
-  'field_link_title' => 'Home',
-  'field_link_attributes' => 'a:1:{s:5:"title";s:0:"";}',
+  'delta' => '1',
+  'field_email_email' => 'another@example.com',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_long_text', array(
+$connection->schema()->createTable('field_revision_field_file', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8646,20 +6802,23 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_long_text_value' => array(
-      'type' => 'text',
+    'field_file_fid' => array(
+      'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
+      'unsigned' => TRUE,
     ),
-    'field_long_text_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
+    'field_file_display' => array(
+      'type' => 'int',
+      'not null' => TRUE,
       'size' => 'normal',
+      'default' => '1',
+      'unsigned' => TRUE,
     ),
-    'field_long_text_format' => array(
-      'type' => 'varchar',
+    'field_file_description' => array(
+      'type' => 'text',
       'not null' => FALSE,
-      'length' => '255',
+      'size' => 'normal',
     ),
   ),
   'primary key' => array(
@@ -8673,7 +6832,46 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_node_entityreference', array(
+$connection->insert('field_revision_field_file')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_file_fid',
+  'field_file_display',
+  'field_file_description',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_file_fid' => '2',
+  'field_file_display' => '1',
+  'field_file_description' => 'file desc',
+))
+->values(array(
+  'entity_type' => 'user',
+  'bundle' => 'user',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_file_fid' => '2',
+  'field_file_display' => '1',
+  'field_file_description' => 'file desc',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_float', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8690,7 +6888,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -8717,48 +6915,25 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_node_entityreference_target_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
+    'field_float_value' => array(
+      'type' => 'numeric',
+      'not null' => FALSE,
+      'precision' => '10',
+      'scale' => '0',
     ),
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_node_entityreference_target_id' => array(
-      'field_node_entityreference_target_id',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_node_entityreference')
+$connection->insert('field_revision_field_float')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8767,7 +6942,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_node_entityreference_target_id',
+  'field_float_value',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -8777,11 +6952,11 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_node_entityreference_target_id' => '2',
+  'field_float_value' => '1',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_phone', array(
+$connection->schema()->createTable('field_revision_field_image', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8825,10 +7000,33 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_phone_value' => array(
+    'field_image_fid' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_image_alt' => array(
       'type' => 'varchar',
       'not null' => FALSE,
-      'length' => '255',
+      'length' => '512',
+    ),
+    'field_image_title' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '1024',
+    ),
+    'field_image_width' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
+    ),
+    'field_image_height' => array(
+      'type' => 'int',
+      'not null' => FALSE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -8842,40 +7040,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_phone')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_phone_value',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_phone_value' => '99-99-99-99',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '6',
-  'language' => 'und',
-  'delta' => '0',
-  'field_phone_value' => '99-99-99-99',
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_private_file', array(
+$connection->schema()->createTable('field_revision_field_images', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -8892,7 +7057,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -8919,60 +7084,47 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_private_file_fid' => array(
+    'field_images_fid' => array(
       'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_private_file_display' => array(
+    'field_images_alt' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '512',
+    ),
+    'field_images_title' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '1024',
+    ),
+    'field_images_width' => array(
       'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '1',
+      'not null' => FALSE,
+      'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_private_file_description' => array(
-      'type' => 'text',
+    'field_images_height' => array(
+      'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_private_file_fid' => array(
-      'field_private_file_fid',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_private_file')
+$connection->insert('field_revision_field_images')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -8981,25 +7133,29 @@
   'revision_id',
   'language',
   'delta',
-  'field_private_file_fid',
-  'field_private_file_display',
-  'field_private_file_description',
+  'field_images_fid',
+  'field_images_alt',
+  'field_images_title',
+  'field_images_width',
+  'field_images_height',
 ))
 ->values(array(
   'entity_type' => 'node',
   'bundle' => 'test_content_type',
   'deleted' => '0',
   'entity_id' => '1',
-  'revision_id' => '6',
+  'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_private_file_fid' => '4',
-  'field_private_file_display' => '1',
-  'field_private_file_description' => '',
+  'field_images_fid' => '1',
+  'field_images_alt' => 'alt text',
+  'field_images_title' => 'title text',
+  'field_images_width' => '93',
+  'field_images_height' => '93',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_tags', array(
+$connection->schema()->createTable('field_revision_field_integer', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9043,11 +7199,10 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_tags_tid' => array(
+    'field_integer_value' => array(
       'type' => 'int',
       'not null' => FALSE,
       'size' => 'normal',
-      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -9061,7 +7216,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_tags')
+$connection->insert('field_revision_field_integer')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -9070,71 +7225,41 @@
   'revision_id',
   'language',
   'delta',
-  'field_tags_tid',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
-  'language' => 'und',
-  'delta' => '0',
-  'field_tags_tid' => '9',
+  'field_integer_value',
 ))
 ->values(array(
   'entity_type' => 'node',
-  'bundle' => 'article',
+  'bundle' => 'test_content_type',
   'deleted' => '0',
-  'entity_id' => '3',
-  'revision_id' => '3',
+  'entity_id' => '1',
+  'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_tags_tid' => '9',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '2',
-  'revision_id' => '2',
-  'language' => 'und',
-  'delta' => '1',
-  'field_tags_tid' => '14',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
-  'deleted' => '0',
-  'entity_id' => '3',
-  'revision_id' => '3',
-  'language' => 'und',
-  'delta' => '1',
-  'field_tags_tid' => '14',
+  'field_integer_value' => '5',
 ))
 ->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
+  'entity_type' => 'user',
+  'bundle' => 'user',
   'deleted' => '0',
   'entity_id' => '2',
   'revision_id' => '2',
   'language' => 'und',
-  'delta' => '2',
-  'field_tags_tid' => '17',
+  'delta' => '0',
+  'field_integer_value' => '99',
 ))
 ->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'article',
+  'entity_type' => 'taxonomy_term',
+  'bundle' => 'test_vocabulary',
   'deleted' => '0',
-  'entity_id' => '3',
-  'revision_id' => '3',
+  'entity_id' => '4',
+  'revision_id' => '4',
   'language' => 'und',
-  'delta' => '2',
-  'field_tags_tid' => '17',
+  'delta' => '0',
+  'field_integer_value' => '6',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_term_entityreference', array(
+$connection->schema()->createTable('field_revision_field_integer_list', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9151,7 +7276,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -9178,48 +7303,24 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_term_entityreference_target_id' => array(
+    'field_integer_list_value' => array(
       'type' => 'int',
-      'not null' => TRUE,
+      'not null' => FALSE,
       'size' => 'normal',
-      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_term_entityreference_target_id' => array(
-      'field_term_entityreference_target_id',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_term_entityreference')
+$connection->insert('field_revision_field_integer_list')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -9228,7 +7329,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_term_entityreference_target_id',
+  'field_integer_list_value',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -9238,21 +7339,11 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_term_entityreference_target_id' => '17',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '1',
-  'field_term_entityreference_target_id' => '15',
+  'field_integer_list_value' => '7',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_term_reference', array(
+$connection->schema()->createTable('field_revision_field_link', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9296,11 +7387,20 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_term_reference_tid' => array(
-      'type' => 'int',
+    'field_link_url' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '2048',
+    ),
+    'field_link_title' => array(
+      'type' => 'varchar',
+      'not null' => FALSE,
+      'length' => '255',
+    ),
+    'field_link_attributes' => array(
+      'type' => 'text',
       'not null' => FALSE,
       'size' => 'normal',
-      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -9314,7 +7414,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_term_reference')
+$connection->insert('field_revision_field_link')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -9323,7 +7423,9 @@
   'revision_id',
   'language',
   'delta',
-  'field_term_reference_tid',
+  'field_link_url',
+  'field_link_title',
+  'field_link_attributes',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -9333,21 +7435,37 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_term_reference_tid' => '4',
+  'field_link_url' => 'http://google.com',
+  'field_link_title' => 'Click Here',
+  'field_link_attributes' => 'a:1:{s:5:"title";s:10:"Click Here";}',
 ))
 ->values(array(
-  'entity_type' => 'taxonomy_term',
-  'bundle' => 'test_vocabulary',
+  'entity_type' => 'node',
+  'bundle' => 'article',
   'deleted' => '0',
   'entity_id' => '2',
   'revision_id' => '2',
   'language' => 'und',
   'delta' => '0',
-  'field_term_reference_tid' => '3',
+  'field_link_url' => '<front>',
+  'field_link_title' => 'Home',
+  'field_link_attributes' => 'a:0:{}',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '3',
+  'language' => 'und',
+  'delta' => '0',
+  'field_link_url' => '<front>',
+  'field_link_title' => 'Home',
+  'field_link_attributes' => 'a:1:{s:5:"title";s:0:"";}',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_text', array(
+$connection->schema()->createTable('field_revision_field_long_text', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9391,12 +7509,17 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_value' => array(
-      'type' => 'varchar',
+    'field_long_text_value' => array(
+      'type' => 'text',
       'not null' => FALSE,
-      'length' => '256',
+      'size' => 'normal',
     ),
-    'field_text_format' => array(
+    'field_long_text_summary' => array(
+      'type' => 'text',
+      'not null' => FALSE,
+      'size' => 'normal',
+    ),
+    'field_long_text_format' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -9413,32 +7536,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_text')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'field_text_value',
-  'field_text_format',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'test_content_type',
-  'deleted' => '0',
-  'entity_id' => '1',
-  'revision_id' => '1',
-  'language' => 'und',
-  'delta' => '0',
-  'field_text_value' => 'qwerty',
-  'field_text_format' => NULL,
-))
-->execute();
-
-$connection->schema()->createTable('field_revision_field_text_filtered', array(
+$connection->schema()->createTable('field_revision_field_node_entityreference', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9482,15 +7580,11 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_filtered_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
+    'field_node_entityreference_target_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -9520,14 +7614,37 @@
     'language' => array(
       'language',
     ),
-    'field_text_filtered_format' => array(
-      'field_text_filtered_format',
+    'field_node_entityreference_target_id' => array(
+      'field_node_entityreference_target_id',
     ),
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_list', array(
+$connection->insert('field_revision_field_node_entityreference')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_node_entityreference_target_id',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_node_entityreference_target_id' => '2',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_phone', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9571,7 +7688,7 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_list_value' => array(
+    'field_phone_value' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -9588,7 +7705,7 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_field_text_list')
+$connection->insert('field_revision_field_phone')
 ->fields(array(
   'entity_type',
   'bundle',
@@ -9597,7 +7714,7 @@
   'revision_id',
   'language',
   'delta',
-  'field_text_list_value',
+  'field_phone_value',
 ))
 ->values(array(
   'entity_type' => 'node',
@@ -9607,11 +7724,21 @@
   'revision_id' => '1',
   'language' => 'und',
   'delta' => '0',
-  'field_text_list_value' => 'Some more text',
+  'field_phone_value' => '99-99-99-99',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '6',
+  'language' => 'und',
+  'delta' => '0',
+  'field_phone_value' => '99-99-99-99',
 ))
 ->execute();
 
-$connection->schema()->createTable('field_revision_field_text_long_filtered', array(
+$connection->schema()->createTable('field_revision_field_private_file', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9655,104 +7782,23 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_long_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
-    'entity_id',
-    'revision_id',
-    'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_long_filtered_format' => array(
-      'field_text_long_filtered_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_revision_field_text_long_plain', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
+    'field_private_file_fid' => array(
       'type' => 'int',
-      'not null' => TRUE,
+      'not null' => FALSE,
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
+    'field_private_file_display' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'normal',
+      'size' => 'tiny',
+      'default' => '1',
       'unsigned' => TRUE,
     ),
-    'field_text_long_plain_value' => array(
+    'field_private_file_description' => array(
       'type' => 'text',
       'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_plain_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
+      'size' => 'normal',
     ),
   ),
   'primary key' => array(
@@ -9782,14 +7828,41 @@
     'language' => array(
       'language',
     ),
-    'field_text_long_plain_format' => array(
-      'field_text_long_plain_format',
+    'field_private_file_fid' => array(
+      'field_private_file_fid',
     ),
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_long_plain_filtered', array(
+$connection->insert('field_revision_field_private_file')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_private_file_fid',
+  'field_private_file_display',
+  'field_private_file_description',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '6',
+  'language' => 'und',
+  'delta' => '0',
+  'field_private_file_fid' => '4',
+  'field_private_file_display' => '1',
+  'field_private_file_description' => '',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_tags', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9806,7 +7879,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -9833,52 +7906,98 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_long_plain_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_long_plain_filtered_format' => array(
-      'type' => 'varchar',
+    'field_tags_tid' => array(
+      'type' => 'int',
       'not null' => FALSE,
-      'length' => '255',
+      'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_long_plain_filtered_format' => array(
-      'field_text_long_plain_filtered_format',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_plain', array(
+$connection->insert('field_revision_field_tags')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_tags_tid',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_tags_tid' => '9',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '1',
+  'field_tags_tid' => '14',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '2',
+  'field_tags_tid' => '17',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '3',
+  'language' => 'und',
+  'delta' => '0',
+  'field_tags_tid' => '9',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '3',
+  'language' => 'und',
+  'delta' => '1',
+  'field_tags_tid' => '14',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'article',
+  'deleted' => '0',
+  'entity_id' => '3',
+  'revision_id' => '3',
+  'language' => 'und',
+  'delta' => '2',
+  'field_tags_tid' => '17',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_term_entityreference', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9922,15 +8041,11 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_plain_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_plain_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
+    'field_term_entityreference_target_id' => array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
@@ -9960,14 +8075,47 @@
     'language' => array(
       'language',
     ),
-    'field_text_plain_format' => array(
-      'field_text_plain_format',
+    'field_term_entityreference_target_id' => array(
+      'field_term_entityreference_target_id',
     ),
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_plain_filtered', array(
+$connection->insert('field_revision_field_term_entityreference')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_term_entityreference_target_id',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_term_entityreference_target_id' => '17',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '1',
+  'field_term_entityreference_target_id' => '15',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_term_reference', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -9984,7 +8132,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -10011,52 +8159,58 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_plain_filtered_value' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-    'field_text_plain_filtered_format' => array(
-      'type' => 'varchar',
+    'field_term_reference_tid' => array(
+      'type' => 'int',
       'not null' => FALSE,
-      'length' => '255',
+      'size' => 'normal',
+      'unsigned' => TRUE,
     ),
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_plain_filtered_format' => array(
-      'field_text_plain_filtered_format',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_sum_filtered', array(
+$connection->insert('field_revision_field_term_reference')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_term_reference_tid',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_term_reference_tid' => '4',
+))
+->values(array(
+  'entity_type' => 'taxonomy_term',
+  'bundle' => 'test_vocabulary',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_term_reference_tid' => '3',
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_text', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -10073,7 +8227,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -10100,17 +8254,12 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_sum_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_filtered_summary' => array(
-      'type' => 'text',
+    'field_text_value' => array(
+      'type' => 'varchar',
       'not null' => FALSE,
-      'size' => 'big',
+      'length' => '256',
     ),
-    'field_text_sum_filtered_format' => array(
+    'field_text_format' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -10118,39 +8267,41 @@
   ),
   'primary key' => array(
     'entity_type',
+    'deleted',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_filtered_format' => array(
-      'field_text_sum_filtered_format',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->schema()->createTable('field_revision_field_text_sum_plain', array(
+$connection->insert('field_revision_field_text')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_text_value',
+  'field_text_format',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_value' => 'qwerty',
+  'field_text_format' => NULL,
+))
+->execute();
+
+$connection->schema()->createTable('field_revision_field_text_list', array(
   'fields' => array(
     'entity_type' => array(
       'type' => 'varchar',
@@ -10167,7 +8318,7 @@
     'deleted' => array(
       'type' => 'int',
       'not null' => TRUE,
-      'size' => 'tiny',
+      'size' => 'normal',
       'default' => '0',
     ),
     'entity_id' => array(
@@ -10194,17 +8345,7 @@
       'size' => 'normal',
       'unsigned' => TRUE,
     ),
-    'field_text_sum_plain_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_format' => array(
+    'field_text_list_value' => array(
       'type' => 'varchar',
       'not null' => FALSE,
       'length' => '255',
@@ -10212,132 +8353,38 @@
   ),
   'primary key' => array(
     'entity_type',
-    'entity_id',
-    'revision_id',
     'deleted',
-    'delta',
-    'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_plain_format' => array(
-      'field_text_sum_plain_format',
-    ),
-  ),
-  'mysql_character_set' => 'utf8',
-));
-
-$connection->schema()->createTable('field_revision_field_text_sum_plain_filtered', array(
-  'fields' => array(
-    'entity_type' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'bundle' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '128',
-      'default' => '',
-    ),
-    'deleted' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'tiny',
-      'default' => '0',
-    ),
-    'entity_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'revision_id' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'not null' => TRUE,
-      'length' => '32',
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'size' => 'normal',
-      'unsigned' => TRUE,
-    ),
-    'field_text_sum_plain_filtered_value' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_filtered_summary' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'field_text_sum_plain_filtered_format' => array(
-      'type' => 'varchar',
-      'not null' => FALSE,
-      'length' => '255',
-    ),
-  ),
-  'primary key' => array(
-    'entity_type',
     'entity_id',
     'revision_id',
-    'deleted',
-    'delta',
     'language',
-  ),
-  'indexes' => array(
-    'entity_type' => array(
-      'entity_type',
-    ),
-    'bundle' => array(
-      'bundle',
-    ),
-    'deleted' => array(
-      'deleted',
-    ),
-    'entity_id' => array(
-      'entity_id',
-    ),
-    'revision_id' => array(
-      'revision_id',
-    ),
-    'language' => array(
-      'language',
-    ),
-    'field_text_sum_plain_filtered_format' => array(
-      'field_text_sum_plain_filtered_format',
-    ),
+    'delta',
   ),
   'mysql_character_set' => 'utf8',
 ));
 
+$connection->insert('field_revision_field_text_list')
+->fields(array(
+  'entity_type',
+  'bundle',
+  'deleted',
+  'entity_id',
+  'revision_id',
+  'language',
+  'delta',
+  'field_text_list_value',
+))
+->values(array(
+  'entity_type' => 'node',
+  'bundle' => 'test_content_type',
+  'deleted' => '0',
+  'entity_id' => '1',
+  'revision_id' => '1',
+  'language' => 'und',
+  'delta' => '0',
+  'field_text_list_value' => 'Some more text',
+))
+->execute();
+
 $connection->schema()->createTable('field_revision_field_user_entityreference', array(
   'fields' => array(
     'entity_type' => array(
@@ -10508,39 +8555,6 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('field_revision_taxonomy_forums')
-->fields(array(
-  'entity_type',
-  'bundle',
-  'deleted',
-  'entity_id',
-  'revision_id',
-  'language',
-  'delta',
-  'taxonomy_forums_tid',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'forum',
-  'deleted' => '0',
-  'entity_id' => '6',
-  'revision_id' => '6',
-  'language' => 'und',
-  'delta' => '0',
-  'taxonomy_forums_tid' => '1',
-))
-->values(array(
-  'entity_type' => 'node',
-  'bundle' => 'forum',
-  'deleted' => '0',
-  'entity_id' => '7',
-  'revision_id' => '7',
-  'language' => 'und',
-  'delta' => '0',
-  'taxonomy_forums_tid' => '1',
-))
-->execute();
-
 $connection->schema()->createTable('file_managed', array(
   'fields' => array(
     'fid' => array(
@@ -11141,24 +9155,6 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('forum')
-->fields(array(
-  'nid',
-  'vid',
-  'tid',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '6',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '7',
-  'tid' => '1',
-))
-->execute();
-
 $connection->schema()->createTable('forum_index', array(
   'fields' => array(
     'nid' => array(
@@ -11211,36 +9207,6 @@
   'mysql_character_set' => 'utf8',
 ));
 
-$connection->insert('forum_index')
-->fields(array(
-  'nid',
-  'title',
-  'tid',
-  'sticky',
-  'created',
-  'last_comment_timestamp',
-  'comment_count',
-))
-->values(array(
-  'nid' => '6',
-  'title' => 'Comments are closed :-(',
-  'tid' => '1',
-  'sticky' => '0',
-  'created' => '1504715414',
-  'last_comment_timestamp' => '1504715414',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'title' => 'Comments are open :-)',
-  'tid' => '1',
-  'sticky' => '0',
-  'created' => '1504715432',
-  'last_comment_timestamp' => '1504715432',
-  'comment_count' => '0',
-))
-->execute();
-
 $connection->schema()->createTable('history', array(
   'fields' => array(
     'uid' => array(
@@ -33311,7 +31277,7 @@
   'status' => '1',
   'created' => '1478755274',
   'changed' => '1478755274',
-  'comment' => '1',
+  'comment' => '2',
   'promote' => '1',
   'sticky' => '0',
   'tnid' => '4',
@@ -33327,44 +31293,12 @@
   'status' => '1',
   'created' => '1478755314',
   'changed' => '1478755314',
-  'comment' => '1',
+  'comment' => '2',
   'promote' => '1',
   'sticky' => '0',
   'tnid' => '4',
   'translate' => '0',
 ))
-->values(array(
-  'nid' => '6',
-  'vid' => '6',
-  'type' => 'forum',
-  'language' => 'en',
-  'title' => 'Comments are closed :-(',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1504715414',
-  'changed' => '1504715414',
-  'comment' => '1',
-  'promote' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '7',
-  'type' => 'forum',
-  'language' => 'en',
-  'title' => 'Comments are open :-)',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1504715432',
-  'changed' => '1504715432',
-  'comment' => '2',
-  'promote' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('node_access', array(
@@ -33525,22 +31459,6 @@
   'last_comment_uid' => '1',
   'comment_count' => '0',
 ))
-->values(array(
-  'nid' => '6',
-  'cid' => '0',
-  'last_comment_timestamp' => '1504715414',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '1',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'cid' => '0',
-  'last_comment_timestamp' => '1504715432',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '1',
-  'comment_count' => '0',
-))
 ->execute();
 
 $connection->schema()->createTable('node_counter', array(
@@ -33616,18 +31534,6 @@
   'daycount' => '1',
   'timestamp' => '1478755314',
 ))
-->values(array(
-  'nid' => '6',
-  'totalcount' => '2',
-  'daycount' => '2',
-  'timestamp' => '1504715439',
-))
-->values(array(
-  'nid' => '7',
-  'totalcount' => '2',
-  'daycount' => '2',
-  'timestamp' => '1504715438',
-))
 ->execute();
 
 $connection->schema()->createTable('node_revision', array(
@@ -33756,7 +31662,7 @@
   'log' => '',
   'timestamp' => '1478755274',
   'status' => '1',
-  'comment' => '1',
+  'comment' => '2',
   'promote' => '1',
   'sticky' => '0',
 ))
@@ -33768,32 +31674,8 @@
   'log' => '',
   'timestamp' => '1478755314',
   'status' => '1',
-  'comment' => '1',
-  'promote' => '1',
-  'sticky' => '0',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '6',
-  'uid' => '1',
-  'title' => 'Comments are closed :-(',
-  'log' => '',
-  'timestamp' => '1504715414',
-  'status' => '1',
-  'comment' => '1',
-  'promote' => '0',
-  'sticky' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '7',
-  'uid' => '1',
-  'title' => 'Comments are open :-)',
-  'log' => '',
-  'timestamp' => '1504715432',
-  'status' => '1',
   'comment' => '2',
-  'promote' => '0',
+  'promote' => '1',
   'sticky' => '0',
 ))
 ->execute();
@@ -44977,18 +42859,6 @@
   'sticky' => '0',
   'created' => '1421727515',
 ))
-->values(array(
-  'nid' => '6',
-  'tid' => '1',
-  'sticky' => '0',
-  'created' => '1504715414',
-))
-->values(array(
-  'nid' => '7',
-  'tid' => '1',
-  'sticky' => '0',
-  'created' => '1504715432',
-))
 ->execute();
 
 $connection->schema()->createTable('taxonomy_term_data', array(
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.module b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.module
deleted file mode 100644
index 0cb89be325..0000000000
--- a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/migrate_cckfield_plugin_manager_test.module
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-/**
- * @file
- * Module for Migrate CCK Field Plugin Manager testing.
- */
-
-use Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield\D6FileField;
-
-function migrate_cckfield_plugin_manager_test_migrate_field_info_alter(array &$definitions) {
-  if (isset($definitions['filefield'])) {
-    $definitions['filefield']['class'] = D6FileField::class;
-  }
-}
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php
index 1b43724991..529907a35f 100644
--- a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php
+++ b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6FileField.php
@@ -19,10 +19,11 @@ class D6FileField extends CckFieldPluginBase {
   /**
    * {@inheritdoc}
    */
-  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $migration->setProcessOfProperty($field_name, [
-      'class' => static::class,
-    ]);
-  }
+  public function getFieldFormatterMap() {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {}
 
 }
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php
index 74dfd3bcd7..16967db97d 100644
--- a/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php
+++ b/core/modules/migrate_drupal/tests/modules/migrate_cckfield_plugin_manager_test/src/Plugin/migrate/cckfield/D6NoCoreVersionSpecified.php
@@ -12,6 +12,11 @@
  */
 class D6NoCoreVersionSpecified extends CckFieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {}
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/migrate_field_plugin_manager_test.module b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/migrate_field_plugin_manager_test.module
new file mode 100644
index 0000000000..9f9da0db1c
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/migrate_field_plugin_manager_test.module
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @file
+ * Module for Migrate Field Plugin Manager testing.
+ */
+
+use Drupal\migrate_field_plugin_manager_test\Plugin\migrate\cckfield\d6\FileField;
+
+function migrate_field_plugin_manager_test_migrate_field_info_alter(array &$definitions) {
+  if (isset($definitions['filefield'])) {
+    $definitions['filefield']['class'] = FileField::class;
+  }
+}
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/cckfield/d6/FileField.php b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/cckfield/d6/FileField.php
new file mode 100644
index 0000000000..903c7e87ee
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/cckfield/d6/FileField.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\migrate_field_plugin_manager_test\Plugin\migrate\cckfield\d6;
+
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
+
+/**
+ * @MigrateCckField(
+ *   id = "filefield",
+ *   core = {6}
+ * )
+ */
+class FileField extends CckFieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processCckFieldValues(MigrationInterface $migration, $field_name, $data) {
+    $migration->mergeProcessOfProperty($field_name, [
+      'class' => __CLASS__,
+    ]);
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6FileField.php b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6FileField.php
index acb9d9cd7e..08ca88cfa0 100644
--- a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6FileField.php
+++ b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6FileField.php
@@ -3,6 +3,7 @@
 namespace Drupal\migrate_field_plugin_manager_test\Plugin\migrate\field;
 
 use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
+use Drupal\migrate\Plugin\MigrationInterface;
 
 /**
  * @MigrateField(
@@ -13,4 +14,18 @@
  *   }
  * )
  */
-class D6FileField extends FieldPluginBase {}
+class D6FileField extends FieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {}
+
+}
diff --git a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6NoCoreVersionSpecified.php b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6NoCoreVersionSpecified.php
index 39f109b697..224388b146 100644
--- a/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6NoCoreVersionSpecified.php
+++ b/core/modules/migrate_drupal/tests/modules/migrate_field_plugin_manager_test/src/Plugin/migrate/field/D6NoCoreVersionSpecified.php
@@ -3,6 +3,7 @@
 namespace Drupal\migrate_field_plugin_manager_test\Plugin\migrate\field;
 
 use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
+use Drupal\migrate\Plugin\MigrationInterface;
 
 /**
  * @MigrateField(
@@ -11,5 +12,16 @@
  */
 class D6NoCoreVersionSpecified extends FieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {}
 
 }
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/CckFieldBackwardsCompatibilityTest.php b/core/modules/migrate_drupal/tests/src/Kernel/CckFieldBackwardsCompatibilityTest.php
index bb314b4e97..11dceec733 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/CckFieldBackwardsCompatibilityTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/CckFieldBackwardsCompatibilityTest.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\migrate_drupal\Kernel;
 
-use Drupal\migrate_cckfield_plugin_manager_test\Plugin\migrate\cckfield\D6FileField;
+use Drupal\migrate_field_plugin_manager_test\Plugin\migrate\cckfield\d6\FileField;
 use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
 
 /**
@@ -13,7 +13,7 @@ class CckFieldBackwardsCompatibilityTest extends MigrateDrupal6TestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['file', 'migrate_cckfield_plugin_manager_test'];
+  public static $modules = ['file', 'migrate_field_plugin_manager_test'];
 
   /**
    * Ensures that the cckfield backwards compatibility layer is invoked.
@@ -23,7 +23,7 @@ public function testBackwardsCompatibility() {
       ->get('plugin.manager.migration')
       ->getDefinition('d6_node:story');
 
-    $this->assertSame(D6FileField::class, $migration['process']['field_test_filefield']['class']);
+    $this->assertSame(FileField::class, $migration['process']['field_test_filefield']['class']);
   }
 
 }
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php b/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php
index 7eb68ba338..9e30795be1 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/MigrateCckFieldPluginManagerTest.php
@@ -22,20 +22,28 @@ class MigrateCckFieldPluginManagerTest extends MigrateDrupalTestBase {
   public function testPluginSelection() {
     $plugin_manager = \Drupal::service('plugin.manager.migrate.cckfield');
 
-    $this->assertSame('d6_file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 6]));
+    $plugin_id = $plugin_manager->getPluginIdFromFieldType('filefield', ['core' => 6]);
+    $this->assertIdentical('Drupal\\file\\Plugin\\migrate\\cckfield\\d6\\FileField', get_class($plugin_manager->createInstance($plugin_id, ['core' => 6])));
 
     try {
       // If this test passes, getPluginIdFromFieldType will raise a
       // PluginNotFoundException and we'll never reach fail().
-      $plugin_manager->getPluginIdFromFieldType('d6_file', ['core' => 7]);
+      $plugin_manager->getPluginIdFromFieldType('filefield', ['core' => 7]);
       $this->fail('Expected Drupal\Component\Plugin\Exception\PluginNotFoundException.');
     }
     catch (PluginNotFoundException $e) {
-      $this->assertSame($e->getMessage(), "Plugin ID 'd6_file' was not found.");
+      $this->assertIdentical($e->getMessage(), "Plugin ID 'filefield' was not found.");
     }
 
+    $this->assertIdentical('image', $plugin_manager->getPluginIdFromFieldType('image', ['core' => 7]));
+    $this->assertIdentical('file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 7]));
+    $this->assertIdentical('d6_file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 6]));
+
+    $this->assertIdentical('text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 6]));
+    $this->assertIdentical('text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 7]));
+
     // Test fallback when no core version is specified.
-    $this->assertSame('d6_no_core_version_specified', $plugin_manager->getPluginIdFromFieldType('d6_no_core_version_specified', ['core' => 6]));
+    $this->assertIdentical('d6_no_core_version_specified', $plugin_manager->getPluginIdFromFieldType('d6_no_core_version_specified', ['core' => 6]));
 
     try {
       // If this test passes, getPluginIdFromFieldType will raise a
@@ -44,7 +52,7 @@ public function testPluginSelection() {
       $this->fail('Expected Drupal\Component\Plugin\Exception\PluginNotFoundException.');
     }
     catch (PluginNotFoundException $e) {
-      $this->assertSame($e->getMessage(), "Plugin ID 'd6_no_core_version_specified' was not found.");
+      $this->assertIdentical($e->getMessage(), "Plugin ID 'd6_no_core_version_specified' was not found.");
     }
   }
 
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php b/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php
index 7e36364e82..7c3c5a4a4c 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/MigrateFieldPluginManagerTest.php
@@ -14,7 +14,7 @@ class MigrateFieldPluginManagerTest extends MigrateDrupalTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['system', 'user', 'field', 'migrate_drupal', 'options', 'file', 'text', 'link', 'migrate_field_plugin_manager_test'];
+  public static $modules = ['system', 'user', 'field', 'migrate_drupal', 'options', 'file', 'text', 'migrate_field_plugin_manager_test'];
 
   /**
    * Tests that the correct MigrateField plugins are used.
@@ -32,13 +32,7 @@ public function testPluginSelection() {
       $this->assertIdentical($e->getMessage(), "Plugin ID 'filefield' was not found.");
     }
 
-    $this->assertIdentical('link', $plugin_manager->getPluginIdFromFieldType('link', ['core' => 6]));
-    $this->assertIdentical('link_field', $plugin_manager->getPluginIdFromFieldType('link_field', ['core' => 7]));
-    $this->assertIdentical('image', $plugin_manager->getPluginIdFromFieldType('image', ['core' => 7]));
-    $this->assertIdentical('file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 7]));
     $this->assertIdentical('d6_file', $plugin_manager->getPluginIdFromFieldType('file', ['core' => 6]));
-    $this->assertIdentical('d6_text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 6]));
-    $this->assertIdentical('d7_text', $plugin_manager->getPluginIdFromFieldType('text', ['core' => 7]));
 
     // Test fallback when no core version is specified.
     $this->assertIdentical('d6_no_core_version_specified', $plugin_manager->getPluginIdFromFieldType('d6_no_core_version_specified', ['core' => 6]));
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/DrupalSqlBaseTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/DrupalSqlBaseTest.php
index ebd9334a2d..6dd5925748 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/DrupalSqlBaseTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/DrupalSqlBaseTest.php
@@ -43,7 +43,7 @@ class DrupalSqlBaseTest extends MigrateTestCase {
    */
   public function testSourceProviderNotActive() {
     $plugin_definition['requirements_met'] = TRUE;
-    $plugin_definition['source_module'] = 'module1';
+    $plugin_definition['source_provider'] = 'module1';
     /** @var \Drupal\Core\State\StateInterface $state */
     $state = $this->getMock('Drupal\Core\State\StateInterface');
     /** @var \Drupal\Core\Entity\EntityManagerInterface $entity_manager */
@@ -57,7 +57,7 @@ public function testSourceProviderNotActive() {
     }
     catch (RequirementsException $e) {
       // Ensure requirements are set on the exception.
-      $this->assertEquals(['source_module' => 'module1'], $e->getRequirements());
+      $this->assertEquals(['source_provider' => 'module1'], $e->getRequirements());
       // Re-throw so PHPUnit can assert the exception.
       throw $e;
     }
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
index e8866d6f10..55d128227d 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
@@ -150,10 +150,10 @@ public function fields() {
       'owner' => t("A theme's 'parent'. Can be either a theme or an engine."),
       'status' => t('Boolean indicating whether or not this item is enabled.'),
       'throttle' => t('Boolean indicating whether this item is disabled when the throttle.module disables throttleable items.'),
-      'bootstrap' => t("Boolean indicating whether this module is loaded during Drupal's early bootstrapping phase (e.g. even before the page cache is consulted)."),
-      'schema_version' => t("The module's database schema version number."),
-      'weight' => t("The order in which this module's hooks should be invoked."),
-      'info' => t("A serialized array containing information from the module's .info file."),
+      'bootstrap' => t('Boolean indicating whether this module is loaded during Drupal\'s early bootstrapping phase (e.g. even before the page cache is consulted).'),
+      'schema_version' => t('The module\'s database schema version number.'),
+      'weight' => t('The order in which this module\'s hooks should be invoked.'),
+      'info' => t('A serialized array containing information from the module\'s .info file.'),
     ];
   }
 
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/VariableTranslationTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/VariableTranslationTest.php
deleted file mode 100644
index 152706798c..0000000000
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/VariableTranslationTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace Drupal\Tests\migrate_drupal\Unit\source\d6;
-
-use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
-
-/**
- * Tests the variable source plugin.
- *
- * @group migrate_drupal
- */
-class VariableTranslationTest extends MigrateSqlSourceTestCase {
-
-  // The plugin system is not working during unit testing so the source plugin
-  // class needs to be manually specified.
-  const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\d6\VariableTranslation';
-
-  /**
-   * Define bare minimum migration configuration.
-   */
-  protected $migrationConfiguration = [
-    'id' => 'test',
-    'highWaterProperty' => ['field' => 'test'],
-    'source' => [
-      'plugin' => 'variable_translation',
-      'variables' => [
-        'site_slogan',
-        'site_name',
-      ],
-    ],
-  ];
-
-  /**
-   * Expected results from the source.
-   */
-  protected $expectedResults = [
-    [
-      'language' => 'fr',
-      'site_slogan' => 'Migrate est génial',
-      'site_name' => 'nom de site',
-    ],
-    [
-      'language' => 'mi',
-      'site_slogan' => 'Ko whakamataku heke',
-      'site_name' => 'ingoa_pae',
-    ]
-  ];
-
-  /**
-   * Database contents for tests.
-   */
-  protected $databaseContents = [
-    'i18n_variable' => [
-      ['name' => 'site_slogan', 'language' => 'fr', 'value' => 's:19:"Migrate est génial";'],
-      ['name' => 'site_name', 'language' => 'fr', 'value' => 's:11:"nom de site";'],
-      ['name' => 'site_slogan', 'language' => 'mi', 'value' => 's:19:"Ko whakamataku heke";'],
-      ['name' => 'site_name', 'language' => 'mi', 'value' => 's:9:"ingoa_pae";'],
-    ],
-  ];
-
-}
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php
index d1905b0e6c..06059cfd53 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/i18nVariableTest.php
@@ -8,7 +8,6 @@
  * Tests the variable source plugin.
  *
  * @group migrate_drupal
- * @group legacy
  */
 class i18nVariableTest extends MigrateSqlSourceTestCase {
 
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 0d9b53e531..c87247eb36 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -20,6 +20,670 @@ class MigrateUpgradeForm extends ConfirmFormBase {
 
   use MigrationConfigurationTrait;
 
+  /**
+   * Mapping of known migrations and their source and destination modules.
+   *
+   * @todo https://www.drupal.org/node/2569805 Hardcoding this information is
+   *   not robust - the migrations themselves should hold the necessary
+   *   information.
+   *
+   * @var array[]
+   */
+  protected $moduleUpgradePaths = [
+    'action_settings' => [
+      'source_module' => 'system',
+      'destination_module' => 'action',
+    ],
+    'd6_aggregator_feed' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd6_aggregator_item' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd6_aggregator_settings' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd7_aggregator_feed' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd7_aggregator_item' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd7_aggregator_settings' => [
+      'source_module' => 'aggregator',
+      'destination_module' => 'aggregator',
+    ],
+    'd7_blocked_ips' => [
+      'source_module' => 'system',
+      'destination_module' => 'ban',
+    ],
+    'd6_block' => [
+      'source_module' => 'block',
+      'destination_module' => 'block',
+    ],
+    'd7_block' => [
+      'source_module' => 'block',
+      'destination_module' => 'block',
+    ],
+    'block_content_entity_form_display' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'block_content_entity_display' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'block_content_body_field' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'block_content_type' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'd6_custom_block' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'd7_custom_block' => [
+      'source_module' => 'block',
+      'destination_module' => 'block_content',
+    ],
+    'd6_book' => [
+      'source_module' => 'book',
+      'destination_module' => 'book',
+    ],
+    'd6_book_settings' => [
+      'source_module' => 'book',
+      'destination_module' => 'book',
+    ],
+    'd6_comment' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_entity_display' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_entity_form_display' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_entity_form_display_subject' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_field' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_field_instance' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd6_comment_type' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_entity_display' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_entity_form_display' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_entity_form_display_subject' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_field' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_field_instance' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'd7_comment_type' => [
+      'source_module' => 'comment',
+      'destination_module' => 'comment',
+    ],
+    'contact_category' => [
+      'source_module' => 'contact',
+      'destination_module' => 'contact',
+    ],
+    'd6_contact_settings' => [
+      'source_module' => 'contact',
+      'destination_module' => 'contact',
+    ],
+    'd7_contact_settings' => [
+      'source_module' => 'contact',
+      'destination_module' => 'contact',
+    ],
+    'd6_dblog_settings' => [
+      'source_module' => 'dblog',
+      'destination_module' => 'dblog',
+    ],
+    'd7_dblog_settings' => [
+      'source_module' => 'dblog',
+      'destination_module' => 'dblog',
+    ],
+    'default_language' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd6_field' => [
+      'source_module' => 'content',
+      'destination_module' => 'field',
+    ],
+    'd6_field_formatter_settings' => [
+      'source_module' => 'content',
+      'destination_module' => 'field',
+    ],
+    'd6_field_instance' => [
+      'source_module' => 'content',
+      'destination_module' => 'field',
+    ],
+    'd6_field_instance_widget_settings' => [
+      'source_module' => 'content',
+      'destination_module' => 'field',
+    ],
+    'd7_field' => [
+      'source_module' => 'field',
+      'destination_module' => 'field',
+    ],
+    'd7_field_formatter_settings' => [
+      'source_module' => 'field',
+      'destination_module' => 'field',
+    ],
+    'd7_field_instance' => [
+      'source_module' => 'field',
+      'destination_module' => 'field',
+    ],
+    'd7_field_instance_widget_settings' => [
+      'source_module' => 'field',
+      'destination_module' => 'field',
+    ],
+    'd7_view_modes' => [
+      'source_module' => 'field',
+      'destination_module' => 'field',
+    ],
+    'd6_file' => [
+      'source_module' => 'system',
+      'destination_module' => 'file',
+    ],
+    'file_settings' => [
+      'source_module' => 'system',
+      'destination_module' => 'file',
+    ],
+    'd6_upload' => [
+      'source_module' => 'upload',
+      'destination_module' => 'file',
+    ],
+    'd6_upload_entity_display' => [
+      'source_module' => 'upload',
+      'destination_module' => 'file',
+    ],
+    'd6_upload_entity_form_display' => [
+      'source_module' => 'upload',
+      'destination_module' => 'file',
+    ],
+    'd6_upload_field' => [
+      'source_module' => 'upload',
+      'destination_module' => 'file',
+    ],
+    'd6_upload_field_instance' => [
+      'source_module' => 'upload',
+      'destination_module' => 'file',
+    ],
+    'd7_file' => [
+      'source_module' => 'file',
+      'destination_module' => 'file',
+    ],
+    'd7_file_private' => [
+      'source_module' => 'file',
+      'destination_module' => 'file',
+    ],
+    'd6_filter_format' => [
+      'source_module' => 'filter',
+      'destination_module' => 'filter',
+    ],
+    'd7_filter_format' => [
+      'source_module' => 'filter',
+      'destination_module' => 'filter',
+    ],
+    'd7_filter_settings' => [
+      'source_module' => 'filter',
+      'destination_module' => 'filter',
+    ],
+    'd6_forum_settings' => [
+      'source_module' => 'forum',
+      'destination_module' => 'forum',
+    ],
+    'd7_forum_settings' => [
+      'source_module' => 'forum',
+      'destination_module' => 'forum',
+    ],
+    'd7_global_theme_settings' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_imagecache_presets' => [
+      'source_module' => 'imagecache',
+      'destination_module' => 'image',
+    ],
+    'd7_image_settings' => [
+      'source_module' => 'image',
+      'destination_module' => 'image',
+    ],
+    'd7_image_styles' => [
+      'source_module' => 'image',
+      'destination_module' => 'image',
+    ],
+    'd6_language_content_settings' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd7_language_content_settings' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd6_language_negotiation_settings' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd7_language_negotiation_settings' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'language_prefixes_and_domains' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd6_language_types' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'language' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'd7_language_types' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
+    'locale_settings' => [
+      'source_module' => 'locale',
+      'destination_module' => 'locale',
+    ],
+    'd6_menu_links' => [
+      'source_module' => 'menu',
+      'destination_module' => 'menu_link_content',
+    ],
+    'menu_settings' => [
+      'source_module' => 'menu',
+      'destination_module' => 'menu_ui',
+    ],
+    'd7_menu_links' => [
+      'source_module' => 'menu',
+      'destination_module' => 'menu_link_content',
+    ],
+    'd6_node' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_translation' => [
+      'source_module' => 'translation',
+      'destination_module' => 'content_translation',
+    ],
+    'd6_node_revision' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_setting_promote' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_setting_status' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_setting_sticky' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_settings' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_node_type' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_view_modes' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node_revision' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node_settings' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node_translation' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node_title_label' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd7_node_type' => [
+      'source_module' => 'node',
+      'destination_module' => 'node',
+    ],
+    'd6_url_alias' => [
+      'source_module' => 'path',
+      'destination_module' => 'path',
+    ],
+    'd7_url_alias' => [
+      'source_module' => 'path',
+      'destination_module' => 'path',
+    ],
+    'search_page' => [
+      'source_module' => 'search',
+      'destination_module' => 'search',
+    ],
+    'd6_search_settings' => [
+      'source_module' => 'search',
+      'destination_module' => 'search',
+    ],
+    'd7_search_settings' => [
+      'source_module' => 'search',
+      'destination_module' => 'search',
+    ],
+    'd7_shortcut' => [
+      'source_module' => 'shortcut',
+      'destination_module' => 'shortcut',
+    ],
+    'd7_shortcut_set' => [
+      'source_module' => 'shortcut',
+      'destination_module' => 'shortcut',
+    ],
+    'd7_shortcut_set_users' => [
+      'source_module' => 'shortcut',
+      'destination_module' => 'shortcut',
+    ],
+    'd6_simpletest_settings' => [
+      'source_module' => 'simpletest',
+      'destination_module' => 'simpletest',
+    ],
+    'd7_simpletest_settings' => [
+      'source_module' => 'simpletest',
+      'destination_module' => 'simpletest',
+    ],
+    'statistics_settings' => [
+      'source_module' => 'statistics',
+      'destination_module' => 'statistics',
+    ],
+    'd6_syslog_settings' => [
+      'source_module' => 'syslog',
+      'destination_module' => 'syslog',
+    ],
+    'd7_syslog_settings' => [
+      'source_module' => 'syslog',
+      'destination_module' => 'syslog',
+    ],
+    'd6_date_formats' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_system_cron' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_system_date' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_system_file' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_image' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_image_gd' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_logging' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_maintenance' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_system_performance' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_rss' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'system_site' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_authorize' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_cron' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_date' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_file' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_mail' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd7_system_performance' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_menu' => [
+      'source_module' => 'menu',
+      'destination_module' => 'system',
+    ],
+    'd7_menu' => [
+      'source_module' => 'menu',
+      'destination_module' => 'system',
+    ],
+    'taxonomy_settings' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_taxonomy_term' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_taxonomy_term_translation' => [
+      'source_module' => 'i18n',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_taxonomy_vocabulary' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_taxonomy_vocabulary_translation' => [
+      'source_module' => 'i18n',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_term_node' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_term_node_revision' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_vocabulary_entity_display' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_vocabulary_entity_form_display' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_vocabulary_field' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd6_vocabulary_field_instance' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd7_taxonomy_term' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'd7_taxonomy_vocabulary' => [
+      'source_module' => 'taxonomy',
+      'destination_module' => 'taxonomy',
+    ],
+    'text_settings' => [
+      'source_module' => 'text',
+      'destination_module' => 'text',
+    ],
+    'd7_tracker_node' => [
+      'source_module' => 'tracker',
+      'destination_module' => 'tracker',
+    ],
+    'd7_tracker_settings' => [
+      'source_module' => 'tracker',
+      'destination_module' => 'tracker',
+    ],
+    'd7_tracker_user' => [
+      'source_module' => 'tracker',
+      'destination_module' => 'tracker',
+    ],
+    'update_settings' => [
+      'source_module' => 'update',
+      'destination_module' => 'update',
+    ],
+    'd6_profile_values' => [
+      'source_module' => 'profile',
+      'destination_module' => 'user',
+    ],
+    'd7_theme_settings' => [
+      'source_module' => 'system',
+      'destination_module' => 'system',
+    ],
+    'd6_user' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd6_user_contact_settings' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd6_user_mail' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd6_user_picture_file' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd6_user_role' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd6_user_settings' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd7_user' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd7_user_flood' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd7_user_mail' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'd7_user_role' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'user_picture_entity_display' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'user_picture_entity_form_display' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'user_picture_field' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'user_picture_field_instance' => [
+      'source_module' => 'user',
+      'destination_module' => 'user',
+    ],
+    'user_profile_entity_display' => [
+      'source_module' => 'profile',
+      'destination_module' => 'user',
+    ],
+    'user_profile_entity_form_display' => [
+      'source_module' => 'profile',
+      'destination_module' => 'user',
+    ],
+    'user_profile_field' => [
+      'source_module' => 'profile',
+      'destination_module' => 'user',
+    ],
+    'user_profile_field_instance' => [
+      'source_module' => 'profile',
+      'destination_module' => 'user',
+    ],
+    'd6_i18n_user_profile_field_instance' => [
+      'source_module' => 'i18n',
+      'destination_module' => 'user',
+    ],
+  ];
+
   /**
    * The state service.
    *
@@ -142,26 +806,16 @@ public function buildOverviewForm(array $form, FormStateInterface $form_state) {
     }
     else {
       $form['info_header'] = [
-        '#markup' => '<p>' . $this->t('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8. See the <a href=":url">Drupal site upgrades handbook</a> for more information.', [
+        '#markup' => '<p>' . $this->t('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the <a href=":url">online documentation for Drupal site upgrades</a> for more detailed information.', [
           ':url' => 'https://www.drupal.org/upgrade/migrate',
         ]),
       ];
 
-      $legend[] = $this->t('<em>Old site:</em> the site you want to upgrade.');
-      $legend[] = $this->t('<em>New site:</em> this empty Drupal 8 installation you will import the old site to.');
-
-      $form['legend'] = [
-        '#theme' => 'item_list',
-        '#title' => $this->t('Definitions'),
-        '#list_type' => 'ul',
-        '#items' => $legend,
-      ];
-
-      $info[] = $this->t('You may need multiple tries for a successful upgrade so <strong>backup the database</strong> for this new site. The upgrade will change it and you may want to revert to its initial state.');
-      $info[] = $this->t('Make sure that <strong>access to the database</strong> for the old site is available from this new site.');
-      $info[] = $this->t('<strong>If the old site has private files</strong>, a copy of its files directory must also be accessible on the host of this new site.');
-      $info[] = $this->t('<strong>Enable all modules on this new site</strong> that are enabled on the old site. For example, if the old site uses the book module, then enable the book module on this new site so that the existing data can be imported to it.');
-      $info[] = $this->t('<strong>Do not add any content to the new site</strong> before upgrading. Any existing content is likely to be overwritten by the upgrade process. See <a href=":url">the upgrade preparation guide</a>.', [
+      $info[] = $this->t('<strong>Back up the database for this site</strong>. Upgrade will change the database for this site.');
+      $info[] = $this->t('Make sure that the host this site is on has access to the database for your previous site.');
+      $info[] = $this->t('If your previous site has private files to be migrated, a copy of your files directory must be accessible on the host this site is on.');
+      $info[] = $this->t('In general, enable all modules on this site that are enabled on the previous site. For example, if you have used the book module on the previous site then you must enable the book module on this site for that data to be available on this site.');
+      $info[] = $this->t('Do not add any information on this site (including but not limited to user accounts, taxonomy terms, and node content) before upgrading. Any pre-existing information on the site risks being overwritten by the upgrade process. See <a href=":url">the upgrade preparation guide</a> for more information.', [
         ':url' => 'https://www.drupal.org/docs/8/upgrade/preparing-an-upgrade#dont_create_content',
       ]);
       $info[] = $this->t('Put this site into <a href=":url">maintenance mode</a>.', [
@@ -170,13 +824,12 @@ public function buildOverviewForm(array $form, FormStateInterface $form_state) {
 
       $form['info'] = [
         '#theme' => 'item_list',
-        '#title' => $this->t('Steps to prepare for the upgrade'),
         '#list_type' => 'ol',
         '#items' => $info,
       ];
 
       $form['info_footer'] = [
-        '#markup' => '<p>' . $this->t('The upgrade can take a long time. It is better to upgrade from a local copy of your site instead of directly from your live site.'),
+        '#markup' => '<p>' . $this->t('This upgrade can take a long time. It is better to import a local copy of your site instead of directly importing from your live site.'),
       ];
 
       $validate = [];
@@ -401,15 +1054,10 @@ public function validateCredentialForm(array &$form, FormStateInterface $form_st
         }
 
         // Store the retrieved migration IDs in form storage.
-        $form_state->set('version', $version);
         $form_state->set('migrations', $migration_array);
-        if ($version == 6) {
-          $form_state->set('source_base_path', $form_state->getValue('d6_source_base_path'));
-        }
-        else {
-          $form_state->set('source_base_path', $form_state->getValue('source_base_path'));
-        }
+        $form_state->set('source_base_path', $form_state->getValue('source_base_path'));
         $form_state->set('source_private_file_path', $form_state->getValue('source_private_file_path'));
+
         // Store the retrived system data in form storage.
         $form_state->set('system_data', $system_data);
       }
@@ -455,24 +1103,19 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
 
     $form['actions']['submit']['#value'] = $this->t('Perform upgrade');
 
-    $version = $form_state->get('version');
-    $migrations = $this->getMigrations('migrate_drupal_' . $version, $version);
-
     $table_data = [];
-    foreach ($migrations as $migration) {
-      $migration_id = $migration->getPluginId();
-      $source_module = $migration->getSourcePlugin()->getSourceModule();
-      if (!$source_module) {
-        drupal_set_message($this->t('Source module not found for @migration_id.', ['@migration_id' => $migration_id]), 'error');
-      }
-      $destination_module = $migration->getDestinationPlugin()->getDestinationModule();
-      if (!$destination_module) {
-        drupal_set_message($this->t('Destination module not found for @migration_id.', ['@migration_id' => $migration_id]), 'error');
+    $system_data = [];
+    foreach ($form_state->get('migrations') as $migration_id => $migration_label) {
+      // Fetch the system data at the first opportunity.
+      if (empty($system_data)) {
+        $system_data = $form_state->get('system_data');
       }
 
-      if ($source_module && $destination_module) {
-        $table_data[$source_module][$destination_module][$migration_id] = $migration->label();
-      }
+      // Handle derivatives.
+      list($migration_id,) = explode(':', $migration_id, 2);
+      $source_module = $this->moduleUpgradePaths[$migration_id]['source_module'];
+      $destination_module = $this->moduleUpgradePaths[$migration_id]['destination_module'];
+      $table_data[$source_module][$destination_module][$migration_id] = $migration_label;
     }
     // Sort the table by source module names and within that destination
     // module names.
@@ -480,9 +1123,6 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
     foreach ($table_data as $source_module => $destination_module_info) {
       ksort($table_data[$source_module]);
     }
-
-    // Fetch the system data at the first opportunity.
-    $system_data = $form_state->get('system_data');
     $unmigrated_source_modules = array_diff_key($system_data['module'], $table_data);
 
     // Missing migrations.
diff --git a/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php b/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
index 80a3c2fdab..4aea3f1d09 100644
--- a/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
+++ b/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php
@@ -44,7 +44,6 @@
     'book',
     'forum',
     'statistics',
-    'modules_available_test',
   ];
 
   /**
@@ -119,7 +118,7 @@ protected function tearDown() {
   public function testMigrateUpgrade() {
     $connection_options = $this->sourceDatabase->getConnectionOptions();
     $this->drupalGet('/upgrade');
-    $this->assertText('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.');
+    $this->assertText('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.');
 
     $this->drupalPostForm(NULL, [], t('Continue'));
     $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.');
@@ -150,30 +149,6 @@ public function testMigrateUpgrade() {
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertResponse(200);
     $this->assertText('Are you sure?');
-    // Ensure we get errors about missing modules.
-    $this->assertText(t('Source module not found for module_no_annotation.'));
-    $this->assertText(t('Source module not found for modules_available_test.'));
-    $this->assertText(t('Destination module not found for modules_available_test'));
-
-    // Uninstall the module causing the missing module error messages.
-    $this->container->get('module_installer')->uninstall(['modules_available_test'], TRUE);
-
-    // Restart the upgrade process.
-    $this->drupalGet('/upgrade');
-    $this->assertText('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.');
-
-    $this->drupalPostForm(NULL, [], t('Continue'));
-    $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.');
-    $this->assertFieldByName('mysql[host]');
-
-    $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
-    $this->assertResponse(200);
-    $this->assertText('Are you sure?');
-    // Ensure there are no errors about the missing modules.
-    $this->assertNoText(t('Source module not found for module_no_annotation.'));
-    $this->assertNoText(t('Source module not found for modules_available_test.'));
-    $this->assertNoText(t('Destination module not found for modules_available_test'));
-    // Check for any missing module errors.
     $this->drupalPostForm(NULL, [], t('Perform upgrade'));
     $this->assertText(t('Congratulations, you upgraded Drupal!'));
 
diff --git a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_provider_test.info.yml b/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_provider_test.info.yml
deleted file mode 100644
index 49b7dce9b5..0000000000
--- a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_provider_test.info.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: 'Migration provider missing'
-type: module
-description: 'Add a migration missing a source and destination migration provider and a source plugin missing a migration provider.'
-package: Testing
-version: VERSION
-core: 8.x
diff --git a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_no_annotation.yml b/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_no_annotation.yml
deleted file mode 100644
index bdc906660b..0000000000
--- a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_no_annotation.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-id: migration_provider_no_annotation
-label: Missing source annotation
-migration_tags:
-  - Drupal 6
-  - Drupal 7
-source:
-# Test plugin without a source_module annotation
-  plugin: no_source_module
-process:
-  message: site_offline_message
-destination:
-  plugin: config
-  config_name: test.settings
diff --git a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_test.yml b/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_test.yml
deleted file mode 100644
index d3afc66539..0000000000
--- a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/migration_templates/migration_provider_test.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-id: migration_provider_test
-label: Missing source and destination provider
-migration_tags:
-  - Drupal 6
-  - Drupal 7
-source:
-  plugin: variable
-  variables:
-    - site_offline_message
-# Do not add a provider for the test.
-process:
-  message: site_offline_message
-destination:
-  plugin: config
-# An empty config_name will not have a destination provider.
-  config_name:
\ No newline at end of file
diff --git a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/src/Plugin/migrate/source/NoSourceModule.php b/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/src/Plugin/migrate/source/NoSourceModule.php
deleted file mode 100644
index 0fc3063bb6..0000000000
--- a/core/modules/migrate_drupal_ui/tests/modules/migration_provider_test/src/Plugin/migrate/source/NoSourceModule.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace Drupal\migration_provider_test\Plugin\migrate\source;
-
-use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
-
-/**
- * A test source plugin without a source_module.
- *
- * @MigrateSource(
- *   id = "no_source_module",
- * )
- */
-class NoSourceModule extends DrupalSqlBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function query() {}
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fields() {}
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getIds() {}
-
-}
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
index 3ddd36149e..9741a0b7bb 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php
@@ -39,7 +39,6 @@
     'book',
     'forum',
     'statistics',
-    'migration_provider_test',
   ];
 
   /**
@@ -114,7 +113,7 @@ protected function tearDown() {
   public function testMigrateUpgrade() {
     $connection_options = $this->sourceDatabase->getConnectionOptions();
     $this->drupalGet('/upgrade');
-    $this->assertSession()->responseContains('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.');
+    $this->assertText('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.');
 
     $this->drupalPostForm(NULL, [], t('Continue'));
     $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.');
@@ -131,15 +130,10 @@ public function testMigrateUpgrade() {
     $version = $this->getLegacyDrupalVersion($this->sourceDatabase);
     $edit = [
       $driver => $connection_options,
+      'source_base_path' => $this->getSourceBasePath(),
       'source_private_file_path' => $this->getSourceBasePath(),
       'version' => $version,
     ];
-    if ($version == 6) {
-      $edit['d6_source_base_path'] = $this->getSourceBasePath();
-    }
-    else {
-      $edit['source_base_path'] = $this->getSourceBasePath();
-    }
     if (count($drivers) !== 1) {
       $edit['driver'] = $driver;
     }
@@ -153,31 +147,6 @@ public function testMigrateUpgrade() {
     $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
     $this->assertResponse(200);
     $this->assertText('Are you sure?');
-    // Ensure we get errors about missing modules.
-    $this->assertSession()->pageTextContains(t('Source module not found for migration_provider_no_annotation.'));
-    $this->assertSession()->pageTextContains(t('Source module not found for migration_provider_test.'));
-    $this->assertSession()->pageTextContains(t('Destination module not found for migration_provider_test'));
-
-    // Uninstall the module causing the missing module error messages.
-    $this->container->get('module_installer')->uninstall(['migration_provider_test'], TRUE);
-
-    // Restart the upgrade process.
-    $this->drupalGet('/upgrade');
-    $this->assertSession()->responseContains('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.');
-
-    $this->drupalPostForm(NULL, [], t('Continue'));
-    $this->assertSession()->pageTextContains('Provide credentials for the database of the Drupal site you want to upgrade.');
-    $this->assertSession()->fieldExists('mysql[host]');
-
-    $this->drupalPostForm(NULL, $edits, t('Review upgrade'));
-    $this->assertSession()->statusCodeEquals(200);
-    $this->assertSession()->pageTextContains('Are you sure?');
-    // Ensure there are no errors about the missing modules from the test module.
-    $this->assertSession()->pageTextNotContains(t('Source module not found for migration_provider_no_annotation.'));
-    $this->assertSession()->pageTextNotContains(t('Source module not found for migration_provider_test.'));
-    $this->assertSession()->pageTextNotContains(t('Destination module not found for migration_provider_test'));
-    // Ensure there are no errors about any other missing migration providers.
-    $this->assertSession()->pageTextNotContains(t('module not found'));
     $this->drupalPostForm(NULL, [], t('Perform upgrade'));
     $this->assertText(t('Congratulations, you upgraded Drupal!'));
 
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
index 993fdf493d..418addc899 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
@@ -39,19 +39,19 @@ protected function getEntityCounts() {
       'block' => 35,
       'block_content' => 2,
       'block_content_type' => 1,
-      'comment' => 6,
+      'comment' => 3,
       'comment_type' => 3,
       'contact_form' => 5,
       'configurable_language' => 5,
       'editor' => 2,
-      'field_config' => 72,
+      'field_config' => 73,
       'field_storage_config' => 48,
       'file' => 7,
       'filter_format' => 7,
       'image_style' => 5,
       'language_content_settings' => 2,
       'migration' => 105,
-      'node' => 17,
+      'node' => 16,
       'node_type' => 13,
       'rdf_mapping' => 7,
       'search_page' => 2,
@@ -59,7 +59,7 @@ protected function getEntityCounts() {
       'shortcut_set' => 1,
       'action' => 23,
       'menu' => 8,
-      'taxonomy_term' => 8,
+      'taxonomy_term' => 7,
       'taxonomy_vocabulary' => 7,
       'tour' => 4,
       'user' => 7,
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
index a3ebb50e53..248213ad45 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/MigrateUpgrade7Test.php
@@ -45,19 +45,19 @@ protected function getEntityCounts() {
       'block_content' => 1,
       'block_content_type' => 1,
       'comment' => 1,
-      'comment_type' => 7,
+      'comment_type' => 8,
       // Module 'language' comes with 'en', 'und', 'zxx'. Migration adds 'is'.
       'configurable_language' => 4,
       'contact_form' => 3,
       'editor' => 2,
-      'field_config' => 61,
-      'field_storage_config' => 44,
+      'field_config' => 53,
+      'field_storage_config' => 40,
       'file' => 3,
       'filter_format' => 7,
       'image_style' => 6,
       'language_content_settings' => 2,
       'migration' => 73,
-      'node' => 5,
+      'node' => 3,
       'node_type' => 6,
       'rdf_mapping' => 7,
       'search_page' => 2,
@@ -73,9 +73,9 @@ protected function getEntityCounts() {
       'menu_link_content' => 7,
       'view' => 16,
       'date_format' => 11,
-      'entity_form_display' => 17,
+      'entity_form_display' => 18,
       'entity_form_mode' => 1,
-      'entity_view_display' => 28,
+      'entity_view_display' => 29,
       'entity_view_mode' => 14,
       'base_field_override' => 9,
     ];
diff --git a/core/modules/migrate_drupal_ui/tests/src/Kernel/MigrationLabelExistTest.php b/core/modules/migrate_drupal_ui/tests/src/Kernel/MigrationLabelExistTest.php
deleted file mode 100644
index 148c9bee29..0000000000
--- a/core/modules/migrate_drupal_ui/tests/src/Kernel/MigrationLabelExistTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace Drupal\Tests\migrate_drupal_ui\Kernel;
-
-use Drupal\Component\Render\FormattableMarkup;
-use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
-use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
-
-/**
- * Tests that labels exist for all migrations.
- *
- * @group migrate_drupal_ui
- */
-class MigrationLabelExistTest extends MigrateDrupalTestBase {
-
-  use FileSystemModuleDiscoveryDataProviderTrait;
-
-  /**
-   * Tests that labels exist for all migrations.
-   */
-  public function testLabelExist() {
-    // Install all available modules.
-    $module_handler = $this->container->get('module_handler');
-    $modules = $this->coreModuleListDataProvider();
-    $modules_enabled = $module_handler->getModuleList();
-    $modules_to_enable = array_keys(array_diff_key($modules, $modules_enabled));
-    $this->enableModules($modules_to_enable);
-
-    /** @var \Drupal\migrate\Plugin\MigrationPluginManager $plugin_manager */
-    $plugin_manager = $this->container->get('plugin.manager.migration');
-    // Get all the migrations
-    $migrations = $plugin_manager->createInstances(array_keys($plugin_manager->getDefinitions()));
-    /** @var \Drupal\migrate\Plugin\Migration $migration */
-    foreach ($migrations as $migration) {
-      $migration_id = $migration->getPluginId();
-      $this->assertNotEmpty($migration->label(), new FormattableMarkup('Label found for @migration_id.', ['@migration_id' => $migration_id]));
-    }
-  }
-
-}
diff --git a/core/modules/node/config/optional/views.view.frontpage.yml b/core/modules/node/config/optional/views.view.frontpage.yml
index 8decfdfd16..d05e291987 100644
--- a/core/modules/node/config/optional/views.view.frontpage.yml
+++ b/core/modules/node/config/optional/views.view.frontpage.yml
@@ -28,7 +28,7 @@ display:
       empty:
         area_text_custom:
           admin_label: ''
-          content: 'No front page content has been created yet.<br/>Follow the <a href="https://www.drupal.org/docs/user_guide/en/index.html">User Guide</a> to start building your site.'
+          content: 'No front page content has been created yet.'
           empty: true
           field: area_text_custom
           group_type: group
diff --git a/core/modules/node/migration_templates/d6_node_settings.yml b/core/modules/node/migration_templates/d6_node_settings.yml
index 98b09fbc4b..17b08573f5 100644
--- a/core/modules/node/migration_templates/d6_node_settings.yml
+++ b/core/modules/node/migration_templates/d6_node_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - node_admin_theme
-  source_module: node
 process:
   use_admin_theme: node_admin_theme
 destination:
diff --git a/core/modules/node/migration_templates/d6_node_translation.yml b/core/modules/node/migration_templates/d6_node_translation.yml
index 4bf36da736..3eb06e8a7d 100644
--- a/core/modules/node/migration_templates/d6_node_translation.yml
+++ b/core/modules/node/migration_templates/d6_node_translation.yml
@@ -6,7 +6,6 @@ deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
 source:
   plugin: d6_node
   translations: true
-  source_module: translation
 process:
   # If you are using this file to build a custom migration consider removing
   # the nid field to allow incremental migrations.
@@ -42,7 +41,6 @@ process:
 destination:
   plugin: entity:node
   translations: true
-  destination_module: content_translation
 migration_dependencies:
   required:
     - d6_user
@@ -54,3 +52,4 @@ migration_dependencies:
     - d6_field_instance_widget_settings
     - d6_field_formatter_settings
     - d6_upload_field_instance
+provider: migrate_drupal
diff --git a/core/modules/node/migration_templates/d7_node.yml b/core/modules/node/migration_templates/d7_node.yml
index 359be81cc4..5de3055882 100644
--- a/core/modules/node/migration_templates/d7_node.yml
+++ b/core/modules/node/migration_templates/d7_node.yml
@@ -35,4 +35,3 @@ migration_dependencies:
     - d7_node_type
   optional:
     - d7_field_instance
-    - d7_comment_field_instance
diff --git a/core/modules/node/migration_templates/d7_node_settings.yml b/core/modules/node/migration_templates/d7_node_settings.yml
index 46eec7c035..04617544c9 100644
--- a/core/modules/node/migration_templates/d7_node_settings.yml
+++ b/core/modules/node/migration_templates/d7_node_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - node_admin_theme
-  source_module: node
 process:
   use_admin_theme: node_admin_theme
 destination:
diff --git a/core/modules/node/migration_templates/d7_node_translation.yml b/core/modules/node/migration_templates/d7_node_translation.yml
index 856f34505e..11dfbb792a 100644
--- a/core/modules/node/migration_templates/d7_node_translation.yml
+++ b/core/modules/node/migration_templates/d7_node_translation.yml
@@ -7,7 +7,6 @@ deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
 source:
   plugin: d7_node
   translations: true
-  source_module: translation
 process:
   # If you are using this file to build a custom migration consider removing
   # the nid field to allow incremental migrations.
@@ -33,7 +32,6 @@ destination:
   translations: true
   content_translation_update_definitions:
     - node
-  destination_module: content_translation
 migration_dependencies:
   required:
     - d7_user
@@ -41,3 +39,4 @@ migration_dependencies:
     - language
   optional:
     - d7_field_instance
+provider: migrate_drupal
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index dd151a4a96..604187406b 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -320,7 +320,7 @@ function hook_node_grants_alter(&$grants, \Drupal\Core\Session\AccountInterface
  *   The user object to perform the access check operation on.
  *
  * @return \Drupal\Core\Access\AccessResultInterface
- *   The access result.
+ *    The access result.
  *
  * @ingroup node_access
  */
diff --git a/core/modules/node/src/Entity/NodeRouteProvider.php b/core/modules/node/src/Entity/NodeRouteProvider.php
index 6ac3ae1c21..0803f1ef14 100644
--- a/core/modules/node/src/Entity/NodeRouteProvider.php
+++ b/core/modules/node/src/Entity/NodeRouteProvider.php
@@ -15,7 +15,7 @@ class NodeRouteProvider implements EntityRouteProviderInterface {
   /**
    * {@inheritdoc}
    */
-  public function getRoutes(EntityTypeInterface $entity_type) {
+  public function getRoutes( EntityTypeInterface $entity_type) {
     $route_collection = new RouteCollection();
     $route = (new Route('/node/{node}'))
       ->addDefaults([
diff --git a/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php b/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php
deleted file mode 100644
index 795670fc15..0000000000
--- a/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-namespace Drupal\node\EventSubscriber;
-
-use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\Core\ParamConverter\ParamNotConvertedException;
-use Drupal\Core\Routing\UrlGeneratorInterface;
-use Drupal\Core\State\StateInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\HttpFoundation\RedirectResponse;
-use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
-use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-use Symfony\Component\HttpKernel\KernelEvents;
-
-/**
- * Redirect node translations that have been consolidated by migration.
- *
- * If we migrated node translations from Drupal 6 or 7, these nodes are now
- * combined with their source language node. Since there still might be
- * references to the URLs of these now consolidated nodes, this service catches
- * the 404s and try to redirect them to the right node in the right language.
- *
- * The mapping of the old nids to the new ones is made by the
- * NodeTranslationMigrateSubscriber class during the migration and is stored
- * in the "node_translation_redirect" key/value collection.
- *
- * @see \Drupal\node\NodeServiceProvider
- * @see \Drupal\node\EventSubscriber\NodeTranslationMigrateSubscriber
- */
-class NodeTranslationExceptionSubscriber implements EventSubscriberInterface {
-
-  /**
-   * The key value factory.
-   *
-   * @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
-   */
-  protected $keyValue;
-
-  /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected $languageManager;
-
-  /**
-   * The URL generator.
-   *
-   * @var \Drupal\Core\Routing\UrlGeneratorInterface
-   */
-  protected $urlGenerator;
-
-  /**
-   * The state service.
-   *
-   * @var \Drupal\Core\State\StateInterface
-   */
-  protected $state;
-
-  /**
-   * Constructs the NodeTranslationExceptionSubscriber.
-   *
-   * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value
-   *   The key value factory.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
-   * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
-   *   The URL generator.
-   * @param \Drupal\Core\State\StateInterface $state
-   *   The state service.
-   */
-  public function __construct(KeyValueFactoryInterface $key_value, LanguageManagerInterface $language_manager, UrlGeneratorInterface $url_generator, StateInterface $state) {
-    $this->keyValue = $key_value;
-    $this->languageManager = $language_manager;
-    $this->urlGenerator = $url_generator;
-    $this->state = $state;
-  }
-
-  /**
-   * Redirects not found node translations using the key value collection.
-   *
-   * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
-   *   The exception event.
-   */
-  public function onException(GetResponseForExceptionEvent $event) {
-    $exception = $event->getException();
-
-    // If this is not a 404, we don't need to check for a redirection.
-    if (!($exception instanceof NotFoundHttpException)) {
-      return;
-    }
-
-    $previous_exception = $exception->getPrevious();
-    if ($previous_exception instanceof ParamNotConvertedException) {
-      $route_name = $previous_exception->getRouteName();
-      $parameters = $previous_exception->getRawParameters();
-      if ($route_name === 'entity.node.canonical' && isset($parameters['node'])) {
-        // If the node_translation_redirect state is not set, we don't need to check
-        // for a redirection.
-        if (!$this->state->get('node_translation_redirect')) {
-          return;
-        }
-        $old_nid = $parameters['node'];
-        $collection = $this->keyValue->get('node_translation_redirect');
-        if ($old_nid && $value = $collection->get($old_nid)) {
-          list($nid, $langcode) = $value;
-          $language = $this->languageManager->getLanguage($langcode);
-          $url = $this->urlGenerator->generateFromRoute('entity.node.canonical', ['node' => $nid], ['language' => $language]);
-          $response = new RedirectResponse($url, 301);
-          $event->setResponse($response);
-        }
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events = [];
-
-    $events[KernelEvents::EXCEPTION] = ['onException'];
-
-    return $events;
-  }
-
-}
diff --git a/core/modules/node/src/EventSubscriber/NodeTranslationMigrateSubscriber.php b/core/modules/node/src/EventSubscriber/NodeTranslationMigrateSubscriber.php
deleted file mode 100644
index 5911f0e05f..0000000000
--- a/core/modules/node/src/EventSubscriber/NodeTranslationMigrateSubscriber.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-namespace Drupal\node\EventSubscriber;
-
-use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
-use Drupal\Core\State\StateInterface;
-use Drupal\migrate\Event\EventBase;
-use Drupal\migrate\Event\MigrateEvents;
-use Drupal\migrate\Event\MigrateImportEvent;
-use Drupal\migrate\Event\MigratePostRowSaveEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Creates a key value collection for migrated node translation redirections.
- *
- * If we are migrating node translations from Drupal 6 or 7, these nodes will be
- * combined with their source node. Since there still might be references to the
- * URLs of these now consolidated nodes, this service saves the mapping between
- * the old nids to the new ones to be able to redirect them to the right node in
- * the right language.
- *
- * The mapping is stored in the "node_translation_redirect" key/value collection
- * and the redirection is made by the NodeTranslationExceptionSubscriber class.
- *
- * @see \Drupal\node\NodeServiceProvider
- * @see \Drupal\node\EventSubscriber\NodeTranslationExceptionSubscriber
- */
-class NodeTranslationMigrateSubscriber implements EventSubscriberInterface {
-
-  /**
-   * The key value factory.
-   *
-   * @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
-   */
-  protected $keyValue;
-
-  /**
-   * The state service.
-   *
-   * @var \Drupal\Core\State\StateInterface
-   */
-  protected $state;
-
-  /**
-   * Constructs the NodeTranslationMigrateSubscriber.
-   *
-   * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value
-   *   The key value factory.
-   * @param \Drupal\Core\State\StateInterface $state
-   *   The state service.
-   */
-  public function __construct(KeyValueFactoryInterface $key_value, StateInterface $state) {
-    $this->keyValue = $key_value;
-    $this->state = $state;
-  }
-
-  /**
-   * Helper method to check if we are migrating translated nodes.
-   *
-   * @param \Drupal\migrate\Event\EventBase $event
-   *   The migrate event.
-   *
-   * @return bool
-   *   True if we are migrating translated nodes, false otherwise.
-   */
-  protected function isNodeTranslationsMigration(EventBase $event) {
-    $migration = $event->getMigration();
-    $source_configuration = $migration->getSourceConfiguration();
-    $destination_configuration = $migration->getDestinationConfiguration();
-    return !empty($source_configuration['translations']) && $destination_configuration['plugin'] === 'entity:node';
-  }
-
-  /**
-   * Maps the old nid to the new one in the key value collection.
-   *
-   * @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event
-   *   The migrate post row save event.
-   */
-  public function onPostRowSave(MigratePostRowSaveEvent $event) {
-    if ($this->isNodeTranslationsMigration($event)) {
-      $row = $event->getRow();
-      $source = $row->getSource();
-      $destination = $row->getDestination();
-      $collection = $this->keyValue->get('node_translation_redirect');
-      $collection->set($source['nid'], [$destination['nid'], $destination['langcode']]);
-    }
-  }
-
-  /**
-   * Set the node_translation_redirect state to enable the redirections.
-   *
-   * @param \Drupal\migrate\Event\MigrateImportEvent $event
-   *   The migrate import event.
-   */
-  public function onPostImport(MigrateImportEvent $event) {
-    if ($this->isNodeTranslationsMigration($event)) {
-      $this->state->set('node_translation_redirect', TRUE);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events = [];
-
-    $events[MigrateEvents::POST_ROW_SAVE] = ['onPostRowSave'];
-    $events[MigrateEvents::POST_IMPORT] = ['onPostImport'];
-
-    return $events;
-  }
-
-}
diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 552e3fb6ba..4c9bbac7b6 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -142,6 +142,13 @@ public function form(array $form, FormStateInterface $form_state) {
       '#wrapper_attributes' => ['class' => ['entity-meta__author']],
     ];
 
+    $form['footer'] = [
+      '#type' => 'container',
+      '#weight' => 99,
+      '#attributes' => [
+        'class' => ['node-form-footer']
+      ]
+    ];
     $form['status']['#group'] = 'footer';
 
     // Node author information for administrators.
diff --git a/core/modules/node/src/NodeGrantDatabaseStorageInterface.php b/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
index 329d9a1049..235fbc06be 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
@@ -31,11 +31,11 @@ public function checkAll(AccountInterface $account);
    * @param array $tables
    *   A list of tables that need to be part of the alter.
    * @param string $op
-   *   The operation to be performed on the node. Possible values are:
-   *   - "view"
-   *   - "update"
-   *   - "delete"
-   *   - "create"
+   *    The operation to be performed on the node. Possible values are:
+   *    - "view"
+   *    - "update"
+   *    - "delete"
+   *    - "create"
    * @param \Drupal\Core\Session\AccountInterface $account
    *   A user object representing the user for whom the operation is to be
    *   performed.
diff --git a/core/modules/node/src/NodeListBuilder.php b/core/modules/node/src/NodeListBuilder.php
index eac48fda31..4dbdf27bf2 100644
--- a/core/modules/node/src/NodeListBuilder.php
+++ b/core/modules/node/src/NodeListBuilder.php
@@ -25,6 +25,13 @@ class NodeListBuilder extends EntityListBuilder {
    */
   protected $dateFormatter;
 
+  /**
+   * The redirect destination service.
+   *
+   * @var \Drupal\Core\Routing\RedirectDestinationInterface
+   */
+  protected $redirectDestination;
+
   /**
    * Constructs a new NodeListBuilder object.
    *
@@ -121,4 +128,17 @@ public function buildRow(EntityInterface $entity) {
     return $row + parent::buildRow($entity);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function getDefaultOperations(EntityInterface $entity) {
+    $operations = parent::getDefaultOperations($entity);
+
+    $destination = $this->redirectDestination->getAsArray();
+    foreach ($operations as $key => $operation) {
+      $operations[$key]['query'] = $destination;
+    }
+    return $operations;
+  }
+
 }
diff --git a/core/modules/node/src/NodeServiceProvider.php b/core/modules/node/src/NodeServiceProvider.php
deleted file mode 100644
index 8d2581722a..0000000000
--- a/core/modules/node/src/NodeServiceProvider.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-namespace Drupal\node;
-
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\DependencyInjection\ServiceProviderInterface;
-use Drupal\node\EventSubscriber\NodeTranslationExceptionSubscriber;
-use Drupal\node\EventSubscriber\NodeTranslationMigrateSubscriber;
-use Symfony\Component\DependencyInjection\Reference;
-
-/**
- * Registers services in the container.
- */
-class NodeServiceProvider implements ServiceProviderInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function register(ContainerBuilder $container) {
-    // Register the node.node_translation_migrate service in the container if
-    // the migrate and language modules are enabled.
-    $modules = $container->getParameter('container.modules');
-    if (isset($modules['migrate']) && isset($modules['language'])) {
-      $container->register('node.node_translation_migrate', NodeTranslationMigrateSubscriber::class)
-        ->addTag('event_subscriber')
-        ->addArgument(new Reference('keyvalue'))
-        ->addArgument(new Reference('state'));
-    }
-
-    // Register the node.node_translation_exception service in the container if
-    // the language module is enabled.
-    if (isset($modules['language'])) {
-      $container->register('node.node_translation_exception', NodeTranslationExceptionSubscriber::class)
-        ->addTag('event_subscriber')
-        ->addArgument(new Reference('keyvalue'))
-        ->addArgument(new Reference('language_manager'))
-        ->addArgument(new Reference('url_generator'))
-        ->addArgument(new Reference('state'));
-    }
-  }
-
-}
diff --git a/core/modules/node/src/NodeViewBuilder.php b/core/modules/node/src/NodeViewBuilder.php
index f0971fb3bb..f96302bef3 100644
--- a/core/modules/node/src/NodeViewBuilder.php
+++ b/core/modules/node/src/NodeViewBuilder.php
@@ -29,14 +29,12 @@ public function buildComponents(array &$build, array $entities, array $displays,
 
       if ($display->getComponent('links')) {
         $build[$id]['links'] = [
-          '#lazy_builder' => [
-            get_called_class() . '::renderLinks', [
-              $entity->id(),
-              $view_mode,
-              $entity->language()->getId(),
-              !empty($entity->in_preview),
-            ],
-          ],
+          '#lazy_builder' => [get_called_class() . '::renderLinks', [
+            $entity->id(),
+            $view_mode,
+            $entity->language()->getId(),
+            !empty($entity->in_preview),
+          ]],
         ];
       }
 
diff --git a/core/modules/node/src/NodeViewsData.php b/core/modules/node/src/NodeViewsData.php
index a122203d6f..b5aebf48fa 100644
--- a/core/modules/node/src/NodeViewsData.php
+++ b/core/modules/node/src/NodeViewsData.php
@@ -58,6 +58,14 @@ public function getViewsData() {
     $data['node_field_data']['sticky']['filter']['type'] = 'yes-no';
     $data['node_field_data']['sticky']['sort']['help'] = $this->t('Whether or not the content is sticky. To list sticky content first, set this to descending.');
 
+    $data['node']['path'] = [
+      'field' => [
+        'title' => $this->t('Path'),
+        'help' => $this->t('The aliased path to this content.'),
+        'id' => 'node_path',
+      ],
+    ];
+
     $data['node']['node_bulk_form'] = [
       'title' => $this->t('Node operations bulk form'),
       'help' => $this->t('Add a form element that lets you run operations on multiple nodes.'),
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index c200f34b61..6d7c8eb7d4 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -117,7 +117,7 @@ class NodeSearch extends ConfigurableSearchPluginBase implements AccessibleInter
   /**
    * {@inheritdoc}
    */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+  static public function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static(
       $configuration,
       $plugin_id,
diff --git a/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php b/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
index 28c61b8340..da01c706b3 100644
--- a/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
+++ b/core/modules/node/src/Plugin/migrate/D7NodeDeriver.php
@@ -141,16 +141,6 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         $values['source']['node_type'] = $node_type;
         $values['destination']['default_bundle'] = $node_type;
 
-        // Comment status must be mapped to correct comment type.
-        // Comment type migration creates a separate comment type for each
-        // node type except for Forum which uses 'comment_forum'.
-        $comment_type = 'comment_node_' . $node_type;
-        if ($node_type == 'forum') {
-          $comment_type = 'comment_forum';
-        }
-        $nested_key = $comment_type . '/0/status';
-        $values['process'][$nested_key] = 'comment';
-
         // If this migration is based on the d7_node_revision migration or
         // is for translations of nodes, it should explicitly depend on the
         // corresponding d7_node variant.
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
index d20545f2e2..ffa26595f1 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
@@ -15,9 +15,7 @@
  * Drupal 6 node source from database.
  *
  * @MigrateSource(
- *   id = "d6_node",
- *   source_module = "node"
- *
+ *   id = "d6_node"
  * )
  */
 class Node extends DrupalSqlBase {
@@ -178,24 +176,24 @@ public function prepareRow(Row $row) {
   }
 
   /**
-   * Gets field values for a node.
+   * Gets CCK field values for a node.
    *
    * @param \Drupal\migrate\Row $node
    *   The node.
    *
    * @return array
-   *   Field values, keyed by field name.
+   *   CCK field values, keyed by field name.
    */
   protected function getFieldValues(Row $node) {
     $values = [];
     foreach ($this->getFieldInfo($node->getSourceProperty('type')) as $field => $info) {
-      $values[$field] = $this->getFieldData($info, $node);
+      $values[$field] = $this->getCckData($info, $node);
     }
     return $values;
   }
 
   /**
-   * Gets field and instance definitions from the database.
+   * Gets CCK field and instance definitions from the database.
    *
    * @param string $node_type
    *   The node type for which to get field info.
@@ -207,14 +205,14 @@ protected function getFieldInfo($node_type) {
     if (!isset($this->fieldInfo)) {
       $this->fieldInfo = [];
 
-      // Query the database directly for all field info.
+      // Query the database directly for all CCK field info.
       $query = $this->select('content_node_field_instance', 'cnfi');
       $query->join('content_node_field', 'cnf', 'cnf.field_name = cnfi.field_name');
       $query->fields('cnfi');
       $query->fields('cnf');
 
       foreach ($query->execute() as $field) {
-        $this->fieldInfo[$field['type_name']][$field['field_name']] = $field;
+        $this->fieldInfo[ $field['type_name'] ][ $field['field_name'] ] = $field;
       }
 
       foreach ($this->fieldInfo as $type => $fields) {
@@ -232,7 +230,7 @@ protected function getFieldInfo($node_type) {
   }
 
   /**
-   * Retrieves raw field data for a node.
+   * Retrieves raw CCK field data for a node.
    *
    * @param array $field
    *   A field and instance definition from getFieldInfo().
@@ -242,7 +240,7 @@ protected function getFieldInfo($node_type) {
    * @return array
    *   The field values, keyed by delta.
    */
-  protected function getFieldData(array $field, Row $node) {
+  protected function getCckData(array $field, Row $node) {
     $field_table = 'content_' . $field['field_name'];
     $node_table = 'content_type_' . $node->getSourceProperty('type');
 
@@ -278,9 +276,10 @@ protected function getFieldData(array $field, Row $node) {
 
       return $query
         // This call to isNotNull() is a kludge which relies on the convention
-        // that field schemas usually define their most important column first.
-        // A better way would be to allow field plugins to alter the query
-        // directly before it's run, but this will do for the time being.
+        // that CCK field schemas usually define their most important
+        // column first. A better way would be to allow cckfield plugins to
+        // alter the query directly before it's run, but this will do for
+        // the time being.
         ->isNotNull($field['field_name'] . '_' . $columns[0])
         ->condition('nid', $node->getSourceProperty('nid'))
         ->condition('vid', $node->getSourceProperty('vid'))
@@ -292,24 +291,6 @@ protected function getFieldData(array $field, Row $node) {
     }
   }
 
-  /**
-   * Retrieves raw field data for a node.
-   *
-   * @deprecated in Drupal 8.2.x, to be removed in Drupal 9.0.x. Use
-   *   getFieldData() instead.
-   *
-   * @param array $field
-   *   A field and instance definition from getFieldInfo().
-   * @param \Drupal\migrate\Row $node
-   *   The node.
-   *
-   * @return array
-   *   The field values, keyed by delta.
-   */
-  protected function getCckData(array $field, Row $node) {
-    return $this->getFieldData($field, $node);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
index a0103fc00f..f3296c234d 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
@@ -7,8 +7,7 @@
  * Drupal 6 node revision source from database.
  *
  * @MigrateSource(
- *   id = "d6_node_revision",
- *   source_module = "node"
+ *   id = "d6_node_revision"
  * )
  */
 class NodeRevision extends Node {
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
index 5ec0aaeca4..b5a66ce7e2 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
@@ -9,8 +9,7 @@
  * Drupal 6 Node types source from database.
  *
  * @MigrateSource(
- *   id = "d6_node_type",
- *   source_module = "node"
+ *   id = "d6_node_type"
  * )
  */
 class NodeType extends DrupalSqlBase {
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/ViewMode.php b/core/modules/node/src/Plugin/migrate/source/d6/ViewMode.php
index 434007a0a2..b5a6d4d982 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/ViewMode.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/ViewMode.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d6_view_mode",
- *   source_module = "content"
+ *   source_provider = "content"
  * )
  */
 class ViewMode extends ViewModeBase {
diff --git a/core/modules/node/src/Plugin/migrate/source/d7/Node.php b/core/modules/node/src/Plugin/migrate/source/d7/Node.php
index 1a9037e7a0..451905cd96 100644
--- a/core/modules/node/src/Plugin/migrate/source/d7/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d7/Node.php
@@ -17,7 +17,7 @@
  *
  * @MigrateSource(
  *   id = "d7_node",
- *   source_module = "node"
+ *   source_provider = "node"
  * )
  */
 class Node extends FieldableEntity {
diff --git a/core/modules/node/src/Plugin/migrate/source/d7/NodeRevision.php b/core/modules/node/src/Plugin/migrate/source/d7/NodeRevision.php
index 67071a72fc..89c1bcca5e 100644
--- a/core/modules/node/src/Plugin/migrate/source/d7/NodeRevision.php
+++ b/core/modules/node/src/Plugin/migrate/source/d7/NodeRevision.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d7_node_revision",
- *   source_module = "node"
+ *   source_provider = "node"
  * )
  */
 class NodeRevision extends Node {
diff --git a/core/modules/node/src/Plugin/migrate/source/d7/NodeType.php b/core/modules/node/src/Plugin/migrate/source/d7/NodeType.php
index 7f8290f245..a0b2273b80 100644
--- a/core/modules/node/src/Plugin/migrate/source/d7/NodeType.php
+++ b/core/modules/node/src/Plugin/migrate/source/d7/NodeType.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d7_node_type",
- *   source_module = "node"
+ *   source_provider = "node"
  * )
  */
 class NodeType extends DrupalSqlBase {
diff --git a/core/modules/node/src/Plugin/views/argument/Type.php b/core/modules/node/src/Plugin/views/argument/Type.php
index 1a78c2faf0..760397ab37 100644
--- a/core/modules/node/src/Plugin/views/argument/Type.php
+++ b/core/modules/node/src/Plugin/views/argument/Type.php
@@ -29,7 +29,7 @@ class Type extends StringArgument {
    *   The plugin_id for the plugin instance.
    * @param mixed $plugin_definition
    *   The plugin implementation definition.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $node_type_storage
+   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
    *   The entity storage class.
    */
   public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $node_type_storage) {
diff --git a/core/modules/node/src/Plugin/views/field/Path.php b/core/modules/node/src/Plugin/views/field/Path.php
index 5e55a4aa78..c1c74ab658 100644
--- a/core/modules/node/src/Plugin/views/field/Path.php
+++ b/core/modules/node/src/Plugin/views/field/Path.php
@@ -1,7 +1,6 @@
 <?php
 
 namespace Drupal\node\Plugin\views\field;
-@trigger_error('Drupal\node\Plugin\views\field\Path is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use @ViewsField("entity_link") with \'output_url_as_text\' set.', E_USER_DEPRECATED);
 
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\Plugin\views\field\FieldPluginBase;
@@ -15,9 +14,6 @@
  * @ingroup views_field_handlers
  *
  * @ViewsField("node_path")
- *
- * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0.
- *  Use @ViewsField("entity_link") with 'output_url_as_text' set.
  */
 class Path extends FieldPluginBase {
 
diff --git a/core/modules/node/src/Plugin/views/filter/Access.php b/core/modules/node/src/Plugin/views/filter/Access.php
index 71e8e95e5a..10ae9227ae 100644
--- a/core/modules/node/src/Plugin/views/filter/Access.php
+++ b/core/modules/node/src/Plugin/views/filter/Access.php
@@ -15,8 +15,8 @@
  */
 class Access extends FilterPluginBase {
 
-  public function adminSummary() {}
-  protected function operatorForm(&$form, FormStateInterface $form_state) {}
+  public function adminSummary() { }
+  protected function operatorForm(&$form, FormStateInterface $form_state) { }
   public function canExpose() {
     return FALSE;
   }
diff --git a/core/modules/node/src/Plugin/views/filter/Status.php b/core/modules/node/src/Plugin/views/filter/Status.php
index bd1fcd309b..194df7a835 100644
--- a/core/modules/node/src/Plugin/views/filter/Status.php
+++ b/core/modules/node/src/Plugin/views/filter/Status.php
@@ -14,13 +14,11 @@
  */
 class Status extends FilterPluginBase {
 
-  public function adminSummary() {}
+  public function adminSummary() { }
 
-  protected function operatorForm(&$form, FormStateInterface $form_state) {}
+  protected function operatorForm(&$form, FormStateInterface $form_state) { }
 
-  public function canExpose() {
-    return FALSE;
-  }
+  public function canExpose() { return FALSE; }
 
   public function query() {
     $table = $this->ensureMyTable();
diff --git a/core/modules/node/src/Plugin/views/wizard/Node.php b/core/modules/node/src/Plugin/views/wizard/Node.php
index 1be211fef5..34d4bcf6c5 100644
--- a/core/modules/node/src/Plugin/views/wizard/Node.php
+++ b/core/modules/node/src/Plugin/views/wizard/Node.php
@@ -25,6 +25,20 @@ class Node extends WizardPluginBase {
    */
   protected $createdColumn = 'node_field_data-created';
 
+  /**
+   * Set default values for the filters.
+   */
+  protected $filters = [
+    'status' => [
+      'value' => TRUE,
+      'table' => 'node_field_data',
+      'field' => 'status',
+      'plugin_id' => 'boolean',
+      'entity_type' => 'node',
+      'entity_field' => 'status',
+    ]
+  ];
+
   /**
    * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::getAvailableSorts().
    *
diff --git a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
index 258d6d3237..9c3465d2ba 100644
--- a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
+++ b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php
@@ -24,6 +24,20 @@ class NodeRevision extends WizardPluginBase {
    */
   protected $createdColumn = 'changed';
 
+  /**
+   * Set default values for the filters.
+   */
+  protected $filters = [
+    'status' => [
+      'value' => TRUE,
+      'table' => 'node_field_revision',
+      'field' => 'status',
+      'plugin_id' => 'boolean',
+      'entity_type' => 'node',
+      'entity_field' => 'status',
+    ]
+  ];
+
   /**
    * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::rowStyleOptions().
    *
diff --git a/core/modules/node/src/Tests/NodeRevisionsTest.php b/core/modules/node/src/Tests/NodeRevisionsTest.php
index e9fcece934..198226616d 100644
--- a/core/modules/node/src/Tests/NodeRevisionsTest.php
+++ b/core/modules/node/src/Tests/NodeRevisionsTest.php
@@ -168,11 +168,9 @@ public function testRevisions() {
 
     // Confirm that revisions revert properly.
     $this->drupalPostForm("node/" . $node->id() . "/revisions/" . $nodes[1]->getRevisionid() . "/revert", [], t('Revert'));
-    $this->assertRaw(t('@type %title has been reverted to the revision from %revision-date.', [
-      '@type' => 'Basic page',
-      '%title' => $nodes[1]->label(),
-      '%revision-date' => format_date($nodes[1]->getRevisionCreationTime())
-    ]), 'Revision reverted.');
+    $this->assertRaw(t('@type %title has been reverted to the revision from %revision-date.',
+                        ['@type' => 'Basic page', '%title' => $nodes[1]->label(),
+                              '%revision-date' => format_date($nodes[1]->getRevisionCreationTime())]), 'Revision reverted.');
     $node_storage->resetCache([$node->id()]);
     $reverted_node = $node_storage->load($node->id());
     $this->assertTrue(($nodes[1]->body->value == $reverted_node->body->value), 'Node reverted correctly.');
@@ -193,11 +191,9 @@ public function testRevisions() {
 
     // Confirm revisions delete properly.
     $this->drupalPostForm("node/" . $node->id() . "/revisions/" . $nodes[1]->getRevisionId() . "/delete", [], t('Delete'));
-    $this->assertRaw(t('Revision from %revision-date of @type %title has been deleted.', [
-      '%revision-date' => format_date($nodes[1]->getRevisionCreationTime()),
-      '@type' => 'Basic page',
-      '%title' => $nodes[1]->label(),
-    ]), 'Revision deleted.');
+    $this->assertRaw(t('Revision from %revision-date of @type %title has been deleted.',
+                        ['%revision-date' => format_date($nodes[1]->getRevisionCreationTime()),
+                              '@type' => 'Basic page', '%title' => $nodes[1]->label()]), 'Revision deleted.');
     $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_revision} WHERE nid = :nid and vid = :vid', [':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()])->fetchField() == 0, 'Revision not found.');
     $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_field_revision} WHERE nid = :nid and vid = :vid', [':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()])->fetchField() == 0, 'Field revision not found.');
 
diff --git a/core/modules/node/tests/src/Functional/Update/NodeUpdateTest.php b/core/modules/node/src/Tests/Update/NodeUpdateTest.php
similarity index 90%
rename from core/modules/node/tests/src/Functional/Update/NodeUpdateTest.php
rename to core/modules/node/src/Tests/Update/NodeUpdateTest.php
index 223676b31e..b193ea8d21 100644
--- a/core/modules/node/tests/src/Functional/Update/NodeUpdateTest.php
+++ b/core/modules/node/src/Tests/Update/NodeUpdateTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\node\Functional\Update;
+namespace Drupal\node\Tests\Update;
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that node settings are properly updated during database updates.
@@ -17,7 +17,7 @@ class NodeUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/node/tests/modules/node_test/node_test.module b/core/modules/node/tests/modules/node_test/node_test.module
index 3532c37300..c852b44110 100644
--- a/core/modules/node/tests/modules/node_test/node_test.module
+++ b/core/modules/node/tests/modules/node_test/node_test.module
@@ -156,7 +156,7 @@ function node_test_node_update(NodeInterface $node) {
  */
 function node_test_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context) {
   // Only alter the view mode if we are on the test callback.
-  $change_view_mode = \Drupal::state()->get('node_test_change_view_mode') ?: '';
+  $change_view_mode = \Drupal::state()->get( 'node_test_change_view_mode') ?: '';
   if ($change_view_mode) {
     $view_mode = $change_view_mode;
   }
diff --git a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
index d9e4e8b092..5b99ccf68e 100644
--- a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
+++ b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
@@ -114,7 +114,7 @@ public function testNodeAccessBasic() {
 
         $this->drupalPostForm('node/add/article', $edit, t('Save'));
         $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
-        $this->assertEqual($is_private, (int) $node->private->value, 'The private status of the node was properly set in the node_access_test table.');
+        $this->assertEqual($is_private, (int)$node->private->value, 'The private status of the node was properly set in the node_access_test table.');
         if ($is_private) {
           $private_nodes[] = $node->id();
         }
diff --git a/core/modules/node/tests/src/Functional/NodeActionsConfigurationTest.php b/core/modules/node/tests/src/Functional/NodeActionsConfigurationTest.php
index c2c7617bf6..fbfda8f169 100644
--- a/core/modules/node/tests/src/Functional/NodeActionsConfigurationTest.php
+++ b/core/modules/node/tests/src/Functional/NodeActionsConfigurationTest.php
@@ -43,14 +43,14 @@ public function testAssignOwnerNodeActionConfiguration() {
     $this->drupalPostForm('admin/config/system/actions/add/' . Crypt::hashBase64('node_assign_owner_action'), $edit, t('Save'));
     $this->assertResponse(200);
 
-    $action_id = $edit['id'];
-
     // Make sure that the new action was saved properly.
     $this->assertText(t('The action has been successfully saved.'), 'The node_assign_owner_action action has been successfully saved.');
     $this->assertText($action_label, 'The label of the node_assign_owner_action action appears on the actions administration page after saving.');
 
     // Make another POST request to the action edit page.
     $this->clickLink(t('Configure'));
+    preg_match('|admin/config/system/actions/configure/(.+)|', $this->getUrl(), $matches);
+    $aid = $matches[1];
     $edit = [];
     $new_action_label = $this->randomMachineName();
     $edit['label'] = $new_action_label;
@@ -68,7 +68,7 @@ public function testAssignOwnerNodeActionConfiguration() {
     $this->clickLink(t('Delete'));
     $this->assertResponse(200);
     $edit = [];
-    $this->drupalPostForm(NULL, $edit, t('Delete'));
+    $this->drupalPostForm("admin/config/system/actions/configure/$aid/delete", $edit, t('Delete'));
     $this->assertResponse(200);
 
     // Make sure that the action was actually deleted.
@@ -77,7 +77,7 @@ public function testAssignOwnerNodeActionConfiguration() {
     $this->assertResponse(200);
     $this->assertNoText($new_action_label, 'The label for the node_assign_owner_action action does not appear on the actions administration page after deleting.');
 
-    $action = Action::load($action_id);
+    $action = Action::load($aid);
     $this->assertFalse($action, 'The node_assign_owner_action action is not available after being deleted.');
   }
 
diff --git a/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php b/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
index 194b9b06ce..04948c545a 100644
--- a/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
+++ b/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
@@ -67,9 +67,9 @@ public function testNodeEditAccess() {
     // Create a private node (author may view, edit and delete, others may not).
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'private' => [
-        ['value' => TRUE],
-      ],
+      'private' => [[
+        'value' => TRUE,
+      ]],
       'uid' => $author->id(),
     ]);
     // Create an account that may view the private node, but not edit it.
@@ -134,9 +134,9 @@ public function testNodeDeleteAccess() {
     // Create a private node (author may view, edit and delete, others may not).
     $private_node = $this->drupalCreateNode([
       'type' => 'article',
-      'private' => [
-        ['value' => TRUE],
-      ],
+      'private' => [[
+        'value' => TRUE,
+      ]],
       'uid' => $author->id(),
     ]);
     // Create an account that may view the private node, but not delete it.
@@ -146,9 +146,9 @@ public function testNodeDeleteAccess() {
     // deleted by the author.
     $own_node = $this->drupalCreateNode([
       'type' => 'article',
-      'private' => [
-        ['value' => TRUE],
-      ],
+      'private' => [[
+        'value' => TRUE,
+      ]],
       'uid' => $account->id(),
     ]);
     $this->drupalLogin($account);
diff --git a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
index 7eb7097d9d..44f08a60d4 100644
--- a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
+++ b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
@@ -54,12 +54,10 @@ protected function setUp($import_test_views = TRUE) {
       $this->drupalLogin($web_user);
       foreach ([0 => 'Public', 1 => 'Private'] as $is_private => $type) {
         $settings = [
-          'body' => [
-            [
-              'value' => $type . ' node',
-              'format' => filter_default_format(),
-            ],
-          ],
+          'body' => [[
+            'value' => $type . ' node',
+            'format' => filter_default_format(),
+          ]],
           'title' => t('@private_public Article created by @user', ['@private_public' => $type, '@user' => $web_user->getUsername()]),
           'type' => 'article',
           'uid' => $web_user->id(),
diff --git a/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php b/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php
index 4cbecf314e..db70b2c9da 100644
--- a/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php
+++ b/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php
@@ -45,19 +45,16 @@ public function testViewAdd() {
     $view['show[wizard_key]'] = 'node_revision';
     $this->drupalPostForm('admin/structure/views/add', $view, t('Save and edit'));
 
-    $view = Views::getView($view['id']);
-    $view->initHandlers();
+    $view_storage_controller = \Drupal::entityManager()->getStorage('view');
+    /** @var \Drupal\views\Entity\View $view */
+    $view = $view_storage_controller->load($view['id']);
 
-    $this->assertEqual($view->getBaseTables(), ['node_field_revision' => TRUE, '#global' => TRUE]);
+    $this->assertEqual($view->get('base_table'), 'node_field_revision');
 
-    // Check for the default filters.
-    $this->assertEqual($view->filter['status']->table, 'node_field_revision');
-    $this->assertEqual($view->filter['status']->field, 'status');
-    $this->assertTrue($view->filter['status']->value);
+    $executable = Views::executableFactory()->get($view);
+    $this->executeView($executable);
 
-    $this->executeView($view);
-
-    $this->assertIdenticalResultset($view, [['vid' => 1], ['vid' => 3], ['vid' => 2], ['vid' => 4]],
+    $this->assertIdenticalResultset($executable, [['vid' => 1], ['vid' => 3], ['vid' => 2], ['vid' => 4]],
       ['vid' => 'vid']);
   }
 
diff --git a/core/modules/node/tests/src/Functional/Views/PathPluginTest.php b/core/modules/node/tests/src/Functional/Views/PathPluginTest.php
index d8d088d978..3cb4e372c9 100644
--- a/core/modules/node/tests/src/Functional/Views/PathPluginTest.php
+++ b/core/modules/node/tests/src/Functional/Views/PathPluginTest.php
@@ -58,18 +58,12 @@ protected function setUp($import_test_views = TRUE) {
   }
 
   /**
-   * Tests the node path plugin functionality when converted to entity link.
+   * Tests the node path plugin.
    */
   public function testPathPlugin() {
     /** @var \Drupal\Core\Render\RendererInterface $renderer */
     $renderer = $this->container->get('renderer');
     $view = Views::getView('test_node_path_plugin');
-
-    // The configured deprecated node path plugin should be converted to the
-    // entity link plugin.
-    $field = $view->getHandler('page_1', 'field', 'path');
-    $this->assertEqual('entity_link', $field['plugin_id']);
-
     $view->initDisplay();
     $view->setDisplay('page_1');
     $view->initStyle();
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d6/NodeTranslationRedirectTest.php b/core/modules/node/tests/src/Kernel/Migrate/d6/NodeTranslationRedirectTest.php
deleted file mode 100644
index 7daac88309..0000000000
--- a/core/modules/node/tests/src/Kernel/Migrate/d6/NodeTranslationRedirectTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-namespace Drupal\Tests\node\Kernel\Migrate\d6;
-
-use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
-use Symfony\Component\HttpFoundation\Request;
-
-/**
- * Tests node translation redirections.
- *
- * @group migrate_drupal
- * @group node
- */
-class NodeTranslationRedirectTest extends MigrateDrupal6TestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = [
-    'content_translation',
-    'language',
-    'menu_ui',
-  ];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('node');
-    $this->installConfig(['node']);
-    $this->installSchema('node', ['node_access']);
-    $this->installSchema('system', ['key_value']);
-    $this->migrateUsers(FALSE);
-    $this->migrateFields();
-
-    $this->executeMigrations([
-      'language',
-      'd6_language_types',
-      'd6_language_negotiation_settings',
-      'd6_node_settings',
-      'd6_node',
-      'd6_node_translation',
-    ]);
-  }
-
-  /**
-   * Tests that not found node translations are redirected.
-   */
-  public function testNodeTranslationRedirect() {
-    $kernel = $this->container->get('http_kernel');
-    $request = Request::create('/node/11');
-    $response = $kernel->handle($request);
-    $this->assertSame(301, $response->getStatusCode());
-    $this->assertSame('/node/10', $response->getTargetUrl());
-  }
-
-}
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
index dc053a8b9e..9ca1d4a935 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\Tests\node\Kernel\Migrate\d7;
 
-use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\Tests\file\Kernel\Migrate\d7\FileMigrationSetupTrait;
 use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
 use Drupal\node\Entity\Node;
 use Drupal\node\NodeInterface;
@@ -15,8 +13,6 @@
  */
 class MigrateNodeTest extends MigrateDrupal7TestBase {
 
-  use FileMigrationSetupTrait;
-
   /**
    * {@inheritdoc}
    */
@@ -24,9 +20,7 @@ class MigrateNodeTest extends MigrateDrupal7TestBase {
     'content_translation',
     'comment',
     'datetime',
-    'file',
     'filter',
-    'forum',
     'image',
     'language',
     'link',
@@ -43,14 +37,11 @@ class MigrateNodeTest extends MigrateDrupal7TestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->fileMigrationSetup();
-
     $this->installEntitySchema('node');
     $this->installEntitySchema('comment');
     $this->installEntitySchema('taxonomy_term');
+    $this->installEntitySchema('file');
     $this->installConfig(static::$modules);
-    $this->installSchema('comment', ['comment_entity_statistics']);
-    $this->installSchema('forum', ['forum', 'forum_index']);
     $this->installSchema('node', ['node_access']);
     $this->installSchema('system', ['sequences']);
 
@@ -61,8 +52,6 @@ protected function setUp() {
       'd7_node_type',
       'd7_language_content_settings',
       'd7_comment_type',
-      'd7_comment_field',
-      'd7_comment_field_instance',
       'd7_taxonomy_vocabulary',
       'd7_field',
       'd7_field_instance',
@@ -98,18 +87,18 @@ protected function setUp() {
   protected function assertEntity($id, $type, $langcode, $title, $uid, $status, $created, $changed, $promoted, $sticky) {
     /** @var \Drupal\node\NodeInterface $node */
     $node = Node::load($id);
-    $this->assertInstanceOf(NodeInterface::class, $node);
-    $this->assertEquals($type, $node->getType());
-    $this->assertEquals($langcode, $node->langcode->value);
-    $this->assertEquals($title, $node->getTitle());
-    $this->assertEquals($uid, $node->getOwnerId());
-    $this->assertEquals($status, $node->isPublished());
-    $this->assertEquals($created, $node->getCreatedTime());
+    $this->assertTrue($node instanceof NodeInterface);
+    $this->assertIdentical($type, $node->getType());
+    $this->assertIdentical($langcode, $node->langcode->value);
+    $this->assertIdentical($title, $node->getTitle());
+    $this->assertIdentical($uid, $node->getOwnerId());
+    $this->assertIdentical($status, $node->isPublished());
+    $this->assertIdentical($created, $node->getCreatedTime());
     if (isset($changed)) {
-      $this->assertEquals($changed, $node->getChangedTime());
+      $this->assertIdentical($changed, $node->getChangedTime());
     }
-    $this->assertEquals($promoted, $node->isPromoted());
-    $this->assertEquals($sticky, $node->isSticky());
+    $this->assertIdentical($promoted, $node->isPromoted());
+    $this->assertIdentical($sticky, $node->isSticky());
   }
 
   /**
@@ -128,11 +117,11 @@ protected function assertEntity($id, $type, $langcode, $title, $uid, $status, $c
    */
   protected function assertRevision($id, $title, $uid, $log, $timestamp) {
     $revision = \Drupal::entityManager()->getStorage('node')->loadRevision($id);
-    $this->assertInstanceOf(NodeInterface::class, $revision);
-    $this->assertEquals($title, $revision->getTitle());
-    $this->assertEquals($uid, $revision->getRevisionUser()->id());
-    $this->assertEquals($log, $revision->revision_log->value);
-    $this->assertEquals($timestamp, $revision->getRevisionCreationTime());
+    $this->assertTrue($revision instanceof NodeInterface);
+    $this->assertIdentical($title, $revision->getTitle());
+    $this->assertIdentical($uid, $revision->getRevisionUser()->id());
+    $this->assertIdentical($log, $revision->revision_log->value);
+    $this->assertIdentical($timestamp, $revision->getRevisionCreationTime());
   }
 
   /**
@@ -144,64 +133,53 @@ public function testNode() {
 
     $node = Node::load(1);
     $this->assertTrue($node->field_boolean->value);
-    $this->assertEquals('99-99-99-99', $node->field_phone->value);
-    $this->assertEquals('1', $node->field_float->value);
-    $this->assertEquals('5', $node->field_integer->value);
-    $this->assertEquals('Some more text', $node->field_text_list[0]->value);
-    $this->assertEquals('7', $node->field_integer_list[0]->value);
-    $this->assertEquals('qwerty', $node->field_text->value);
-    $this->assertEquals('2', $node->field_file->target_id);
-    $this->assertEquals('file desc', $node->field_file->description);
+    $this->assertIdentical('99-99-99-99', $node->field_phone->value);
+    // Use assertEqual() here instead, since SQLite interprets floats strictly.
+    $this->assertEqual('1', $node->field_float->value);
+    $this->assertIdentical('5', $node->field_integer->value);
+    $this->assertIdentical('Some more text', $node->field_text_list[0]->value);
+    $this->assertIdentical('7', $node->field_integer_list[0]->value);
+    $this->assertIdentical('qwerty', $node->field_text->value);
+    $this->assertIdentical('2', $node->field_file->target_id);
+    $this->assertIdentical('file desc', $node->field_file->description);
     $this->assertTrue($node->field_file->display);
-    $this->assertEquals('1', $node->field_images->target_id);
-    $this->assertEquals('alt text', $node->field_images->alt);
-    $this->assertEquals('title text', $node->field_images->title);
-    $this->assertEquals('93', $node->field_images->width);
-    $this->assertEquals('93', $node->field_images->height);
-    $this->assertEquals('http://google.com', $node->field_link->uri);
-    $this->assertEquals('Click Here', $node->field_link->title);
+    $this->assertIdentical('1', $node->field_images->target_id);
+    $this->assertIdentical('alt text', $node->field_images->alt);
+    $this->assertIdentical('title text', $node->field_images->title);
+    $this->assertIdentical('93', $node->field_images->width);
+    $this->assertIdentical('93', $node->field_images->height);
+    $this->assertIdentical('http://google.com', $node->field_link->uri);
+    $this->assertIdentical('Click Here', $node->field_link->title);
     // Test that an email field is migrated.
-    $this->assertEquals('default@example.com', $node->field_email->value);
-    $this->assertEquals('another@example.com', $node->field_email[1]->value);
-    $this->assertEquals(CommentItemInterface::OPEN, $node->comment_node_test_content_type->status);
+    $this->assertSame('default@example.com', $node->field_email->value);
+    $this->assertSame('another@example.com', $node->field_email[1]->value);
 
     $node = Node::load(2);
-    $this->assertEquals('en', $node->langcode->value);
-    $this->assertEquals("...is that it's the absolute best show ever. Trust me, I would know.", $node->body->value);
-    $this->assertEquals('The thing about Deep Space 9', $node->label());
-    $this->assertEquals('internal:/', $node->field_link->uri);
-    $this->assertEquals('Home', $node->field_link->title);
-    $this->assertEquals(CommentItemInterface::OPEN, $node->comment_node_article->status);
+    $this->assertSame('en', $node->langcode->value);
+    $this->assertIdentical("...is that it's the absolute best show ever. Trust me, I would know.", $node->body->value);
+    $this->assertSame('The thing about Deep Space 9', $node->label());
+    $this->assertIdentical('internal:/', $node->field_link->uri);
+    $this->assertIdentical('Home', $node->field_link->title);
     $this->assertTrue($node->hasTranslation('is'), "Node 2 has an Icelandic translation");
 
     $translation = $node->getTranslation('is');
-    $this->assertEquals('is', $translation->langcode->value);
-    $this->assertEquals("is - ...is that it's the absolute best show ever. Trust me, I would know.", $translation->body->value);
-    $this->assertEquals('is - The thing about Deep Space 9', $translation->label());
-    $this->assertEquals('internal:/', $translation->field_link->uri);
-    $this->assertEquals(CommentItemInterface::OPEN, $translation->comment_node_article->status);
-    $this->assertEquals('Home', $translation->field_link->title);
+    $this->assertSame('is', $translation->langcode->value);
+    $this->assertSame("is - ...is that it's the absolute best show ever. Trust me, I would know.", $translation->body->value);
+    $this->assertSame('is - The thing about Deep Space 9', $translation->label());
+    $this->assertSame('internal:/', $translation->field_link->uri);
+    $this->assertSame('Home', $translation->field_link->title);
 
     // Test that content_translation_source is set.
     $manager = $this->container->get('content_translation.manager');
-    $this->assertEquals('en', $manager->getTranslationMetadata($node->getTranslation('is'))->getSource());
+    $this->assertSame('en', $manager->getTranslationMetadata($node->getTranslation('is'))->getSource());
 
     // Node 3 is a translation of node 2, and should not be imported separately.
     $this->assertNull(Node::load(3), "Node 3 doesn't exist in D8, it was a translation");
 
     // Test that content_translation_source for a source other than English.
     $node = Node::load(4);
-    $this->assertEquals('is', $manager->getTranslationMetadata($node->getTranslation('en'))->getSource());
-    $this->assertEquals(CommentItemInterface::CLOSED, $node->comment_node_article->status);
-
-    $translation = $node->getTranslation('en');
-    $this->assertEquals(CommentItemInterface::CLOSED, $translation->comment_node_article->status);
-
-    $node = Node::load(6);
-    $this->assertEquals(CommentItemInterface::CLOSED, $node->comment_forum->status);
+    $this->assertSame('is', $manager->getTranslationMetadata($node->getTranslation('en'))->getSource());
 
-    $node = Node::load(7);
-    $this->assertEquals(CommentItemInterface::OPEN, $node->comment_forum->status);
   }
 
 }
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/NodeTranslationRedirectTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/NodeTranslationRedirectTest.php
deleted file mode 100644
index 88cc2ade7b..0000000000
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/NodeTranslationRedirectTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace Drupal\Tests\node\Kernel\Migrate\d7;
-
-use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
-use Symfony\Component\HttpFoundation\Request;
-
-/**
- * Tests node translation redirections.
- *
- * @group migrate_drupal
- * @group node
- */
-class NodeTranslationRedirectTest extends MigrateDrupal7TestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = [
-    'content_translation',
-    'language',
-    'menu_ui',
-    'node',
-    'text',
-  ];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('node');
-    $this->installConfig('node');
-    $this->installSchema('node', ['node_access']);
-    $this->installSchema('system', ['key_value']);
-
-    $this->executeMigrations([
-      'language',
-      'd7_language_types',
-      'd7_language_negotiation_settings',
-      'd7_user_role',
-      'd7_user',
-      'd7_node_type',
-      'd7_node',
-      'd7_node_translation',
-    ]);
-  }
-
-  /**
-   * Tests that not found node translations are redirected.
-   */
-  public function testNodeTranslationRedirect() {
-    $kernel = $this->container->get('http_kernel');
-    $request = Request::create('/node/3');
-    $response = $kernel->handle($request);
-    $this->assertSame(301, $response->getStatusCode());
-    $this->assertSame('/node/2', $response->getTargetUrl());
-  }
-
-}
diff --git a/core/modules/node/tests/src/Traits/ContentTypeCreationTrait.php b/core/modules/node/tests/src/Traits/ContentTypeCreationTrait.php
deleted file mode 100644
index e633dad353..0000000000
--- a/core/modules/node/tests/src/Traits/ContentTypeCreationTrait.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace Drupal\Tests\node\Traits;
-
-use Drupal\Component\Render\FormattableMarkup;
-use Drupal\node\Entity\NodeType;
-use PHPUnit\Framework\TestCase;
-
-/**
- * Provides methods to create content type from given values.
- *
- * This trait is meant to be used only by test classes.
- */
-trait ContentTypeCreationTrait {
-
-  /**
-   * Creates a custom content type based on default settings.
-   *
-   * @param array $values
-   *   An array of settings to change from the defaults.
-   *   Example: 'type' => 'foo'.
-   *
-   * @return \Drupal\node\Entity\NodeType
-   *   Created content type.
-   */
-  protected function createContentType(array $values = []) {
-    // Find a non-existent random type name.
-    if (!isset($values['type'])) {
-      do {
-        $id = strtolower($this->randomMachineName(8));
-      } while (NodeType::load($id));
-    }
-    else {
-      $id = $values['type'];
-    }
-    $values += [
-      'type' => $id,
-      'name' => $id,
-    ];
-    $type = NodeType::create($values);
-    $status = $type->save();
-    node_add_body_field($type);
-
-    if ($this instanceof TestCase) {
-      $this->assertSame($status, SAVED_NEW, (new FormattableMarkup('Created content type %type.', ['%type' => $type->id()]))->__toString());
-    }
-    else {
-      $this->assertEqual($status, SAVED_NEW, (new FormattableMarkup('Created content type %type.', ['%type' => $type->id()]))->__toString());
-    }
-
-    return $type;
-  }
-
-}
diff --git a/core/modules/node/tests/src/Traits/NodeCreationTrait.php b/core/modules/node/tests/src/Traits/NodeCreationTrait.php
deleted file mode 100644
index 6e0cf6a263..0000000000
--- a/core/modules/node/tests/src/Traits/NodeCreationTrait.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-namespace Drupal\Tests\node\Traits;
-
-use Drupal\node\Entity\Node;
-
-/**
- * Provides methods to create node based on default settings.
- *
- * This trait is meant to be used only by test classes.
- */
-trait NodeCreationTrait {
-
-  /**
-   * Get a node from the database based on its title.
-   *
-   * @param string|\Drupal\Component\Render\MarkupInterface $title
-   *   A node title, usually generated by $this->randomMachineName().
-   * @param $reset
-   *   (optional) Whether to reset the entity cache.
-   *
-   * @return \Drupal\node\NodeInterface
-   *   A node entity matching $title.
-   */
-  public function getNodeByTitle($title, $reset = FALSE) {
-    if ($reset) {
-      \Drupal::entityTypeManager()->getStorage('node')->resetCache();
-    }
-    // Cast MarkupInterface objects to string.
-    $title = (string) $title;
-    $nodes = \Drupal::entityTypeManager()
-      ->getStorage('node')
-      ->loadByProperties(['title' => $title]);
-    // Load the first node returned from the database.
-    $returned_node = reset($nodes);
-    return $returned_node;
-  }
-
-  /**
-   * Creates a node based on default settings.
-   *
-   * @param array $settings
-   *   (optional) An associative array of settings for the node, as used in
-   *   entity_create(). Override the defaults by specifying the key and value
-   *   in the array, for example:
-   *   @code
-   *     $this->drupalCreateNode(array(
-   *       'title' => t('Hello, world!'),
-   *       'type' => 'article',
-   *     ));
-   *   @endcode
-   *   The following defaults are provided:
-   *   - body: Random string using the default filter format:
-   *     @code
-   *       $settings['body'][0] = array(
-   *         'value' => $this->randomMachineName(32),
-   *         'format' => filter_default_format(),
-   *       );
-   *     @endcode
-   *   - title: Random string.
-   *   - type: 'page'.
-   *   - uid: The currently logged in user, or anonymous.
-   *
-   * @return \Drupal\node\NodeInterface
-   *   The created node entity.
-   */
-  protected function createNode(array $settings = []) {
-    // Populate defaults array.
-    $settings += [
-      'body'      => [
-        [
-          'value' => $this->randomMachineName(32),
-          'format' => filter_default_format(),
-        ],
-      ],
-      'title'     => $this->randomMachineName(8),
-      'type'      => 'page',
-      'uid'       => \Drupal::currentUser()->id(),
-    ];
-    $node = Node::create($settings);
-    $node->save();
-
-    return $node;
-  }
-
-}
diff --git a/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php b/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php
index 3b29b04b81..c7c2b16e9b 100644
--- a/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php
+++ b/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php
@@ -222,7 +222,7 @@ protected static function extractAllowedValues($string, $has_data) {
    * @return string
    *   The error message if the specified value is invalid, NULL otherwise.
    */
-  protected static function validateAllowedValue($option) {}
+  protected static function validateAllowedValue($option) { }
 
   /**
    * Generates a string representation of an array of 'allowed values'.
diff --git a/core/modules/options/src/Plugin/migrate/field/d7/ListField.php b/core/modules/options/src/Plugin/migrate/field/d7/ListField.php
deleted file mode 100644
index fff29ee177..0000000000
--- a/core/modules/options/src/Plugin/migrate/field/d7/ListField.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Drupal\options\Plugin\migrate\field\d7;
-
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "list",
- *   type_map = {
- *     "list_boolean" = "boolean",
- *     "list_integer" = "list_integer",
- *     "list_text" = "list_string",
- *   },
- *   core = {7}
- * )
- */
-class ListField extends FieldPluginBase {}
diff --git a/core/modules/options/tests/src/Functional/OptionsFieldUITest.php b/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
index ec5874b2e0..e29a1d0550 100644
--- a/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
+++ b/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
@@ -94,7 +94,7 @@ public function testOptionsAllowedValuesInteger() {
     $node = $this->drupalCreateNode($settings);
 
     // Check that a flat list of values is rejected once the field has data.
-    $this->assertAllowedValuesInput("Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.');
+    $this->assertAllowedValuesInput( "Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.');
 
     // Check that values can be added but values in use cannot be removed.
     $string = "0|Zero\n1|One\n2|Two";
@@ -259,7 +259,7 @@ public function testOptionsTrimmedValuesText() {
    * Helper function to create list field of a given type.
    *
    * @param string $type
-   *   One of 'list_integer', 'list_float' or 'list_string'.
+   *   'list_integer', 'list_float' or 'list_string'
    */
   protected function createOptionsField($type) {
     // Create a field.
diff --git a/core/modules/settings_tray/css/off-canvas.base.css b/core/modules/outside_in/css/off-canvas.base.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.base.css
rename to core/modules/outside_in/css/off-canvas.base.css
diff --git a/core/modules/settings_tray/css/off-canvas.button.css b/core/modules/outside_in/css/off-canvas.button.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.button.css
rename to core/modules/outside_in/css/off-canvas.button.css
diff --git a/core/modules/settings_tray/css/off-canvas.css b/core/modules/outside_in/css/off-canvas.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.css
rename to core/modules/outside_in/css/off-canvas.css
diff --git a/core/modules/settings_tray/css/off-canvas.details.css b/core/modules/outside_in/css/off-canvas.details.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.details.css
rename to core/modules/outside_in/css/off-canvas.details.css
diff --git a/core/modules/settings_tray/css/off-canvas.dropbutton.css b/core/modules/outside_in/css/off-canvas.dropbutton.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.dropbutton.css
rename to core/modules/outside_in/css/off-canvas.dropbutton.css
diff --git a/core/modules/settings_tray/css/off-canvas.form.css b/core/modules/outside_in/css/off-canvas.form.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.form.css
rename to core/modules/outside_in/css/off-canvas.form.css
diff --git a/core/modules/settings_tray/css/off-canvas.motion.css b/core/modules/outside_in/css/off-canvas.motion.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.motion.css
rename to core/modules/outside_in/css/off-canvas.motion.css
diff --git a/core/modules/settings_tray/css/off-canvas.reset.css b/core/modules/outside_in/css/off-canvas.reset.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.reset.css
rename to core/modules/outside_in/css/off-canvas.reset.css
diff --git a/core/modules/settings_tray/css/off-canvas.table.css b/core/modules/outside_in/css/off-canvas.table.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.table.css
rename to core/modules/outside_in/css/off-canvas.table.css
diff --git a/core/modules/settings_tray/css/off-canvas.tabledrag.css b/core/modules/outside_in/css/off-canvas.tabledrag.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.tabledrag.css
rename to core/modules/outside_in/css/off-canvas.tabledrag.css
diff --git a/core/modules/settings_tray/css/off-canvas.theme.css b/core/modules/outside_in/css/off-canvas.theme.css
similarity index 100%
rename from core/modules/settings_tray/css/off-canvas.theme.css
rename to core/modules/outside_in/css/off-canvas.theme.css
diff --git a/core/modules/settings_tray/css/settings_tray.module.css b/core/modules/outside_in/css/outside_in.module.css
similarity index 67%
rename from core/modules/settings_tray/css/settings_tray.module.css
rename to core/modules/outside_in/css/outside_in.module.css
index 05b5bee4dc..667dc2ec00 100644
--- a/core/modules/settings_tray/css/settings_tray.module.css
+++ b/core/modules/outside_in/css/outside_in.module.css
@@ -14,10 +14,10 @@
   float: right;
 }
 
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode a,
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode input {
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode a,
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode input {
   pointer-events: none;
 }
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode .contextual-links a {
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode .contextual-links a {
   pointer-events: inherit;
 }
diff --git a/core/modules/settings_tray/css/settings_tray.motion.css b/core/modules/outside_in/css/outside_in.motion.css
similarity index 73%
rename from core/modules/settings_tray/css/settings_tray.motion.css
rename to core/modules/outside_in/css/outside_in.motion.css
index 03639cb1e4..d327369137 100644
--- a/core/modules/settings_tray/css/settings_tray.motion.css
+++ b/core/modules/outside_in/css/outside_in.motion.css
@@ -13,7 +13,7 @@
 
 /* Transition the editables on the page, their contextual links and their hover states. */
 .dialog-off-canvas__main-canvas .contextual,
-.dialog-off-canvas__main-canvas .js-settings-tray-edit-mode .settings-tray-editable,
-.dialog-off-canvas__main-canvas.js-tray-open .js-settings-tray-edit-mode .settings-tray-editable {
+.dialog-off-canvas__main-canvas .js-outside-in-edit-mode .outside-in-editable,
+.dialog-off-canvas__main-canvas.js-tray-open .js-outside-in-edit-mode .outside-in-editable {
   transition: all .7s ease;
 }
diff --git a/core/modules/settings_tray/css/settings_tray.theme.css b/core/modules/outside_in/css/outside_in.theme.css
similarity index 82%
rename from core/modules/settings_tray/css/settings_tray.theme.css
rename to core/modules/outside_in/css/outside_in.theme.css
index 9c40c74dfd..567db216e3 100644
--- a/core/modules/settings_tray/css/settings_tray.theme.css
+++ b/core/modules/outside_in/css/outside_in.theme.css
@@ -8,13 +8,13 @@
  */
 
 /* Style the edit mode toolbar and tabs. */
-#toolbar-bar.js-settings-tray-edit-mode {
+#toolbar-bar.js-outside-in-edit-mode {
   background-image: linear-gradient(to bottom,#0c97ed,#1f86c7);
 }
-.js-settings-tray-edit-mode .toolbar-item:not(.toolbar-icon-edit) {
+.js-outside-in-edit-mode .toolbar-item:not(.toolbar-icon-edit) {
   color: #999;
 }
-.js-settings-tray-edit-mode .toolbar-item:not(.toolbar-icon-edit) .is-active {
+.js-outside-in-edit-mode .toolbar-item:not(.toolbar-icon-edit) .is-active {
   color: #333;
 }
 
@@ -60,11 +60,11 @@
 }
 
 /* Style the editables while in edit mode. */
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode .settings-tray-editable {
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode .outside-in-editable {
   outline: 1px dashed rgba(0,0,0,0.5);
   box-shadow: 0 0 0 1px rgba(255,255,255,0.7);
 }
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode .settings-tray-editable:hover,
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode .settings-tray-editable.settings-tray-active-editable {
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode .outside-in-editable:hover,
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode .outside-in-editable.outside-in-active-editable {
   background-color: rgba(0,0,0,0.2);
 }
diff --git a/core/modules/settings_tray/css/settings_tray.toolbar.css b/core/modules/outside_in/css/outside_in.toolbar.css
similarity index 83%
rename from core/modules/settings_tray/css/settings_tray.toolbar.css
rename to core/modules/outside_in/css/outside_in.toolbar.css
index 8a2278c24a..e09fb008f9 100644
--- a/core/modules/settings_tray/css/settings_tray.toolbar.css
+++ b/core/modules/outside_in/css/outside_in.toolbar.css
@@ -8,13 +8,13 @@
  */
 
 /* Style the edit mode toolbar and tabs. */
-#toolbar-bar.js-settings-tray-edit-mode {
+#toolbar-bar.js-outside-in-edit-mode {
   background-color: #fff;
 }
-#toolbar-bar.js-settings-tray-edit-mode .toolbar-item {
+#toolbar-bar.js-outside-in-edit-mode .toolbar-item {
   color: #999;
 }
-#toolbar-bar.js-settings-tray-edit-mode .toolbar-item .is-active {
+#toolbar-bar.js-outside-in-edit-mode .toolbar-item .is-active {
   color: #333;
 }
 
@@ -58,10 +58,10 @@ button.toolbar-icon.toolbar-icon-edit.toolbar-item:before:focus {
   background-image: url(../../../misc/icons/ffffff/pencil.svg);
 }
 
-#toolbar-bar.js-settings-tray-edit-mode button.toolbar-icon.toolbar-icon-edit.toolbar-item.is-active {
+#toolbar-bar.js-outside-in-edit-mode button.toolbar-icon.toolbar-icon-edit.toolbar-item.is-active {
   background-image: none;
   color: #fff;
 }
-#toolbar-bar.js-settings-tray-edit-mode button.toolbar-icon.toolbar-icon-edit.toolbar-item.is-active:hover {
+#toolbar-bar.js-outside-in-edit-mode button.toolbar-icon.toolbar-icon-edit.toolbar-item.is-active:hover {
   background-image: linear-gradient(to bottom, #0094f0, #0e69be);
 }
diff --git a/core/modules/settings_tray/js/off-canvas.es6.js b/core/modules/outside_in/js/off-canvas.es6.js
similarity index 91%
rename from core/modules/settings_tray/js/off-canvas.es6.js
rename to core/modules/outside_in/js/off-canvas.es6.js
index 1cb740c3ff..c711c2b4d5 100644
--- a/core/modules/settings_tray/js/off-canvas.es6.js
+++ b/core/modules/outside_in/js/off-canvas.es6.js
@@ -22,7 +22,7 @@
 
     /**
      * The minimum width to use body displace needs to match the width at which
-     * the tray will be %100 width. @see settings_tray.module.css
+     * the tray will be %100 width. @see outside_in.module.css
      * @type {Number}
      */
     minDisplaceWidth: 768,
@@ -45,28 +45,13 @@
       return $element.is('#drupal-off-canvas');
     },
 
-    /**
-     * Remove off-canvas dialog events.
-     *
-     * @param {jQuery} $element
-     *   The target element.
-     */
-    removeOffCanvasEvents($element) {
-      $element.off('.off-canvas');
-      $(document).off('.off-canvas');
-      $(window).off('.off-canvas');
-    },
-
     /**
      * Handler fired before an off-canvas dialog has been opened.
      * @param  {Object} settings
      *   Settings related to the composition of the dialog.
      * @return {undefined}
      */
-    beforeCreate({ settings, $element }) {
-      // Clean up previous dialog event handlers.
-      Drupal.offCanvas.removeOffCanvasEvents($element);
-
+    beforeCreate({ settings }) {
       $('body').addClass('js-tray-open');
       settings.dialogClass += ' ui-dialog-off-canvas';
       // @see http://api.jqueryui.com/position/
@@ -87,11 +72,11 @@
      * Handler fired after an off-canvas dialog has been closed.
      * @return {undefined}
      */
-    beforeClose({ $element }) {
+    beforeClose() {
       $('body').removeClass('js-tray-open');
       // Remove all *.off-canvas events
-      Drupal.offCanvas.removeOffCanvasEvents($element);
-
+      $(document).off('.off-canvas');
+      $(window).off('.off-canvas');
       Drupal.offCanvas.$mainCanvasWrapper.css(`padding-${Drupal.offCanvas.getEdge()}`, 0);
     },
 
@@ -107,13 +92,15 @@
       const eventData = { settings, $element, offCanvasDialog: this };
 
       $element
+        .on('dialogresize.off-canvas', eventData, debounce(Drupal.offCanvas.bodyPadding, 100))
         .on('dialogContentResize.off-canvas', eventData, Drupal.offCanvas.handleDialogResize)
-        .on('dialogContentResize.off-canvas', eventData, Drupal.offCanvas.bodyPadding);
+        .on('dialogContentResize.off-canvas', eventData, debounce(Drupal.offCanvas.bodyPadding, 100))
+        .trigger('dialogresize.off-canvas');
 
       Drupal.offCanvas.getContainer($element).attr(`data-offset-${Drupal.offCanvas.getEdge()}`, '');
 
       $(window)
-        .on('resize.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100))
+        .on('resize.off-canvas scroll.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100))
         .trigger('resize.off-canvas');
     },
 
diff --git a/core/modules/settings_tray/js/off-canvas.js b/core/modules/outside_in/js/off-canvas.js
similarity index 82%
rename from core/modules/settings_tray/js/off-canvas.js
rename to core/modules/outside_in/js/off-canvas.js
index 800fd8eb11..f5f65a49ac 100644
--- a/core/modules/settings_tray/js/off-canvas.js
+++ b/core/modules/outside_in/js/off-canvas.js
@@ -14,16 +14,8 @@
     isOffCanvas: function isOffCanvas($element) {
       return $element.is('#drupal-off-canvas');
     },
-    removeOffCanvasEvents: function removeOffCanvasEvents($element) {
-      $element.off('.off-canvas');
-      $(document).off('.off-canvas');
-      $(window).off('.off-canvas');
-    },
     beforeCreate: function beforeCreate(_ref) {
-      var settings = _ref.settings,
-          $element = _ref.$element;
-
-      Drupal.offCanvas.removeOffCanvasEvents($element);
+      var settings = _ref.settings;
 
       $('body').addClass('js-tray-open');
       settings.dialogClass += ' ui-dialog-off-canvas';
@@ -36,29 +28,27 @@
 
       settings.height = $(window).height();
     },
-    beforeClose: function beforeClose(_ref2) {
-      var $element = _ref2.$element;
-
+    beforeClose: function beforeClose() {
       $('body').removeClass('js-tray-open');
 
-      Drupal.offCanvas.removeOffCanvasEvents($element);
-
+      $(document).off('.off-canvas');
+      $(window).off('.off-canvas');
       Drupal.offCanvas.$mainCanvasWrapper.css('padding-' + Drupal.offCanvas.getEdge(), 0);
     },
-    afterCreate: function afterCreate(_ref3) {
-      var $element = _ref3.$element,
-          settings = _ref3.settings;
+    afterCreate: function afterCreate(_ref2) {
+      var $element = _ref2.$element,
+          settings = _ref2.settings;
 
       var eventData = { settings: settings, $element: $element, offCanvasDialog: this };
 
-      $element.on('dialogContentResize.off-canvas', eventData, Drupal.offCanvas.handleDialogResize).on('dialogContentResize.off-canvas', eventData, Drupal.offCanvas.bodyPadding);
+      $element.on('dialogresize.off-canvas', eventData, debounce(Drupal.offCanvas.bodyPadding, 100)).on('dialogContentResize.off-canvas', eventData, Drupal.offCanvas.handleDialogResize).on('dialogContentResize.off-canvas', eventData, debounce(Drupal.offCanvas.bodyPadding, 100)).trigger('dialogresize.off-canvas');
 
       Drupal.offCanvas.getContainer($element).attr('data-offset-' + Drupal.offCanvas.getEdge(), '');
 
-      $(window).on('resize.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100)).trigger('resize.off-canvas');
+      $(window).on('resize.off-canvas scroll.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100)).trigger('resize.off-canvas');
     },
-    render: function render(_ref4) {
-      var settings = _ref4.settings;
+    render: function render(_ref3) {
+      var settings = _ref3.settings;
 
       $('.ui-dialog-off-canvas, .ui-dialog-off-canvas .ui-dialog-titlebar').toggleClass('ui-dialog-empty-title', !settings.title);
     },
diff --git a/core/modules/settings_tray/js/settings_tray.es6.js b/core/modules/outside_in/js/outside_in.es6.js
similarity index 78%
rename from core/modules/settings_tray/js/settings_tray.es6.js
rename to core/modules/outside_in/js/outside_in.es6.js
index b4edd840c5..7271024ef4 100644
--- a/core/modules/settings_tray/js/settings_tray.es6.js
+++ b/core/modules/outside_in/js/outside_in.es6.js
@@ -6,9 +6,9 @@
  */
 
 (function ($, Drupal) {
-  const blockConfigureSelector = '[data-settings-tray-edit]';
-  const toggleEditSelector = '[data-drupal-settingstray="toggle"]';
-  const itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-settingstray="editable"] a, [data-drupal-settingstray="editable"] button';
+  const blockConfigureSelector = '[data-outside-in-edit]';
+  const toggleEditSelector = '[data-drupal-outsidein="toggle"]';
+  const itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button';
   const contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
   const quickEditItemSelector = '[data-quickedit-entity-id]';
 
@@ -67,7 +67,7 @@
    */
   function setEditModeState(editMode) {
     if (!document.querySelector('[data-off-canvas-main-canvas]')) {
-      throw new Error('data-off-canvas-main-canvas is missing from settings-tray-page-wrapper.html.twig');
+      throw new Error('data-off-canvas-main-canvas is missing from outside-in-page-wrapper.html.twig');
     }
     editMode = !!editMode;
     const $editButton = $(toggleEditSelector);
@@ -77,16 +77,16 @@
       $editButton.text(Drupal.t('Editing'));
       closeToolbarTrays();
 
-      $editables = $('[data-drupal-settingstray="editable"]').once('settingstray');
+      $editables = $('[data-drupal-outsidein="editable"]').once('outsidein');
       if ($editables.length) {
         // Use event capture to prevent clicks on links.
         document.querySelector('[data-off-canvas-main-canvas]').addEventListener('click', preventClick, true);
 
-        // When a click occurs try and find the settings-tray edit link
+        // When a click occurs try and find the outside-in edit link
         // and click it.
         $editables
           .not(contextualItemsSelector)
-          .on('click.settingstray', (e) => {
+          .on('click.outsidein', (e) => {
             // Contextual links are allowed to function in Edit mode.
             if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) {
               return;
@@ -96,7 +96,7 @@
           });
         $(quickEditItemSelector)
           .not(contextualItemsSelector)
-          .on('click.settingstray', (e) => {
+          .on('click.outsidein', (e) => {
             /**
              * For all non-contextual links or the contextual QuickEdit link
              * close the off-canvas dialog.
@@ -114,31 +114,31 @@
     }
     // Disable edit mode.
     else {
-      $editables = $('[data-drupal-settingstray="editable"]').removeOnce('settingstray');
+      $editables = $('[data-drupal-outsidein="editable"]').removeOnce('outsidein');
       if ($editables.length) {
         document.querySelector('[data-off-canvas-main-canvas]').removeEventListener('click', preventClick, true);
-        $editables.off('.settingstray');
-        $(quickEditItemSelector).off('.settingstray');
+        $editables.off('.outsidein');
+        $(quickEditItemSelector).off('.outsidein');
       }
 
       $editButton.text(Drupal.t('Edit'));
       closeOffCanvas();
       disableQuickEdit();
     }
-    getItemsToToggle().toggleClass('js-settings-tray-edit-mode', editMode);
+    getItemsToToggle().toggleClass('js-outside-in-edit-mode', editMode);
     $('.edit-mode-inactive').toggleClass('visually-hidden', editMode);
   }
 
   /**
-   * Helper to check the state of the settings-tray mode.
+   * Helper to check the state of the outside-in mode.
    *
    * @todo don't use a class for this.
    *
    * @return {boolean}
-   *   State of the settings-tray edit mode.
+   *   State of the outside-in edit mode.
    */
   function isInEditMode() {
-    return $('#toolbar-bar').hasClass('js-settings-tray-edit-mode');
+    return $('#toolbar-bar').hasClass('js-outside-in-edit-mode');
   }
 
   /**
@@ -161,7 +161,7 @@
   $(document).on('drupalContextualLinkAdded', (event, data) => {
 
     // When the first contextual link is added to the page set Edit Mode.
-    $('body').once('settings_tray.edit_mode_init').each(() => {
+    $('body').once('outside_in.edit_mode_init').each(() => {
       const editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false';
       if (editMode) {
         setEditModeState(true);
@@ -180,9 +180,9 @@
      * mode also.
      */
     data.$el.find(blockConfigureSelector)
-      .on('click.settingstray', () => {
+      .on('click.outsidein', () => {
         if (!isInEditMode()) {
-          $(toggleEditSelector).trigger('click').trigger('click.settings_tray');
+          $(toggleEditSelector).trigger('click').trigger('click.outside_in');
         }
         /**
          * Always disable QuickEdit regardless of whether "EditMode" was just
@@ -192,7 +192,7 @@
       });
   });
 
-  $(document).on('keyup.settingstray', (e) => {
+  $(document).on('keyup.outsidein', (e) => {
     if (isInEditMode() && e.keyCode === 27) {
       Drupal.announce(
         Drupal.t('Exited edit mode.'),
@@ -202,16 +202,16 @@
   });
 
   /**
-   * Toggle the js-settings-tray-edit-mode class on items that we want to disable while in edit mode.
+   * Toggle the js-outside-edit-mode class on items that we want to disable while in edit mode.
    *
    * @type {Drupal~behavior}
    *
    * @prop {Drupal~behaviorAttach} attach
-   *   Toggle the js-settings-tray-edit-mode class.
+   *   Toggle the js-outside-edit-mode class.
    */
   Drupal.behaviors.toggleEditMode = {
     attach() {
-      $(toggleEditSelector).once('settingstray').on('click.settingstray', toggleEditMode);
+      $(toggleEditSelector).once('outsidein').on('click.outsidein', toggleEditMode);
       // Find all Ajax instances that use the 'off_canvas' renderer.
       Drupal.ajax.instances
         // If there is an element and the renderer is 'off_canvas' then we want
@@ -224,7 +224,7 @@
           if (!('dialogOptions' in instance.options.data)) {
             instance.options.data.dialogOptions = {};
           }
-          instance.options.data.dialogOptions.settingsTrayActiveEditableId = $(instance.element).parents('.settings-tray-editable').attr('id');
+          instance.options.data.dialogOptions.outsideInActiveEditableId = $(instance.element).parents('.outside-in-editable').attr('id');
           instance.progress = { type: 'fullscreen' };
         });
     },
@@ -234,16 +234,16 @@
   $(window).on({
     'dialog:beforecreate': (event, dialog, $element, settings) => {
       if ($element.is('#drupal-off-canvas')) {
-        $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
-        const $activeElement = $(`#${settings.settingsTrayActiveEditableId}`);
+        $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
+        const $activeElement = $(`#${settings.outsideInActiveEditableId}`);
         if ($activeElement.length) {
-          $activeElement.addClass('settings-tray-active-editable');
+          $activeElement.addClass('outside-in-active-editable');
         }
       }
     },
     'dialog:beforeclose': (event, dialog, $element) => {
       if ($element.is('#drupal-off-canvas')) {
-        $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
+        $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
       }
     },
   });
diff --git a/core/modules/settings_tray/js/settings_tray.js b/core/modules/outside_in/js/outside_in.js
similarity index 70%
rename from core/modules/settings_tray/js/settings_tray.js
rename to core/modules/outside_in/js/outside_in.js
index 88cbb0eb6e..30fe581fa9 100644
--- a/core/modules/settings_tray/js/settings_tray.js
+++ b/core/modules/outside_in/js/outside_in.js
@@ -6,9 +6,9 @@
 **/
 
 (function ($, Drupal) {
-  var blockConfigureSelector = '[data-settings-tray-edit]';
-  var toggleEditSelector = '[data-drupal-settingstray="toggle"]';
-  var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-settingstray="editable"] a, [data-drupal-settingstray="editable"] button';
+  var blockConfigureSelector = '[data-outside-in-edit]';
+  var toggleEditSelector = '[data-drupal-outsidein="toggle"]';
+  var itemsToToggleSelector = '[data-off-canvas-main-canvas], #toolbar-bar, [data-drupal-outsidein="editable"] a, [data-drupal-outsidein="editable"] button';
   var contextualItemsSelector = '[data-contextual-id] a, [data-contextual-id] button';
   var quickEditItemSelector = '[data-quickedit-entity-id]';
 
@@ -37,7 +37,7 @@
 
   function setEditModeState(editMode) {
     if (!document.querySelector('[data-off-canvas-main-canvas]')) {
-      throw new Error('data-off-canvas-main-canvas is missing from settings-tray-page-wrapper.html.twig');
+      throw new Error('data-off-canvas-main-canvas is missing from outside-in-page-wrapper.html.twig');
     }
     editMode = !!editMode;
     var $editButton = $(toggleEditSelector);
@@ -47,18 +47,18 @@
       $editButton.text(Drupal.t('Editing'));
       closeToolbarTrays();
 
-      $editables = $('[data-drupal-settingstray="editable"]').once('settingstray');
+      $editables = $('[data-drupal-outsidein="editable"]').once('outsidein');
       if ($editables.length) {
         document.querySelector('[data-off-canvas-main-canvas]').addEventListener('click', preventClick, true);
 
-        $editables.not(contextualItemsSelector).on('click.settingstray', function (e) {
+        $editables.not(contextualItemsSelector).on('click.outsidein', function (e) {
           if ($(e.target).closest('.contextual').length || !localStorage.getItem('Drupal.contextualToolbar.isViewing')) {
             return;
           }
           $(e.currentTarget).find(blockConfigureSelector).trigger('click');
           disableQuickEdit();
         });
-        $(quickEditItemSelector).not(contextualItemsSelector).on('click.settingstray', function (e) {
+        $(quickEditItemSelector).not(contextualItemsSelector).on('click.outsidein', function (e) {
           if (!$(e.target).parent().hasClass('contextual') || $(e.target).parent().hasClass('quickedit')) {
             closeOffCanvas();
           }
@@ -70,23 +70,23 @@
         });
       }
     } else {
-        $editables = $('[data-drupal-settingstray="editable"]').removeOnce('settingstray');
+        $editables = $('[data-drupal-outsidein="editable"]').removeOnce('outsidein');
         if ($editables.length) {
           document.querySelector('[data-off-canvas-main-canvas]').removeEventListener('click', preventClick, true);
-          $editables.off('.settingstray');
-          $(quickEditItemSelector).off('.settingstray');
+          $editables.off('.outsidein');
+          $(quickEditItemSelector).off('.outsidein');
         }
 
         $editButton.text(Drupal.t('Edit'));
         closeOffCanvas();
         disableQuickEdit();
       }
-    getItemsToToggle().toggleClass('js-settings-tray-edit-mode', editMode);
+    getItemsToToggle().toggleClass('js-outside-in-edit-mode', editMode);
     $('.edit-mode-inactive').toggleClass('visually-hidden', editMode);
   }
 
   function isInEditMode() {
-    return $('#toolbar-bar').hasClass('js-settings-tray-edit-mode');
+    return $('#toolbar-bar').hasClass('js-outside-in-edit-mode');
   }
 
   function toggleEditMode() {
@@ -94,7 +94,7 @@
   }
 
   $(document).on('drupalContextualLinkAdded', function (event, data) {
-    $('body').once('settings_tray.edit_mode_init').each(function () {
+    $('body').once('outside_in.edit_mode_init').each(function () {
       var editMode = localStorage.getItem('Drupal.contextualToolbar.isViewing') === 'false';
       if (editMode) {
         setEditModeState(true);
@@ -103,16 +103,16 @@
 
     Drupal.attachBehaviors(data.$el[0]);
 
-    data.$el.find(blockConfigureSelector).on('click.settingstray', function () {
+    data.$el.find(blockConfigureSelector).on('click.outsidein', function () {
       if (!isInEditMode()) {
-        $(toggleEditSelector).trigger('click').trigger('click.settings_tray');
+        $(toggleEditSelector).trigger('click').trigger('click.outside_in');
       }
 
       disableQuickEdit();
     });
   });
 
-  $(document).on('keyup.settingstray', function (e) {
+  $(document).on('keyup.outsidein', function (e) {
     if (isInEditMode() && e.keyCode === 27) {
       Drupal.announce(Drupal.t('Exited edit mode.'));
       toggleEditMode();
@@ -121,7 +121,7 @@
 
   Drupal.behaviors.toggleEditMode = {
     attach: function attach() {
-      $(toggleEditSelector).once('settingstray').on('click.settingstray', toggleEditMode);
+      $(toggleEditSelector).once('outsidein').on('click.outsidein', toggleEditMode);
 
       Drupal.ajax.instances.filter(function (instance) {
         return instance && $(instance.element).attr('data-dialog-renderer') === 'off_canvas';
@@ -129,7 +129,7 @@
         if (!('dialogOptions' in instance.options.data)) {
           instance.options.data.dialogOptions = {};
         }
-        instance.options.data.dialogOptions.settingsTrayActiveEditableId = $(instance.element).parents('.settings-tray-editable').attr('id');
+        instance.options.data.dialogOptions.outsideInActiveEditableId = $(instance.element).parents('.outside-in-editable').attr('id');
         instance.progress = { type: 'fullscreen' };
       });
     }
@@ -138,16 +138,16 @@
   $(window).on({
     'dialog:beforecreate': function dialogBeforecreate(event, dialog, $element, settings) {
       if ($element.is('#drupal-off-canvas')) {
-        $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
-        var $activeElement = $('#' + settings.settingsTrayActiveEditableId);
+        $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
+        var $activeElement = $('#' + settings.outsideInActiveEditableId);
         if ($activeElement.length) {
-          $activeElement.addClass('settings-tray-active-editable');
+          $activeElement.addClass('outside-in-active-editable');
         }
       }
     },
     'dialog:beforeclose': function dialogBeforeclose(event, dialog, $element) {
       if ($element.is('#drupal-off-canvas')) {
-        $('body .settings-tray-active-editable').removeClass('settings-tray-active-editable');
+        $('body .outside-in-active-editable').removeClass('outside-in-active-editable');
       }
     }
   });
diff --git a/core/modules/settings_tray/settings_tray.info.yml b/core/modules/outside_in/outside_in.info.yml
similarity index 100%
rename from core/modules/settings_tray/settings_tray.info.yml
rename to core/modules/outside_in/outside_in.info.yml
diff --git a/core/modules/settings_tray/settings_tray.install b/core/modules/outside_in/outside_in.install
similarity index 95%
rename from core/modules/settings_tray/settings_tray.install
rename to core/modules/outside_in/outside_in.install
index bc81c278ac..e205e46eb4 100644
--- a/core/modules/settings_tray/settings_tray.install
+++ b/core/modules/outside_in/outside_in.install
@@ -10,7 +10,7 @@
 /**
  * Implements hook_install().
  */
-function settings_tray_install() {
+function outside_in_install() {
   // This module affects the rendering of blocks and of the page.
   // @todo Remove in https://www.drupal.org/node/2783791.
   Cache::invalidateTags(['rendered']);
diff --git a/core/modules/settings_tray/settings_tray.libraries.yml b/core/modules/outside_in/outside_in.libraries.yml
similarity index 82%
rename from core/modules/settings_tray/settings_tray.libraries.yml
rename to core/modules/outside_in/outside_in.libraries.yml
index 672800d4f9..06e24a8291 100644
--- a/core/modules/settings_tray/settings_tray.libraries.yml
+++ b/core/modules/outside_in/outside_in.libraries.yml
@@ -1,17 +1,17 @@
-drupal.settings_tray:
+drupal.outside_in:
   version: VERSION
   js:
-    js/settings_tray.js: {}
+    js/outside_in.js: {}
   css:
     component:
-      css/settings_tray.module.css: {}
-      css/settings_tray.motion.css: {}
-      css/settings_tray.toolbar.css: {}
+      css/outside_in.module.css: {}
+      css/outside_in.motion.css: {}
+      css/outside_in.toolbar.css: {}
     theme:
       # @todo Set the group higher than CSS_AGGREGATE_THEME so that it overrides
       #   both jQuery UI and Classy's dialog.css, remove in
       #   https://www.drupal.org/node/1945262.
-      css/settings_tray.theme.css: { group: 200 }
+      css/outside_in.theme.css: { group: 200 }
   dependencies:
     - core/jquery
     - core/drupal
diff --git a/core/modules/settings_tray/settings_tray.links.contextual.yml b/core/modules/outside_in/outside_in.links.contextual.yml
similarity index 50%
rename from core/modules/settings_tray/settings_tray.links.contextual.yml
rename to core/modules/outside_in/outside_in.links.contextual.yml
index 5534ab27f5..19f472675c 100644
--- a/core/modules/settings_tray/settings_tray.links.contextual.yml
+++ b/core/modules/outside_in/outside_in.links.contextual.yml
@@ -1,10 +1,10 @@
-settings_tray.block_configure:
+outside_in.block_configure:
   title: 'Quick edit'
   route_name: 'entity.block.off_canvas_form'
   group: 'block'
   options:
     attributes:
       class: ['use-ajax']
-      data-dialog-type: dialog
-      data-dialog-renderer: off_canvas
-      data-settings-tray-edit: true
+      data-dialog-type: 'dialog'
+      data-dialog-renderer: 'off_canvas'
+      data-outside-in-edit: 'TRUE'
diff --git a/core/modules/outside_in/outside_in.module b/core/modules/outside_in/outside_in.module
new file mode 100644
index 0000000000..acded3af11
--- /dev/null
+++ b/core/modules/outside_in/outside_in.module
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * @file
+ * Allows configuring blocks and other configuration from the site front-end.
+ */
+
+use Drupal\Core\Asset\AttachedAssetsInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\outside_in\Block\BlockEntityOffCanvasForm;
+use Drupal\outside_in\Form\SystemBrandingOffCanvasForm;
+use Drupal\outside_in\Form\SystemMenuOffCanvasForm;
+
+/**
+ * Implements hook_help().
+ */
+function outside_in_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.outside_in':
+      $output = '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The Settings Tray module provides an \'edit mode\' in which clicking on a block opens a slide-out tray which allows configuration to be altered without leaving the page.For more information, see the <a href=":outside-in-documentation">online documentation for the Settings Tray module</a>.', [':outside-in-documentation' => 'https://www.drupal.org/documentation/modules/outside_in']) . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Editing blocks on the same page in the slide-out tray') . '</dt>';
+      $output .= '</dl>';
+      return ['#markup' => $output];
+  }
+}
+
+/**
+ * Implements hook_contextual_links_view_alter().
+ *
+ * Change Configure Blocks into off_canvas links.
+ */
+function outside_in_contextual_links_view_alter(&$element, $items) {
+  if (isset($element['#links']['outside-inblock-configure'])) {
+    // Place outside_in link first.
+    $outside_in_link = $element['#links']['outside-inblock-configure'];
+    unset($element['#links']['outside-inblock-configure']);
+    $element['#links'] = ['outside-inblock-configure' => $outside_in_link] + $element['#links'];
+
+    // If this is content block change title to avoid duplicate "Quick Edit".
+    if (isset($element['#links']['block-contentblock-edit'])) {
+      $element['#links']['outside-inblock-configure']['title'] = t('Quick edit settings');
+    }
+
+    $element['#attached']['library'][] = 'outside_in/drupal.off_canvas';
+  }
+}
+
+/**
+ * Implements hook_block_view_alter().
+ */
+function outside_in_block_view_alter(array &$build) {
+  // Force a new 'data-contextual-id' attribute on blocks when this module is
+  // enabled so as not to reuse stale data cached client-side.
+  // @todo Remove when https://www.drupal.org/node/2773591 is fixed.
+  $build['#contextual_links']['outside_in'] = [
+    'route_parameters' => [],
+  ];
+}
+
+/**
+ * Implements hook_element_info_alter().
+ */
+function outside_in_element_info_alter(&$type) {
+  if (isset($type['page'])) {
+    $type['page']['#theme_wrappers']['outside_in_page_wrapper'] = ['#weight' => -1000];
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function outside_in_theme() {
+  return [
+    'outside_in_page_wrapper' => [
+      'variables' => ['children' => NULL],
+    ],
+  ];
+}
+
+/**
+ * Implements hook_entity_type_build().
+ */
+function outside_in_entity_type_build(array &$entity_types) {
+  /* @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
+  $entity_types['block']
+    ->setFormClass('off_canvas', BlockEntityOffCanvasForm::class)
+    ->setLinkTemplate('off_canvas-form', '/admin/structure/block/manage/{block}/off-canvas');
+}
+
+/**
+ * Implements hook_preprocess_HOOK() for block templates.
+ */
+function outside_in_preprocess_block(&$variables) {
+  // The main system block does not contain the block contextual links.
+  if ($variables['plugin_id'] !== 'system_main_block') {
+    // Add class and attributes to all blocks to allow Javascript to target.
+    $variables['attributes']['class'][] = 'outside-in-editable';
+    $variables['attributes']['data-drupal-outsidein'] = 'editable';
+  }
+}
+
+/**
+ * Implements hook_toolbar_alter().
+ *
+ * Alters the 'contextual' toolbar tab if it exists (meaning the user is allowed
+ * to use contextual links) and if they can administer blocks.
+ *
+ * @todo Remove the "administer blocks" requirement in https://www.drupal.org/node/2822965
+ * @see contextual_toolbar()
+ */
+function outside_in_toolbar_alter(&$items) {
+  $items['contextual']['#cache']['contexts'][] = 'user.permissions';
+  if (isset($items['contextual']['tab']) && \Drupal::currentUser()->hasPermission('administer blocks')) {
+    $items['contextual']['#weight'] = -1000;
+    $items['contextual']['#attached']['library'][] = 'outside_in/drupal.outside_in';
+    $items['contextual']['tab']['#attributes']['data-drupal-outsidein'] = 'toggle';
+
+    // Set a class on items to mark whether they should be active in edit mode.
+    // @todo Create a dynamic method for modules to set their own items.
+    //   https://www.drupal.org/node/2784589
+
+    $edit_mode_items = ['contextual', 'block_place'];
+    foreach ($items as $key => $item) {
+      if (!in_array($key, $edit_mode_items) && (!isset($items[$key]['#wrapper_attributes']['class']) || !in_array('hidden', $items[$key]['#wrapper_attributes']['class']))) {
+        $items[$key]['#wrapper_attributes']['class'][] = 'edit-mode-inactive';
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_block_alter().
+ */
+function outside_in_block_alter(&$definitions) {
+  if (!empty($definitions['system_branding_block'])) {
+    $definitions['system_branding_block']['forms']['off_canvas'] = SystemBrandingOffCanvasForm::class;
+  }
+
+  // Since menu blocks use derivatives, check the definition ID instead of
+  // relying on the plugin ID.
+  foreach ($definitions as &$definition) {
+    if ($definition['id'] === 'system_menu_block') {
+      $definition['forms']['off_canvas'] = SystemMenuOffCanvasForm::class;
+    }
+  }
+}
+
+/**
+ * Implements hook_css_alter().
+ */
+function outside_in_css_alter(&$css, AttachedAssetsInterface $assets) {
+  // @todo Remove once conditional ordering is introduced in
+  //   https://www.drupal.org/node/1945262.
+  $path = drupal_get_path('module', 'outside_in') . '/css/outside_in.theme.css';
+  if (isset($css[$path])) {
+    // Use 200 to come after CSS_AGGREGATE_THEME.
+    $css[$path]['group'] = 200;
+  }
+}
diff --git a/core/modules/settings_tray/settings_tray.routing.yml b/core/modules/outside_in/outside_in.routing.yml
similarity index 57%
rename from core/modules/settings_tray/settings_tray.routing.yml
rename to core/modules/outside_in/outside_in.routing.yml
index 01109e4c79..18a564c304 100644
--- a/core/modules/settings_tray/settings_tray.routing.yml
+++ b/core/modules/outside_in/outside_in.routing.yml
@@ -2,7 +2,6 @@ entity.block.off_canvas_form:
   path: '/admin/structure/block/manage/{block}/off-canvas'
   defaults:
     _entity_form: 'block.off_canvas'
-    _title_callback: '\Drupal\settings_tray\Block\BlockEntityOffCanvasForm::title'
+    _title_callback: '\Drupal\outside_in\Block\BlockEntityOffCanvasForm::title'
   requirements:
     _permission: 'administer blocks'
-    _access_block_plugin_has_settings_tray_form: 'TRUE'
diff --git a/core/modules/outside_in/outside_in.services.yml b/core/modules/outside_in/outside_in.services.yml
new file mode 100644
index 0000000000..ce8214697a
--- /dev/null
+++ b/core/modules/outside_in/outside_in.services.yml
@@ -0,0 +1,6 @@
+services:
+  main_content_renderer.off_canvas:
+    class: Drupal\outside_in\Render\MainContent\OffCanvasRenderer
+    arguments: ['@title_resolver', '@renderer']
+    tags:
+      - { name: render.main_content_renderer, format: drupal_dialog.off_canvas }
diff --git a/core/modules/settings_tray/src/Ajax/OpenOffCanvasDialogCommand.php b/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
similarity index 98%
rename from core/modules/settings_tray/src/Ajax/OpenOffCanvasDialogCommand.php
rename to core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
index c49c42e02b..c5e2b2a5d1 100644
--- a/core/modules/settings_tray/src/Ajax/OpenOffCanvasDialogCommand.php
+++ b/core/modules/outside_in/src/Ajax/OpenOffCanvasDialogCommand.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray\Ajax;
+namespace Drupal\outside_in\Ajax;
 
 use Drupal\Core\Ajax\OpenDialogCommand;
 
diff --git a/core/modules/settings_tray/src/Block/BlockEntityOffCanvasForm.php b/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
similarity index 97%
rename from core/modules/settings_tray/src/Block/BlockEntityOffCanvasForm.php
rename to core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
index 2c6f80d6e1..d2ff362bf8 100644
--- a/core/modules/settings_tray/src/Block/BlockEntityOffCanvasForm.php
+++ b/core/modules/outside_in/src/Block/BlockEntityOffCanvasForm.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray\Block;
+namespace Drupal\outside_in\Block;
 
 use Drupal\block\BlockForm;
 use Drupal\block\BlockInterface;
@@ -111,7 +111,7 @@ protected function submitVisibility(array $form, FormStateInterface $form_state)
    */
   protected function getPluginForm(BlockPluginInterface $block) {
     if ($block instanceof PluginWithFormsInterface) {
-      return $this->pluginFormFactory->createInstance($block, 'settings_tray', 'configure');
+      return $this->pluginFormFactory->createInstance($block, 'off_canvas', 'configure');
     }
     return $block;
   }
diff --git a/core/modules/settings_tray/src/Form/SystemBrandingOffCanvasForm.php b/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
similarity index 97%
rename from core/modules/settings_tray/src/Form/SystemBrandingOffCanvasForm.php
rename to core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
index 0b4290e2fa..5ecfc77bd8 100644
--- a/core/modules/settings_tray/src/Form/SystemBrandingOffCanvasForm.php
+++ b/core/modules/outside_in/src/Form/SystemBrandingOffCanvasForm.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray\Form;
+namespace Drupal\outside_in\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
@@ -11,7 +11,7 @@
 /**
  * The off-canvas form handler for the SystemBrandingBlock.
  *
- * @see settings_tray_block_alter()
+ * @see outside_in_block_alter()
  *
  * @internal
  */
diff --git a/core/modules/settings_tray/src/Form/SystemMenuOffCanvasForm.php b/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
similarity index 98%
rename from core/modules/settings_tray/src/Form/SystemMenuOffCanvasForm.php
rename to core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
index 15d19a87f9..554b13057c 100644
--- a/core/modules/settings_tray/src/Form/SystemMenuOffCanvasForm.php
+++ b/core/modules/outside_in/src/Form/SystemMenuOffCanvasForm.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray\Form;
+namespace Drupal\outside_in\Form;
 
 use Drupal\Component\Plugin\PluginInspectionInterface;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
@@ -18,7 +18,7 @@
 /**
  * The off-canvas form handler for the SystemMenuBlock.
  *
- * @see settings_tray_block_alter()
+ * @see outside_in_block_alter()
  *
  * @internal
  */
diff --git a/core/modules/settings_tray/src/Render/MainContent/OffCanvasRenderer.php b/core/modules/outside_in/src/Render/MainContent/OffCanvasRenderer.php
similarity index 91%
rename from core/modules/settings_tray/src/Render/MainContent/OffCanvasRenderer.php
rename to core/modules/outside_in/src/Render/MainContent/OffCanvasRenderer.php
index 835503013f..8bcaa578d4 100644
--- a/core/modules/settings_tray/src/Render/MainContent/OffCanvasRenderer.php
+++ b/core/modules/outside_in/src/Render/MainContent/OffCanvasRenderer.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Drupal\settings_tray\Render\MainContent;
+namespace Drupal\outside_in\Render\MainContent;
 
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Controller\TitleResolverInterface;
 use Drupal\Core\Render\MainContent\DialogRenderer;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\settings_tray\Ajax\OpenOffCanvasDialogCommand;
+use Drupal\outside_in\Ajax\OpenOffCanvasDialogCommand;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -47,7 +47,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
     $content = $this->renderer->renderRoot($main_content);
     // Attach the library necessary for using the OpenOffCanvasDialogCommand and
     // set the attachments for this Ajax response.
-    $main_content['#attached']['library'][] = 'settings_tray/drupal.off_canvas';
+    $main_content['#attached']['library'][] = 'outside_in/drupal.off_canvas';
     $response->setAttachments($main_content['#attached']);
 
     // If the main content doesn't provide a title, use the title resolver.
diff --git a/core/modules/settings_tray/src/Tests/Ajax/OffCanvasDialogTest.php b/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
similarity index 94%
rename from core/modules/settings_tray/src/Tests/Ajax/OffCanvasDialogTest.php
rename to core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
index 448685cd77..ce3356f112 100644
--- a/core/modules/settings_tray/src/Tests/Ajax/OffCanvasDialogTest.php
+++ b/core/modules/outside_in/src/Tests/Ajax/OffCanvasDialogTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray\Tests\Ajax;
+namespace Drupal\outside_in\Tests\Ajax;
 
 use Drupal\ajax_test\Controller\AjaxTestController;
 use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
@@ -9,7 +9,7 @@
 /**
  * Performs tests on opening and manipulating dialogs via AJAX commands.
  *
- * @group settings_tray
+ * @group outside_in
  */
 class OffCanvasDialogTest extends AjaxTestBase {
 
@@ -18,7 +18,7 @@ class OffCanvasDialogTest extends AjaxTestBase {
    *
    * @var array
    */
-  public static $modules = ['settings_tray'];
+  public static $modules = ['outside_in'];
 
   /**
    * Test sending AJAX requests to open and manipulate off-canvas dialog.
diff --git a/core/modules/settings_tray/templates/settings-tray-page-wrapper.html.twig b/core/modules/outside_in/templates/outside-in-page-wrapper.html.twig
similarity index 92%
rename from core/modules/settings_tray/templates/settings-tray-page-wrapper.html.twig
rename to core/modules/outside_in/templates/outside-in-page-wrapper.html.twig
index af84f4fac2..11c7f5311d 100644
--- a/core/modules/settings_tray/templates/settings-tray-page-wrapper.html.twig
+++ b/core/modules/outside_in/templates/outside-in-page-wrapper.html.twig
@@ -5,7 +5,7 @@
  *
  * For consistent wrapping to {{ page }} render in all themes. The
  * "data-off-canvas-main-canvas" attribute is required by the off-canvas dialog.
- * This is used by the settings_tray/drupal.off_canvas library to select the
+ * This is used by the outside_in/drupal.off_canvas library to select the
  * "main canvas" page element as opposed to the "off canvas" which is the tray
  * itself. The "main canvas" element must be resized according to the width of
  * the "off canvas" tray so that no portion of the "main canvas" is obstructed
diff --git a/core/modules/settings_tray/tests/modules/off_canvas_test/off_canvas_test.info.yml b/core/modules/outside_in/tests/modules/off_canvas_test/off_canvas_test.info.yml
similarity index 89%
rename from core/modules/settings_tray/tests/modules/off_canvas_test/off_canvas_test.info.yml
rename to core/modules/outside_in/tests/modules/off_canvas_test/off_canvas_test.info.yml
index f6cd53947c..8c6cc80242 100644
--- a/core/modules/settings_tray/tests/modules/off_canvas_test/off_canvas_test.info.yml
+++ b/core/modules/outside_in/tests/modules/off_canvas_test/off_canvas_test.info.yml
@@ -6,4 +6,4 @@ version: VERSION
 core: 8.x
 dependencies:
   - block
-  - settings_tray
+  - outside_in
diff --git a/core/modules/settings_tray/tests/modules/off_canvas_test/off_canvas_test.routing.yml b/core/modules/outside_in/tests/modules/off_canvas_test/off_canvas_test.routing.yml
similarity index 100%
rename from core/modules/settings_tray/tests/modules/off_canvas_test/off_canvas_test.routing.yml
rename to core/modules/outside_in/tests/modules/off_canvas_test/off_canvas_test.routing.yml
diff --git a/core/modules/settings_tray/tests/modules/off_canvas_test/src/Controller/TestController.php b/core/modules/outside_in/tests/modules/off_canvas_test/src/Controller/TestController.php
similarity index 94%
rename from core/modules/settings_tray/tests/modules/off_canvas_test/src/Controller/TestController.php
rename to core/modules/outside_in/tests/modules/off_canvas_test/src/Controller/TestController.php
index 3658bfd699..6164b06fc2 100644
--- a/core/modules/settings_tray/tests/modules/off_canvas_test/src/Controller/TestController.php
+++ b/core/modules/outside_in/tests/modules/off_canvas_test/src/Controller/TestController.php
@@ -55,7 +55,7 @@ public function linksDisplay() {
         ],
         '#attached' => [
           'library' => [
-            'settings_tray/drupal.settings_tray',
+            'outside_in/drupal.outside_in',
           ],
         ],
       ],
@@ -73,7 +73,7 @@ public function linksDisplay() {
         ],
         '#attached' => [
           'library' => [
-            'settings_tray/drupal.settings_tray',
+            'outside_in/drupal.outside_in',
           ],
         ],
       ],
@@ -88,7 +88,7 @@ public function linksDisplay() {
         ],
         '#attached' => [
           'library' => [
-            'settings_tray/drupal.settings_tray',
+            'outside_in/drupal.outside_in',
           ],
         ],
       ],
@@ -131,7 +131,7 @@ public function otherDialogLinks() {
       ],
       '#attached' => [
         'library' => [
-          'settings_tray/drupal.settings_tray',
+          'outside_in/drupal.outside_in',
         ],
       ],
     ];
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/settings_tray_test.info.yml b/core/modules/outside_in/tests/modules/outside_in_test/outside_in_test.info.yml
similarity index 90%
rename from core/modules/settings_tray/tests/modules/settings_tray_test/settings_tray_test.info.yml
rename to core/modules/outside_in/tests/modules/outside_in_test/outside_in_test.info.yml
index f4f6e80da9..590f559329 100644
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/settings_tray_test.info.yml
+++ b/core/modules/outside_in/tests/modules/outside_in_test/outside_in_test.info.yml
@@ -6,4 +6,4 @@ version: VERSION
 core: 8.x
 dependencies:
   - block
-  - settings_tray
+  - outside_in
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/ValidationErrorBlock.php b/core/modules/outside_in/tests/modules/outside_in_test/src/Plugin/Block/ValidationErrorBlock.php
similarity index 88%
rename from core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/ValidationErrorBlock.php
rename to core/modules/outside_in/tests/modules/outside_in_test/src/Plugin/Block/ValidationErrorBlock.php
index f54b1a3f1d..a78d75f399 100644
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/ValidationErrorBlock.php
+++ b/core/modules/outside_in/tests/modules/outside_in_test/src/Plugin/Block/ValidationErrorBlock.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\settings_tray_test\Plugin\Block;
+namespace Drupal\outside_in_test\Plugin\Block;
 
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -9,7 +9,7 @@
  * Provides a 'Block with validation error' test block.
  *
  * @Block(
- *   id = "settings_tray_test_validation",
+ *   id = "outside_in_test_validation",
  *   admin_label = @Translation("Block with validation error")
  * )
  */
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test_css/css/css_fix.theme.css b/core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css
similarity index 84%
rename from core/modules/settings_tray/tests/modules/settings_tray_test_css/css/css_fix.theme.css
rename to core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css
index 071afce28a..eb462388ba 100644
--- a/core/modules/settings_tray/tests/modules/settings_tray_test_css/css/css_fix.theme.css
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/css/css_fix.theme.css
@@ -1,5 +1,5 @@
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode a,
-.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode input {
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode a,
+.dialog-off-canvas__main-canvas.js-outside-in-edit-mode input {
   pointer-events: inherit !important;
 }
 /**
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.info.yml b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml
similarity index 89%
rename from core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.info.yml
rename to core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml
index cdbb125903..c7df21f183 100644
--- a/core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.info.yml
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.info.yml
@@ -5,4 +5,4 @@ package: Testing
 version: VERSION
 core: 8.x
 dependencies:
-- settings_tray
+- outside_in
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.libraries.yml b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.libraries.yml
similarity index 100%
rename from core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.libraries.yml
rename to core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.libraries.yml
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.module b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module
similarity index 58%
rename from core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.module
rename to core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module
index 3375399395..2cd32e2bf7 100644
--- a/core/modules/settings_tray/tests/modules/settings_tray_test_css/settings_tray_test_css.module
+++ b/core/modules/outside_in/tests/modules/outside_in_test_css/outside_in_test_css.module
@@ -10,7 +10,7 @@
 /**
  * Implements hook_page_attachments().
  */
-function settings_tray_test_css_page_attachments(array &$attachments) {
+function outside_in_test_css_page_attachments(array &$attachments) {
   // Unconditionally attach an asset to the page.
-  $attachments['#attached']['library'][] = 'settings_tray_test_css/drupal.css_fix';
+  $attachments['#attached']['library'][] = 'outside_in_test_css/drupal.css_fix';
 }
diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/OffCanvasTest.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
similarity index 96%
rename from core/modules/settings_tray/tests/src/FunctionalJavascript/OffCanvasTest.php
rename to core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
index 347eaeaea9..2f64d9fe2c 100644
--- a/core/modules/settings_tray/tests/src/FunctionalJavascript/OffCanvasTest.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OffCanvasTest.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Drupal\Tests\settings_tray\FunctionalJavascript;
+namespace Drupal\Tests\outside_in\FunctionalJavascript;
 
 /**
  * Tests the off-canvas dialog functionality.
  *
- * @group settings_tray
+ * @group outside_in
  */
-class OffCanvasTest extends SettingsTrayJavascriptTestBase {
+class OffCanvasTest extends OutsideInJavascriptTestBase {
 
   /**
    * {@inheritdoc}
@@ -16,7 +16,7 @@ class OffCanvasTest extends SettingsTrayJavascriptTestBase {
     'block',
     'system',
     'toolbar',
-    'settings_tray',
+    'outside_in',
     'off_canvas_test',
   ];
 
diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
similarity index 66%
rename from core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php
rename to core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
index d4d858eb53..daf3d1f737 100644
--- a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
@@ -1,23 +1,18 @@
 <?php
 
-namespace Drupal\Tests\settings_tray\FunctionalJavascript;
+namespace Drupal\Tests\outside_in\FunctionalJavascript;
 
 use Drupal\block\Entity\Block;
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
-use Drupal\settings_tray_test\Plugin\Block\SettingsTrayFormAnnotationIsClassBlock;
-use Drupal\settings_tray_test\Plugin\Block\SettingsTrayFormAnnotationNoneBlock;
-use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
 use Drupal\user\Entity\Role;
 
 /**
  * Testing opening and saving block forms in the off-canvas dialog.
  *
- * @group settings_tray
+ * @group outside_in
  */
-class SettingsTrayBlockFormTest extends SettingsTrayJavascriptTestBase {
-
-  use ContextualLinkClickTrait;
+class OutsideInBlockFormTest extends OutsideInJavascriptTestBase {
 
   const TOOLBAR_EDIT_LINK_SELECTOR = '#toolbar-bar div.contextual-toolbar-tab button';
 
@@ -33,15 +28,14 @@ class SettingsTrayBlockFormTest extends SettingsTrayJavascriptTestBase {
     'breakpoint',
     'toolbar',
     'contextual',
-    'settings_tray',
+    'outside_in',
     'quickedit',
     'search',
     'block_content',
-    'settings_tray_test',
+    'outside_in_test',
     // Add test module to override CSS pointer-events properties because they
     // cause test failures.
-    'settings_tray_test_css',
-    'settings_tray_test',
+    'outside_in_test_css',
   ];
 
   /**
@@ -69,151 +63,120 @@ protected function setUp() {
    *
    * @dataProvider providerTestBlocks
    */
-  public function testBlocks($theme, $block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
+  public function testBlocks($block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
     $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
-    $this->enableTheme($theme);
-    $block = $this->placeBlock($block_plugin);
-    $block_selector = str_replace('_', '-', $this->getBlockSelector($block));
-    $block_id = $block->id();
-    $this->drupalGet('user');
+    foreach ($this->getTestThemes() as $theme) {
+      $this->enableTheme($theme);
+      $block = $this->placeBlock($block_plugin);
+      $block_selector = str_replace('_', '-', $this->getBlockSelector($block));
+      $block_id = $block->id();
+      $this->drupalGet('user');
 
-    $link = $page->find('css', "$block_selector .contextual-links li a");
-    $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block.");
-    $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href'));
-
-    if (isset($toolbar_item)) {
-      // Check that you can open a toolbar tray and it will be closed after
-      // entering edit mode.
-      if ($element = $page->find('css', "#toolbar-administration a.is-active")) {
-        // If a tray was open from page load close it.
-        $element->click();
-        $this->waitForNoElement("#toolbar-administration a.is-active");
+      $link = $page->find('css', "$block_selector .contextual-links li a");
+      $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block.");
+      $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href'));
+
+      if (isset($toolbar_item)) {
+        // Check that you can open a toolbar tray and it will be closed after
+        // entering edit mode.
+        if ($element = $page->find('css', "#toolbar-administration a.is-active")) {
+          // If a tray was open from page load close it.
+          $element->click();
+          $this->waitForNoElement("#toolbar-administration a.is-active");
+        }
+        $page->find('css', $toolbar_item)->click();
+        $this->assertElementVisibleAfterWait('css', "{$toolbar_item}.is-active");
+      }
+      $this->enableEditMode();
+      if (isset($toolbar_item)) {
+        $this->waitForNoElement("{$toolbar_item}.is-active");
+      }
+      $this->openBlockForm($block_selector);
+      switch ($block_plugin) {
+        case 'system_powered_by_block':
+          // Confirm "Display Title" is not checked.
+          $web_assert->checkboxNotChecked('settings[label_display]');
+          // Confirm Title is not visible.
+          $this->assertEquals($this->isLabelInputVisible(), FALSE, 'Label is not visible');
+          $page->checkField('settings[label_display]');
+          $this->assertEquals($this->isLabelInputVisible(), TRUE, 'Label is visible');
+          // Fill out form, save the form.
+          $page->fillField('settings[label]', $new_page_text);
+
+          break;
+
+        case 'system_branding_block':
+          // Fill out form, save the form.
+          $page->fillField('settings[site_information][site_name]', $new_page_text);
+          break;
       }
-      $page->find('css', $toolbar_item)->click();
-      $this->assertElementVisibleAfterWait('css', "{$toolbar_item}.is-active");
-    }
-    $this->enableEditMode();
-    if (isset($toolbar_item)) {
-      $this->waitForNoElement("{$toolbar_item}.is-active");
-    }
-    $this->openBlockForm($block_selector);
-    switch ($block_plugin) {
-      case 'system_powered_by_block':
-        // Confirm "Display Title" is not checked.
-        $web_assert->checkboxNotChecked('settings[label_display]');
-        // Confirm Title is not visible.
-        $this->assertEquals($this->isLabelInputVisible(), FALSE, 'Label is not visible');
-        $page->checkField('settings[label_display]');
-        $this->assertEquals($this->isLabelInputVisible(), TRUE, 'Label is visible');
-        // Fill out form, save the form.
-        $page->fillField('settings[label]', $new_page_text);
-
-        break;
-
-      case 'system_branding_block':
-        // Fill out form, save the form.
-        $page->fillField('settings[site_information][site_name]', $new_page_text);
-        break;
-
-      case 'settings_tray_test_class':
-        $web_assert->elementExists('css', '[data-drupal-selector="edit-settings-some-setting"]');
-        break;
-    }
 
-    if (isset($new_page_text)) {
-      $page->pressButton($button_text);
-      // Make sure the changes are present.
-      $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)";
-      $this->assertElementVisibleAfterWait('css', $new_page_text_locator);
-      // The page is loaded with the new change but make sure page is
-      // completely loaded.
-      $this->assertPageLoadComplete();
-    }
+      if (isset($new_page_text)) {
+        $page->pressButton($button_text);
+        // Make sure the changes are present.
+        $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)";
+        $this->assertElementVisibleAfterWait('css', $new_page_text_locator);
+        $web_assert->assertWaitOnAjaxRequest();
+      }
 
-    $this->openBlockForm($block_selector);
+      $this->openBlockForm($block_selector);
 
-    $this->disableEditMode();
-    // Canvas should close when editing module is closed.
-    $this->waitForOffCanvasToClose();
+      $this->disableEditMode();
+      // Canvas should close when editing module is closed.
+      $this->waitForOffCanvasToClose();
 
-    $this->enableEditMode();
+      $this->enableEditMode();
 
-    // Open block form by clicking a element inside the block.
-    // This confirms that default action for links and form elements is
-    // suppressed.
-    $this->openBlockForm("$block_selector {$element_selector}", $block_selector);
-    $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing');
-    $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode');
-    // Simulate press the Escape key.
-    $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));');
-    $this->waitForOffCanvasToClose();
-    $this->getSession()->wait(100);
-    $this->assertEditModeDisabled();
-    $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.');
-    $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing');
-    $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode');
+      // Open block form by clicking a element inside the block.
+      // This confirms that default action for links and form elements is
+      // suppressed.
+      $this->openBlockForm("$block_selector {$element_selector}", $block_selector);
+      $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing');
+      $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
+      // Simulate press the Escape key.
+      $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));');
+      $this->waitForOffCanvasToClose();
+      $this->getSession()->wait(100);
+      $this->assertEditModeDisabled();
+      $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.');
+      $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing');
+      $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-outside-in-edit-mode');
+      // Delete the block that was placed for the current theme.
+      $block->delete();
+    }
   }
 
   /**
    * Dataprovider for testBlocks().
    */
   public function providerTestBlocks() {
-    $blocks = [];
-    foreach ($this->getTestThemes() as $theme) {
-      $blocks += [
-        "$theme: block-powered" => [
-          'theme' => $theme,
-          'block_plugin' => 'system_powered_by_block',
-          'new_page_text' => 'Can you imagine anyone showing the label on this block',
-          'element_selector' => 'span a',
-          'label_selector' => 'h2',
-          'button_text' => 'Save Powered by Drupal',
-          'toolbar_item' => '#toolbar-item-user',
-        ],
-        "$theme: block-branding" => [
-          'theme' => $theme,
-          'block_plugin' => 'system_branding_block',
-          'new_page_text' => 'The site that will live a very short life',
-          'element_selector' => "a[rel='home']:last-child",
-          'label_selector' => "a[rel='home']:last-child",
-          'button_text' => 'Save Site branding',
-          'toolbar_item' => '#toolbar-item-administration',
-        ],
-        "$theme: block-search" => [
-          'theme' => $theme,
-          'block_plugin' => 'search_form_block',
-          'new_page_text' => NULL,
-          'element_selector' => '#edit-submit',
-          'label_selector' => 'h2',
-          'button_text' => 'Save Search form',
-          'toolbar_item' => NULL,
-        ],
-        // This is the functional JS test coverage accompanying
-        // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations().
-        "$theme: " . SettingsTrayFormAnnotationIsClassBlock::class => [
-          'theme' => $theme,
-          'block_plugin' => 'settings_tray_test_class',
-          'new_page_text' => NULL,
-          'element_selector' => 'span',
-          'label_selector' => NULL,
-          'button_text' => NULL,
-          'toolbar_item' => NULL,
-        ],
-        // This is the functional JS test coverage accompanying
-        // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations().
-        "$theme: " . SettingsTrayFormAnnotationNoneBlock::class => [
-          'theme' => $theme,
-          'block_plugin' => 'settings_tray_test_none',
-          'new_page_text' => NULL,
-          'element_selector' => 'span',
-          'label_selector' => NULL,
-          'button_text' => NULL,
-          'toolbar_item' => NULL,
-        ],
-      ];
-    }
-
+    $blocks = [
+      'block-powered' => [
+        'block_plugin' => 'system_powered_by_block',
+        'new_page_text' => 'Can you imagine anyone showing the label on this block',
+        'element_selector' => 'span a',
+        'label_selector' => 'h2',
+        'button_text' => 'Save Powered by Drupal',
+        'toolbar_item' => '#toolbar-item-user',
+      ],
+      'block-branding' => [
+        'block_plugin' => 'system_branding_block',
+        'new_page_text' => 'The site that will live a very short life',
+        'element_selector' => "a[rel='home']:last-child",
+        'label_selector' => "a[rel='home']:last-child",
+        'button_text' => 'Save Site branding',
+        'toolbar_item' => '#toolbar-item-administration',
+      ],
+      'block-search' => [
+        'block_plugin' => 'search_form_block',
+        'new_page_text' => NULL,
+        'element_selector' => '#edit-submit',
+        'label_selector' => 'h2',
+        'button_text' => 'Save Search form',
+        'toolbar_item' => NULL,
+      ],
+    ];
     return $blocks;
   }
 
@@ -277,7 +240,7 @@ protected function openBlockForm($block_selector, $contextual_link_container = '
     $this->assertNotEmpty($contextual_link);
     // When page first loads Edit Mode is not triggered until first contextual
     // link is added.
-    $this->assertElementVisibleAfterWait('css', '.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode');
+    $this->assertElementVisibleAfterWait('css', '.dialog-off-canvas__main-canvas.js-outside-in-edit-mode');
     // Ensure that all other Ajax activity is completed.
     $this->assertSession()->assertWaitOnAjaxRequest();
     $this->click($block_selector);
@@ -413,8 +376,8 @@ protected function assertEditModeEnabled() {
     $web_assert->elementNotExists('css', '.contextual .trigger.visually-hidden');
     // The toolbar edit button should read "Editing".
     $web_assert->elementContains('css', static::TOOLBAR_EDIT_LINK_SELECTOR, 'Editing');
-    // The main canvas element should have the "js-settings-tray-edit-mode" class.
-    $web_assert->elementExists('css', '.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode');
+    // The main canvas element should have the "js-outside-in-edit-mode" class.
+    $web_assert->elementExists('css', '.dialog-off-canvas__main-canvas.js-outside-in-edit-mode');
   }
 
   /**
@@ -428,9 +391,9 @@ protected function assertEditModeDisabled() {
     $web_assert->elementNotExists('css', '.contextual .trigger:not(.visually-hidden)');
     // The toolbar edit button should read "Edit".
     $web_assert->elementContains('css', static::TOOLBAR_EDIT_LINK_SELECTOR, 'Edit');
-    // The main canvas element should NOT have the "js-settings-tray-edit-mode"
+    // The main canvas element should NOT have the "js-outside-in-edit-mode"
     // class.
-    $web_assert->elementNotExists('css', '.dialog-off-canvas__main-canvas.js-settings-tray-edit-mode');
+    $web_assert->elementNotExists('css', '.dialog-off-canvas__main-canvas.js-outside-in-edit-mode');
   }
 
   /**
@@ -503,7 +466,7 @@ protected function createBlockContentType($label, $create_body = FALSE) {
    * Tests that contextual links in custom blocks are changed.
    *
    * "Quick edit" is quickedit.module link.
-   * "Quick edit settings" is settings_tray.module link.
+   * "Quick edit settings" is outside_in.module link.
    */
   public function testCustomBlockLinks() {
     $this->drupalGet('user');
@@ -551,14 +514,14 @@ public function testValidationMessages() {
     $web_assert = $this->assertSession();
     foreach ($this->getTestThemes() as $theme) {
       $this->enableTheme($theme);
-      $block = $this->placeBlock('settings_tray_test_validation');
+      $block = $this->placeBlock('outside_in_test_validation');
       $this->drupalGet('user');
       $this->enableEditMode();
       $this->openBlockForm($this->getBlockSelector($block));
       $page->pressButton('Save Block with validation error');
       $web_assert->assertWaitOnAjaxRequest();
-      // The settings_tray_test_validation test plugin form always has a
-      // validation error.
+      // The outside_in_test_validation test plugin form always has a validation
+      // error.
       $web_assert->elementContains('css', '#drupal-off-canvas', 'Sorry system error. Please save again');
       $this->disableEditMode();
       $block->delete();
diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayJavascriptTestBase.php b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
similarity index 60%
rename from core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayJavascriptTestBase.php
rename to core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
index 6dd026c5ca..2ce2bf64d6 100644
--- a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayJavascriptTestBase.php
+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
@@ -1,47 +1,25 @@
 <?php
 
-namespace Drupal\Tests\settings_tray\FunctionalJavascript;
+namespace Drupal\Tests\outside_in\FunctionalJavascript;
 
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 
 /**
  * Base class contains common test functionality for the Settings Tray module.
  */
-abstract class SettingsTrayJavascriptTestBase extends JavascriptTestBase {
+abstract class OutsideInJavascriptTestBase extends JavascriptTestBase {
 
   /**
    * {@inheritdoc}
    */
   protected function drupalGet($path, array $options = [], array $headers = []) {
     $return = parent::drupalGet($path, $options, $headers);
-    $this->assertPageLoadComplete();
-    return $return;
-  }
 
-  /**
-   * Assert the page is completely loaded.
-   *
-   * Ajax requests may happen after page loads. Also for users who have access
-   * to contextual links the contextual link placeholders will be filled after
-   * the page is received.
-   */
-  protected function assertPageLoadComplete() {
+    // After the page loaded we need to additionally wait until the settings
+    // tray Ajax activity is done.
     $this->assertSession()->assertWaitOnAjaxRequest();
-    if ($this->loggedInUser && $this->loggedInUser->hasPermission('access contextual links')) {
-      $this->assertAllContextualLinksLoaded();
-    }
-  }
 
-  /**
-   * Assert all contextual link areas have be loaded.
-   *
-   * Contextual link placeholders will be filled after
-   * the page is received.
-   *
-   * @todo Move this function to https://www.drupal.org/node/2821724.
-   */
-  protected function assertAllContextualLinksLoaded() {
-    $this->waitForNoElement('[data-contextual-id]:empty');
+    return $return;
   }
 
   /**
@@ -94,10 +72,52 @@ protected function getTray() {
    *   (optional) Timeout in milliseconds, defaults to 10000.
    */
   protected function waitForNoElement($selector, $timeout = 10000) {
-    $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)";
+    $condition = "(jQuery('$selector').length == 0)";
     $this->assertJsCondition($condition, $timeout);
   }
 
+  /**
+   * Clicks a contextual link.
+   *
+   * @todo Remove this function when related trait added in
+   *   https://www.drupal.org/node/2821724.
+   *
+   * @param string $selector
+   *   The selector for the element that contains the contextual link.
+   * @param string $link_locator
+   *   The link id, title, or text.
+   * @param bool $force_visible
+   *   If true then the button will be forced to visible so it can be clicked.
+   */
+  protected function clickContextualLink($selector, $link_locator, $force_visible = TRUE) {
+    if ($force_visible) {
+      $this->toggleContextualTriggerVisibility($selector);
+    }
+
+    $element = $this->getSession()->getPage()->find('css', $selector);
+    $element->find('css', '.contextual button')->press();
+    $element->findLink($link_locator)->click();
+
+    if ($force_visible) {
+      $this->toggleContextualTriggerVisibility($selector);
+    }
+  }
+
+  /**
+   * Toggles the visibility of a contextual trigger.
+   *
+   * @todo Remove this function when related trait added in
+   *   https://www.drupal.org/node/2821724.
+   *
+   * @param string $selector
+   *   The selector for the element that contains the contextual link.
+   */
+  protected function toggleContextualTriggerVisibility($selector) {
+    // Hovering over the element itself with should be enough, but does not
+    // work. Manually remove the visually-hidden class.
+    $this->getSession()->executeScript("jQuery('{$selector} .contextual .trigger').toggleClass('visually-hidden');");
+  }
+
   /**
    * Get themes to test.
    *
diff --git a/core/modules/settings_tray/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php b/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
similarity index 81%
rename from core/modules/settings_tray/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
rename to core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
index 5985cbdaf7..314fd1c2f3 100644
--- a/core/modules/settings_tray/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
+++ b/core/modules/outside_in/tests/src/Unit/Ajax/OpenOffCanvasDialogCommandTest.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Drupal\Tests\settings_tray\Unit\Ajax;
+namespace Drupal\Tests\outside_in\Unit\Ajax;
 
-use Drupal\settings_tray\Ajax\OpenOffCanvasDialogCommand;
+use Drupal\outside_in\Ajax\OpenOffCanvasDialogCommand;
 use Drupal\Tests\UnitTestCase;
 
 /**
- * @coversDefaultClass \Drupal\settings_tray\Ajax\OpenOffCanvasDialogCommand
- * @group settings_tray
+ * @coversDefaultClass \Drupal\outside_in\Ajax\OpenOffCanvasDialogCommand
+ * @group outside_in
  */
 class OpenOffCanvasDialogCommandTest extends UnitTestCase {
 
diff --git a/core/modules/page_cache/src/StackMiddleware/PageCache.php b/core/modules/page_cache/src/StackMiddleware/PageCache.php
index cf4d0c1bda..14845e2f26 100644
--- a/core/modules/page_cache/src/StackMiddleware/PageCache.php
+++ b/core/modules/page_cache/src/StackMiddleware/PageCache.php
@@ -144,7 +144,7 @@ protected function lookup(Request $request, $type = self::MASTER_REQUEST, $catch
 
       if ($if_modified_since && $if_none_match
         && $if_none_match == $response->getEtag() // etag must match
-        && $if_modified_since == $last_modified->getTimestamp()) {// if-modified-since must match
+        && $if_modified_since == $last_modified->getTimestamp()) {  // if-modified-since must match
         $response->setStatusCode(304);
         $response->setContent(NULL);
 
diff --git a/core/modules/page_cache/tests/modules/src/Form/TestForm.php b/core/modules/page_cache/tests/modules/src/Form/TestForm.php
index b712ca0c08..7b60343b74 100644
--- a/core/modules/page_cache/tests/modules/src/Form/TestForm.php
+++ b/core/modules/page_cache/tests/modules/src/Form/TestForm.php
@@ -25,6 +25,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
+  public function submitForm(array &$form, FormStateInterface $form_state) { }
 
 }
diff --git a/core/modules/path/src/Form/PathFormBase.php b/core/modules/path/src/Form/PathFormBase.php
index c1b3dfdf56..884d24fb8a 100644
--- a/core/modules/path/src/Form/PathFormBase.php
+++ b/core/modules/path/src/Form/PathFormBase.php
@@ -193,7 +193,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
 
 
     if (!$this->pathValidator->isValid(trim($source, '/'))) {
-      $form_state->setErrorByName('source', t("Either the path '@link_path' is invalid or you do not have access to it.", ['@link_path' => $source]));
+      $form_state->setErrorByName('source', t("The path '@link_path' is either invalid or you do not have access to it.", ['@link_path' => $source]));
     }
   }
 
diff --git a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
index 9b5b67dac1..41063812dd 100644
--- a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
+++ b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
@@ -111,14 +111,6 @@ public function set($property_name, $value, $notify = TRUE) {
     return parent::set($property_name, $value, $notify);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function get($property_name) {
-    $this->ensureLoaded();
-    return parent::get($property_name);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/path/src/Plugin/migrate/source/d6/UrlAlias.php b/core/modules/path/src/Plugin/migrate/source/d6/UrlAlias.php
index c01d364733..3e1f624d27 100644
--- a/core/modules/path/src/Plugin/migrate/source/d6/UrlAlias.php
+++ b/core/modules/path/src/Plugin/migrate/source/d6/UrlAlias.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d6_url_alias",
- *   source_module = "path"
+ *   source_provider = "path"
  * )
  */
 class UrlAlias extends UrlAliasBase {
diff --git a/core/modules/path/src/Plugin/migrate/source/d7/UrlAlias.php b/core/modules/path/src/Plugin/migrate/source/d7/UrlAlias.php
index 58405fdf19..eaaea16608 100644
--- a/core/modules/path/src/Plugin/migrate/source/d7/UrlAlias.php
+++ b/core/modules/path/src/Plugin/migrate/source/d7/UrlAlias.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_url_alias",
- *   source_module = "path"
+ *   source_provider = "path"
  * )
  */
 class UrlAlias extends UrlAliasBase {
diff --git a/core/modules/path/tests/src/Kernel/PathItemTest.php b/core/modules/path/tests/src/Kernel/PathItemTest.php
index 88044c3ab7..9a85a27958 100644
--- a/core/modules/path/tests/src/Kernel/PathItemTest.php
+++ b/core/modules/path/tests/src/Kernel/PathItemTest.php
@@ -70,9 +70,6 @@ public function testPathItem() {
     $loaded_node = $node_storage->load($node->id());
     $this->assertFalse($loaded_node->get('path')->isEmpty());
     $this->assertEquals('/foo', $loaded_node->get('path')->alias);
-    $node_storage->resetCache();
-    $loaded_node = $node_storage->load($node->id());
-    $this->assertEquals('/foo', $loaded_node->get('path')[0]->get('alias')->getValue());
 
     $node_storage->resetCache();
     $loaded_node = $node_storage->load($node->id());
diff --git a/core/modules/quickedit/quickedit.module b/core/modules/quickedit/quickedit.module
index 89d4b86404..051b94834a 100644
--- a/core/modules/quickedit/quickedit.module
+++ b/core/modules/quickedit/quickedit.module
@@ -11,7 +11,6 @@
  * entities, enabling them for in-place editing.
  */
 
-use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
@@ -129,14 +128,14 @@ function quickedit_preprocess_page_title(&$variables) {
  */
 function quickedit_preprocess_field(&$variables) {
   $variables['#cache']['contexts'][] = 'user.permissions';
+  if (!\Drupal::currentUser()->hasPermission('access in-place editing')) {
+    return;
+  }
+
   $element = $variables['element'];
   /** @var $entity \Drupal\Core\Entity\EntityInterface */
   $entity = $element['#object'];
 
-  if (!\Drupal::currentUser()->hasPermission('access in-place editing') || !_quickedit_entity_is_latest_revision($entity)) {
-    return;
-  }
-
   // Quick Edit module only supports view modes, not dynamically defined
   // "display options" (which \Drupal\Core\Field\FieldItemListInterface::view()
   // always names the "_custom" view mode).
@@ -158,40 +157,9 @@ function quickedit_preprocess_field(&$variables) {
  */
 function quickedit_entity_view_alter(&$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
   $build['#cache']['contexts'][] = 'user.permissions';
-  if (!\Drupal::currentUser()->hasPermission('access in-place editing') || !_quickedit_entity_is_latest_revision($entity)) {
+  if (!\Drupal::currentUser()->hasPermission('access in-place editing')) {
     return;
   }
 
   $build['#attributes']['data-quickedit-entity-id'] = $entity->getEntityTypeId() . '/' . $entity->id();
 }
-
-/**
- * Check if a loaded entity is the latest revision.
- *
- * @param \Drupal\Core\Entity\ContentEntityInterface $entity
- *   The entity to check.
- *
- * @return bool
- *   TRUE if the loaded entity is the latest revision, FALSE otherwise.
- *
- * @todo Remove this method once better support for pending revisions is added
- * to core https://www.drupal.org/node/2784201.
- *
- * @internal
- */
-function _quickedit_entity_is_latest_revision(ContentEntityInterface $entity) {
-  $entity_type_manager = \Drupal::entityTypeManager();
-  $entity_definition = $entity_type_manager->getDefinition($entity->getEntityTypeId());
-  if (!$entity_definition->isRevisionable()) {
-    return TRUE;
-  }
-  $revision_ids = $entity_type_manager
-    ->getStorage($entity->getEntityTypeId())
-    ->getQuery()
-    ->allRevisions()
-    ->condition($entity_definition->getKey('id'), $entity->id())
-    ->sort($entity_definition->getKey('revision'), 'DESC')
-    ->range(0, 1)
-    ->execute();
-  return $entity->getLoadedRevisionId() == array_keys($revision_ids)[0];
-}
diff --git a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
index 9ca558a37b..41f26a841f 100644
--- a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
+++ b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php
@@ -42,13 +42,6 @@ class QuickEditLoadingTest extends WebTestBase {
    */
   protected $authorUser;
 
-  /**
-   * A test node.
-   *
-   * @var \Drupal\node\NodeInterface
-   */
-  protected $testNode;
-
   /**
    * A author user with permissions to access in-place editor.
    *
@@ -81,7 +74,7 @@ protected function setUp() {
     $node_type->save();
 
     // Create one node of the above node type using the above text format.
-    $this->testNode = $this->drupalCreateNode([
+    $this->drupalCreateNode([
       'type' => 'article',
       'body' => [
         0 => [
@@ -324,26 +317,6 @@ public function testUserWithPermission() {
     }
   }
 
-  /**
-   * Test quickedit does not appear for entities with pending revisions.
-   */
-  public function testWithPendingRevision() {
-    $this->drupalLogin($this->editorUser);
-
-    $this->drupalGet('node/' . $this->testNode->id());
-    $this->assertRaw('data-quickedit-entity-id="node/' . $this->testNode->id() . '"');
-    $this->assertRaw('data-quickedit-field-id="node/' . $this->testNode->id() . '/title/' . $this->testNode->language()->getId() . '/full"');
-
-    $this->testNode->title = 'Updated node';
-    $this->testNode->setNewRevision(TRUE);
-    $this->testNode->isDefaultRevision(FALSE);
-    $this->testNode->save();
-
-    $this->drupalGet('node/' . $this->testNode->id());
-    $this->assertNoRaw('data-quickedit-entity-id="node/' . $this->testNode->id() . '"');
-    $this->assertNoRaw('data-quickedit-field-id="node/' . $this->testNode->id() . '/title/' . $this->testNode->language()->getId() . '/full"');
-  }
-
   /**
    * Tests the loading of Quick Edit for the title base field.
    */
diff --git a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
index 546ac3af6d..9a453fb7ab 100644
--- a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
+++ b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
@@ -172,7 +172,7 @@ public function testEditorWithCustomMetadata() {
         'format' => 'full_html'
       ],
     ];
-    $this->assertEqual($expected, $metadata); // , 'The correct metadata (including custom metadata) is generated.');
+    $this->assertEqual($expected, $metadata); //, 'The correct metadata (including custom metadata) is generated.');
   }
 
 }
diff --git a/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php b/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
index b91215db5b..629c4aa810 100644
--- a/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
+++ b/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
@@ -125,23 +125,23 @@ public function testNodeTeaser() {
       'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
     ];
     // @todo Enable with https://www.drupal.org/node/2072791.
-    // $this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
+    //$this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
     $expected_value = [
       'type' => 'literal',
       'value' => $term1->getName(),
     ];
-    // $this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
+    //$this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
     // Term 2.
     $expected_value = [
       'type' => 'uri',
       'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
     ];
-    // $this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
+    //$this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
     $expected_value = [
       'type' => 'literal',
       'value' => $term2->getName(),
     ];
-    // $this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
+    //$this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
   }
 
 }
diff --git a/core/modules/rdf/tests/src/Functional/StandardProfileTest.php b/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
index 8662b9daca..76ae39bc8a 100644
--- a/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
+++ b/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
@@ -407,7 +407,7 @@ protected function assertRdfaArticleProperties($graph, $message_prefix) {
 
     // Tag type.
     // @todo Enable with https://www.drupal.org/node/2072791.
-    // $this->assertEqual($graph->type($this->termUri), 'schema:Thing', 'Tag type was found (schema:Thing).');
+    //$this->assertEqual($graph->type($this->termUri), 'schema:Thing', 'Tag type was found (schema:Thing).');
 
     // Tag name.
     $expected_value = [
@@ -416,7 +416,7 @@ protected function assertRdfaArticleProperties($graph, $message_prefix) {
       'lang' => 'en',
     ];
     // @todo Enable with https://www.drupal.org/node/2072791.
-    // $this->assertTrue($graph->hasProperty($this->termUri, 'http://schema.org/name', $expected_value), "$message_prefix name was found (schema:name).");
+    //$this->assertTrue($graph->hasProperty($this->termUri, 'http://schema.org/name', $expected_value), "$message_prefix name was found (schema:name).");
   }
 
   /**
diff --git a/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php b/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php
index 620dbcbb60..5908ee7262 100644
--- a/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php
+++ b/core/modules/rdf/tests/src/Unit/RdfMappingConfigEntityUnitTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\rdf\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Tests\UnitTestCase;
 use Drupal\rdf\Entity\RdfMapping;
 
@@ -28,13 +26,6 @@ class RdfMappingConfigEntityUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
   /**
    * The ID of the type of the entity under test.
    *
@@ -60,16 +51,13 @@ protected function setUp() {
       ->method('getProvider')
       ->will($this->returnValue('entity'));
 
-    $this->entityManager = new EntityManager();
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
 
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('uuid', $this->uuid);
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
 
   }
@@ -89,11 +77,11 @@ public function testCalculateDependencies() {
       ->method('getBundleEntityType')
       ->will($this->returnValue(NULL));
 
-    $this->entityTypeManager->expects($this->at(0))
+    $this->entityManager->expects($this->at(0))
       ->method('getDefinition')
       ->with($target_entity_type_id)
       ->will($this->returnValue($target_entity_type));
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -120,11 +108,11 @@ public function testCalculateDependenciesWithEntityBundle() {
       ->method('getBundleConfigDependency')
       ->will($this->returnValue(['type' => 'config', 'name' => 'test_module.type.' . $bundle_id]));
 
-    $this->entityTypeManager->expects($this->at(0))
+    $this->entityManager->expects($this->at(0))
       ->method('getDefinition')
       ->with($target_entity_type_id)
       ->will($this->returnValue($target_entity_type));
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
diff --git a/core/modules/responsive_image/responsive_image.module b/core/modules/responsive_image/responsive_image.module
index abfb96b780..4388e89635 100644
--- a/core/modules/responsive_image/responsive_image.module
+++ b/core/modules/responsive_image/responsive_image.module
@@ -40,7 +40,7 @@ function responsive_image_help($route_name, RouteMatchInterface $route_match) {
     case 'help.page.responsive_image':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Responsive Image module provides an image formatter that allows browsers to select which image file to display based on media queries or which image file types the browser supports, using the HTML 5 picture and source elements and/or the sizes, srcset and type attributes. For more information, see the <a href=":responsive_image">online documentation for the Responsive Image module</a>.', [':responsive_image' => 'https://www.drupal.org/documentation/modules/responsive_image']) . '</p>';
+      $output .= '<p>' . t('The Responsive Image module provides an image formatter that allows browsers to select which image file to display based on media queries or which image file types the browser supports, using the HTML 5 picture and source elements and/or the sizes, srcset and type attributes. For more information, see the <a href=":responsive_image">online documentation for the Responsive Image module</a>.', [ ':responsive_image' => 'https://www.drupal.org/documentation/modules/responsive_image']) . '</p>';
       $output .= '<h3>' . t('Uses') . '</h3>';
       $output .= '<dl>';
       $output .= '<dt>' . t('Defining responsive image styles') . '</dt>';
diff --git a/core/modules/responsive_image/tests/src/Functional/Update/ResponsiveImageUpdateTest.php b/core/modules/responsive_image/src/Tests/Update/ResponsiveImageUpdateTest.php
similarity index 89%
rename from core/modules/responsive_image/tests/src/Functional/Update/ResponsiveImageUpdateTest.php
rename to core/modules/responsive_image/src/Tests/Update/ResponsiveImageUpdateTest.php
index 1760809891..1a82bb7b13 100644
--- a/core/modules/responsive_image/tests/src/Functional/Update/ResponsiveImageUpdateTest.php
+++ b/core/modules/responsive_image/src/Tests/Update/ResponsiveImageUpdateTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\responsive_image\Functional\Update;
+namespace Drupal\responsive_image\Tests\Update;
 
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Serialization\Yaml;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests responsive image module updates.
@@ -18,7 +18,7 @@ class ResponsiveImageUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
     ];
   }
 
@@ -47,7 +47,7 @@ protected function setUp() {
    */
   public function testPostUpdateDependency() {
     // Installing the 'wide' responsive image style.
-    $wide_image_style = Yaml::decode(file_get_contents(__DIR__ . '/../../../../../../profiles/standard/config/optional/responsive_image.styles.wide.yml'));
+    $wide_image_style = Yaml::decode(file_get_contents(__DIR__ . '/../../../../../profiles/standard/config/optional/responsive_image.styles.wide.yml'));
     $this->config('responsive_image.styles.wide')->setData($wide_image_style)->save(TRUE);
 
     // Change 'field_image' formatter to a responsive image formatter.
diff --git a/core/modules/responsive_image/tests/src/Unit/ResponsiveImageStyleConfigEntityUnitTest.php b/core/modules/responsive_image/tests/src/Unit/ResponsiveImageStyleConfigEntityUnitTest.php
index 0c64b05ed8..bc9663dcf2 100644
--- a/core/modules/responsive_image/tests/src/Unit/ResponsiveImageStyleConfigEntityUnitTest.php
+++ b/core/modules/responsive_image/tests/src/Unit/ResponsiveImageStyleConfigEntityUnitTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\responsive_image\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\responsive_image\Entity\ResponsiveImageStyle;
 use Drupal\Tests\UnitTestCase;
 
@@ -22,11 +20,11 @@ class ResponsiveImageStyleConfigEntityUnitTest extends UnitTestCase {
   protected $entityType;
 
   /**
-   * The entity type manager used for testing.
+   * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The breakpoint manager used for testing.
@@ -44,8 +42,8 @@ protected function setUp() {
       ->method('getProvider')
       ->will($this->returnValue('responsive_image'));
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with('responsive_image_style')
       ->will($this->returnValue($this->entityType));
@@ -53,7 +51,7 @@ protected function setUp() {
     $this->breakpointManager = $this->getMock('\Drupal\breakpoint\BreakpointManagerInterface');
 
     $container = new ContainerBuilder();
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('breakpoint.manager', $this->breakpointManager);
     \Drupal::setContainer($container);
   }
@@ -76,14 +74,11 @@ public function testCalculateDependencies() {
       ->method('loadMultiple')
       ->with(array_keys($styles))
       ->willReturn($styles);
-
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getStorage')
       ->with('image_style')
       ->willReturn($storage);
-
-    $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
-    $entity_type_repository->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getEntityTypeFromClass')
       ->with('Drupal\image\Entity\ImageStyle')
       ->willReturn('image_style');
@@ -108,8 +103,6 @@ public function testCalculateDependencies() {
       ->with('test_group')
       ->willReturn(['bartik' => 'theme', 'toolbar' => 'module']);
 
-    \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
-
     $dependencies = $entity->calculateDependencies()->getDependencies();
     $this->assertEquals(['toolbar'], $dependencies['module']);
     $this->assertEquals(['bartik'], $dependencies['theme']);
diff --git a/core/modules/rest/src/Annotation/RestResource.php b/core/modules/rest/src/Annotation/RestResource.php
index f525ff1c84..d21f24c5f0 100644
--- a/core/modules/rest/src/Annotation/RestResource.php
+++ b/core/modules/rest/src/Annotation/RestResource.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\rest\Annotation;
 
-use Drupal\Component\Annotation\Plugin;
+use \Drupal\Component\Annotation\Plugin;
 
 /**
  * Defines a REST resource annotation object.
diff --git a/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php b/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php
index ef33817ce8..df77281f37 100644
--- a/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php
+++ b/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php
@@ -79,7 +79,7 @@ public function onResponse(FilterResponseEvent $event) {
    * Determines the format to respond in.
    *
    * Respects the requested format if one is specified. However, it is common to
-   * forget to specify a response format in case of a POST or PATCH. Rather than
+   * forget to specify a request format in case of a POST or PATCH. Rather than
    * simply throwing an error, we apply the robustness principle: when POSTing
    * or PATCHing using a certain format, you probably expect a response in that
    * same format.
@@ -94,35 +94,33 @@ public function onResponse(FilterResponseEvent $event) {
    */
   public function getResponseFormat(RouteMatchInterface $route_match, Request $request) {
     $route = $route_match->getRouteObject();
-    $acceptable_response_formats = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : [];
-    $acceptable_request_formats = $route->hasRequirement('_content_type_format') ? explode('|', $route->getRequirement('_content_type_format')) : [];
-    $acceptable_formats = $request->isMethodCacheable() ? $acceptable_response_formats : $acceptable_request_formats;
+    $acceptable_request_formats = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : [];
+    $acceptable_content_type_formats = $route->hasRequirement('_content_type_format') ? explode('|', $route->getRequirement('_content_type_format')) : [];
+    $acceptable_formats = $request->isMethodCacheable() ? $acceptable_request_formats : $acceptable_content_type_formats;
 
     $requested_format = $request->getRequestFormat();
     $content_type_format = $request->getContentType();
 
-    // If an acceptable response format is requested, then use that. Otherwise,
-    // including and particularly when the client forgot to specify a response
-    // format, then use heuristics to select the format that is most likely
-    // expected.
-    if (in_array($requested_format, $acceptable_response_formats, TRUE)) {
+    // If an acceptable format is requested, then use that. Otherwise, including
+    // and particularly when the client forgot to specify a format, then use
+    // heuristics to select the format that is most likely expected.
+    if (in_array($requested_format, $acceptable_formats)) {
       return $requested_format;
     }
-
     // If a request body is present, then use the format corresponding to the
     // request body's Content-Type for the response, if it's an acceptable
     // format for the request.
-    if (!empty($request->getContent()) && in_array($content_type_format, $acceptable_request_formats, TRUE)) {
+    elseif (!empty($request->getContent()) && in_array($content_type_format, $acceptable_content_type_formats)) {
       return $content_type_format;
     }
-
     // Otherwise, use the first acceptable format.
-    if (!empty($acceptable_formats)) {
+    elseif (!empty($acceptable_formats)) {
       return $acceptable_formats[0];
     }
-
     // Sometimes, there are no acceptable formats, e.g. DELETE routes.
-    return NULL;
+    else {
+      return NULL;
+    }
   }
 
   /**
diff --git a/core/modules/rest/src/EventSubscriber/RestConfigSubscriber.php b/core/modules/rest/src/EventSubscriber/RestConfigSubscriber.php
index d199545f92..abab34a86e 100644
--- a/core/modules/rest/src/EventSubscriber/RestConfigSubscriber.php
+++ b/core/modules/rest/src/EventSubscriber/RestConfigSubscriber.php
@@ -22,7 +22,7 @@ class RestConfigSubscriber implements EventSubscriberInterface {
   /**
    * Constructs the RestConfigSubscriber.
    *
-   * @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder
+   * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
    *   The router builder service.
    */
   public function __construct(RouteBuilderInterface $router_builder) {
diff --git a/core/modules/rest/src/RequestHandler.php b/core/modules/rest/src/RequestHandler.php
index 4b7020c128..e5437ccb68 100644
--- a/core/modules/rest/src/RequestHandler.php
+++ b/core/modules/rest/src/RequestHandler.php
@@ -2,10 +2,8 @@
 
 namespace Drupal\rest;
 
-use Drupal\Component\Utility\ArgumentsResolver;
 use Drupal\Core\Cache\CacheableResponseInterface;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
@@ -121,17 +119,17 @@ public function handle(RouteMatchInterface $route_match, Request $request) {
 
     // Determine the request parameters that should be passed to the resource
     // plugin.
-    $argument_resolver = $this->createArgumentResolver($route_match, $unserialized, $request);
-    try {
-      $arguments = $argument_resolver->getArguments([$resource, $method]);
-    }
-    catch (\RuntimeException $exception) {
-      @trigger_error('Passing in arguments the legacy way is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Provide the right parameter names in the method, similar to controllers. See https://www.drupal.org/node/2894819', E_USER_DEPRECATED);
-      $arguments = $this->getLegacyParameters($route_match, $unserialized, $request);
+    $route_parameters = $route_match->getParameters();
+    $parameters = [];
+    // Filter out all internal parameters starting with "_".
+    foreach ($route_parameters as $key => $parameter) {
+      if ($key{0} !== '_') {
+        $parameters[] = $parameter;
+      }
     }
 
     // Invoke the operation on the resource plugin.
-    $response = call_user_func_array([$resource, $method], $arguments);
+    $response = call_user_func_array([$resource, $method], array_merge($parameters, [$unserialized, $request]));
 
     if ($response instanceof CacheableResponseInterface) {
       // Add rest config's cache tags.
@@ -141,100 +139,4 @@ public function handle(RouteMatchInterface $route_match, Request $request) {
     return $response;
   }
 
-  /**
-   * Creates an argument resolver, containing all REST parameters.
-   *
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The route match.
-   * @param mixed $unserialized
-   *   The unserialized data.
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The request.
-   *
-   * @return \Drupal\Component\Utility\ArgumentsResolver
-   *   An instance of the argument resolver containing information like the
-   *   'entity' we process and the 'unserialized' content from the request body.
-   */
-  protected function createArgumentResolver(RouteMatchInterface $route_match, $unserialized, Request $request) {
-    $route = $route_match->getRouteObject();
-
-    // Defaults for the parameters defined on the route object need to be added
-    // to the raw arguments.
-    $raw_route_arguments = $route_match->getRawParameters()->all() + $route->getDefaults();
-
-    $route_arguments = $route_match->getParameters()->all();
-    $upcasted_route_arguments = $route_arguments;
-
-    // For request methods that have request bodies, ResourceInterface plugin
-    // methods historically receive the unserialized request body as the N+1th
-    // method argument, where N is the number of route parameters specified on
-    // the accompanying route. To be able to use the argument resolver, which is
-    // not based on position but on name and typehint, specify commonly used
-    // names here. Similarly, those methods receive the original stored object
-    // as the first method argument.
-
-    $route_arguments_entity = NULL;
-    // Try to find a parameter which is an entity.
-    foreach ($route_arguments as $value) {
-      if ($value instanceof EntityInterface) {
-        $route_arguments_entity = $value;
-        break;
-      }
-    }
-
-    if (in_array($request->getMethod(), ['PATCH', 'POST'], TRUE)) {
-      $upcasted_route_arguments['entity'] = $unserialized;
-      $upcasted_route_arguments['data'] = $unserialized;
-      $upcasted_route_arguments['unserialized'] = $unserialized;
-      $upcasted_route_arguments['original_entity'] = $route_arguments_entity;
-    }
-    else {
-      $upcasted_route_arguments['entity'] = $route_arguments_entity;
-    }
-
-    // Parameters which are not defined on the route object, but still are
-    // essential for access checking are passed as wildcards to the argument
-    // resolver.
-    $wildcard_arguments = [$route, $route_match];
-    $wildcard_arguments[] = $request;
-    if (isset($unserialized)) {
-      $wildcard_arguments[] = $unserialized;
-    }
-
-    return new ArgumentsResolver($raw_route_arguments, $upcasted_route_arguments, $wildcard_arguments);
-  }
-
-  /**
-   * Provides the parameter usable without an argument resolver.
-   *
-   * This creates an list of parameters in a statically defined order.
-   *
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The route match
-   * @param mixed $unserialized
-   *   The unserialized data.
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The request.
-   *
-   * @deprecated in Drupal 8.4.0, will be removed before Drupal 9.0.0. Use the
-   *   argument resolver method instead, see ::createArgumentResolver().
-   *
-   * @see https://www.drupal.org/node/2894819
-   *
-   * @return array
-   *   An array of parameters.
-   */
-  protected function getLegacyParameters(RouteMatchInterface $route_match, $unserialized, Request $request) {
-    $route_parameters = $route_match->getParameters();
-    $parameters = [];
-    // Filter out all internal parameters starting with "_".
-    foreach ($route_parameters as $key => $parameter) {
-      if ($key{0} !== '_') {
-        $parameters[] = $parameter;
-      }
-    }
-
-    return array_merge($parameters, [$unserialized, $request]);
-  }
-
 }
diff --git a/core/modules/rest/src/Tests/RESTTestBase.php b/core/modules/rest/src/Tests/RESTTestBase.php
index 3f97e46901..40a9fe2f30 100644
--- a/core/modules/rest/src/Tests/RESTTestBase.php
+++ b/core/modules/rest/src/Tests/RESTTestBase.php
@@ -306,12 +306,10 @@ protected function entityValues($entity_type_id) {
         return [
           'name' => $this->randomMachineName(),
           'user_id' => 1,
-          'field_test_text' => [
-            0 => [
-              'value' => $this->randomString(),
-              'format' => 'plain_text',
-            ],
-          ],
+          'field_test_text' => [0 => [
+            'value' => $this->randomString(),
+            'format' => 'plain_text',
+          ]],
         ];
       case 'config_test':
         return [
diff --git a/core/modules/rest/tests/src/Functional/Update/EntityResourcePermissionsUpdateTest.php b/core/modules/rest/src/Tests/Update/EntityResourcePermissionsUpdateTest.php
similarity index 86%
rename from core/modules/rest/tests/src/Functional/Update/EntityResourcePermissionsUpdateTest.php
rename to core/modules/rest/src/Tests/Update/EntityResourcePermissionsUpdateTest.php
index 9add9c5d90..989159e1ca 100644
--- a/core/modules/rest/tests/src/Functional/Update/EntityResourcePermissionsUpdateTest.php
+++ b/core/modules/rest/src/Tests/Update/EntityResourcePermissionsUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\rest\Functional\Update;
+namespace Drupal\rest\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that existing sites continue to use permissions for EntityResource.
@@ -23,8 +23,8 @@ class EntityResourcePermissionsUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.rest-rest_update_8203.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../rest/tests/fixtures/update/drupal-8.rest-rest_update_8203.php',
     ];
   }
 
diff --git a/core/modules/rest/tests/src/Functional/Update/ResourceGranularityUpdateTest.php b/core/modules/rest/src/Tests/Update/ResourceGranularityUpdateTest.php
similarity index 90%
rename from core/modules/rest/tests/src/Functional/Update/ResourceGranularityUpdateTest.php
rename to core/modules/rest/src/Tests/Update/ResourceGranularityUpdateTest.php
index 19ef5458d5..c8cf89afcc 100644
--- a/core/modules/rest/tests/src/Functional/Update/ResourceGranularityUpdateTest.php
+++ b/core/modules/rest/src/Tests/Update/ResourceGranularityUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\rest\Functional\Update;
+namespace Drupal\rest\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests method-granularity REST config is simplified to resource-granularity.
@@ -24,8 +24,8 @@ class ResourceGranularityUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.rest-rest_post_update_resource_granularity.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../rest/tests/fixtures/update/drupal-8.rest-rest_post_update_resource_granularity.php',
     ];
   }
 
diff --git a/core/modules/rest/tests/src/Functional/Update/RestConfigurationEntitiesUpdateTest.php b/core/modules/rest/src/Tests/Update/RestConfigurationEntitiesUpdateTest.php
similarity index 89%
rename from core/modules/rest/tests/src/Functional/Update/RestConfigurationEntitiesUpdateTest.php
rename to core/modules/rest/src/Tests/Update/RestConfigurationEntitiesUpdateTest.php
index f4d8199ab4..097da35bb1 100644
--- a/core/modules/rest/tests/src/Functional/Update/RestConfigurationEntitiesUpdateTest.php
+++ b/core/modules/rest/src/Tests/Update/RestConfigurationEntitiesUpdateTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\rest\Functional\Update;
+namespace Drupal\rest\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\rest\RestResourceConfigInterface;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that rest.settings is converted to rest_resource_config entities.
@@ -26,8 +26,8 @@ class RestConfigurationEntitiesUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.rest-rest_update_8201.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../rest/tests/fixtures/update/drupal-8.rest-rest_update_8201.php',
     ];
   }
 
diff --git a/core/modules/rest/tests/src/Functional/Update/RestExportAuthUpdateTest.php b/core/modules/rest/src/Tests/Update/RestExportAuthUpdateTest.php
similarity index 72%
rename from core/modules/rest/tests/src/Functional/Update/RestExportAuthUpdateTest.php
rename to core/modules/rest/src/Tests/Update/RestExportAuthUpdateTest.php
index 87cd5dbfba..92cc917f6f 100644
--- a/core/modules/rest/tests/src/Functional/Update/RestExportAuthUpdateTest.php
+++ b/core/modules/rest/src/Tests/Update/RestExportAuthUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\rest\Functional\Update;
+namespace Drupal\rest\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Ensures that update hook is run properly for REST Export config.
@@ -16,8 +16,8 @@ class RestExportAuthUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/rest-export-with-authentication.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/rest-export-with-authentication.php',
     ];
   }
 
diff --git a/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/NoSerializationClassTestResource.php b/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/NoSerializationClassTestResource.php
index 2689588481..3e83a4ce74 100644
--- a/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/NoSerializationClassTestResource.php
+++ b/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/NoSerializationClassTestResource.php
@@ -25,7 +25,7 @@ class NoSerializationClassTestResource extends ResourceBase {
    *
    * @return \Drupal\rest\ResourceResponse
    */
-  public function post(array $data) {
+  public function post(array $data = []) {
     return new ResourceResponse($data);
   }
 
diff --git a/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php b/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php
index 3b7c3b4862..8975c3fa28 100644
--- a/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php
+++ b/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php
@@ -71,7 +71,7 @@ protected function initAuthentication() {
     $this->sessionCookie = explode(';', $response->getHeader('Set-Cookie')[0], 2)[0];
 
     // Parse and store the CSRF token and logout token.
-    $data = $this->serializer->decode((string) $response->getBody(), static::$format);
+    $data = $this->serializer->decode((string)$response->getBody(), static::$format);
     $this->csrfToken = $data['csrf_token'];
     $this->logoutToken = $data['logout_token'];
   }
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonAnonTest.php
deleted file mode 100644
index 16688cb52d..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonAnonTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\BlockContent;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-
-/**
- * @group rest
- */
-class BlockContentJsonAnonTest extends BlockContentResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonBasicAuthTest.php
deleted file mode 100644
index c804632a69..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonBasicAuthTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\BlockContent;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group rest
- */
-class BlockContentJsonBasicAuthTest extends BlockContentResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonCookieTest.php
deleted file mode 100644
index 75bb3c2fda..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonCookieTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\BlockContent;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group rest
- */
-class BlockContentJsonCookieTest extends BlockContentResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentResourceTestBase.php
deleted file mode 100644
index 8b67cc62d2..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentResourceTestBase.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\BlockContent;
-
-use Drupal\block_content\Entity\BlockContent;
-use Drupal\block_content\Entity\BlockContentType;
-use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
-
-/**
- * ResourceTestBase for BlockContent entity.
- */
-abstract class BlockContentResourceTestBase extends EntityResourceTestBase {
-
-  use BcTimestampNormalizerUnixTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['block_content'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $entityTypeId = 'block_content';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $patchProtectedFieldNames = [
-    'changed',
-  ];
-
-  /**
-   * @var \Drupal\block_content\BlockContentInterface
-   */
-  protected $entity;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    $this->grantPermissionsToTestedRole(['administer blocks']);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function createEntity() {
-    if (!BlockContentType::load('basic')) {
-      $block_content_type = BlockContentType::create([
-        'id' => 'basic',
-        'label' => 'basic',
-        'revision' => TRUE,
-      ]);
-      $block_content_type->save();
-      block_content_add_body_field($block_content_type->id());
-    }
-
-    // Create a "Llama" custom block.
-    $block_content = BlockContent::create([
-      'info' => 'Llama',
-      'type' => 'basic',
-      'body' => [
-        'value' => 'The name "llama" was adopted by European settlers from native Peruvians.',
-        'format' => 'plain_text',
-      ],
-    ])
-      ->setPublished(FALSE);
-    $block_content->save();
-    return $block_content;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    return [
-      'id' => [
-        [
-          'value' => 1,
-        ],
-      ],
-      'uuid' => [
-        [
-          'value' => $this->entity->uuid(),
-        ],
-      ],
-      'langcode' => [
-        [
-          'value' => 'en',
-        ],
-      ],
-      'type' => [
-        [
-          'target_id' => 'basic',
-          'target_type' => 'block_content_type',
-          'target_uuid' => BlockContentType::load('basic')->uuid(),
-        ],
-      ],
-      'info' => [
-        [
-          'value' => 'Llama',
-        ],
-      ],
-      'revision_log' => [],
-      'changed' => [
-        $this->formatExpectedTimestampItemValues($this->entity->getChangedTime()),
-      ],
-      'revision_id' => [
-        [
-          'value' => 1,
-        ],
-      ],
-      'revision_created' => [
-        $this->formatExpectedTimestampItemValues((int) $this->entity->getRevisionCreationTime()),
-      ],
-      'revision_user' => [],
-      'revision_translation_affected' => [
-        [
-          'value' => TRUE,
-        ],
-      ],
-      'default_langcode' => [
-        [
-          'value' => TRUE,
-        ],
-      ],
-      'body' => [
-        [
-          'value' => 'The name "llama" was adopted by European settlers from native Peruvians.',
-          'format' => 'plain_text',
-          'summary' => NULL,
-        ],
-      ],
-      'status' => [
-        [
-          'value' => FALSE,
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    return [
-      'type' => [
-        [
-          'target_id' => 'basic',
-        ],
-      ],
-      'info' => [
-        [
-          'value' => 'Dramallama',
-        ],
-      ],
-    ];
-  }
-
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedUnauthorizedAccessMessage($method) {
-    if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) {
-      return parent::getExpectedUnauthorizedAccessMessage($method);
-    }
-
-    return parent::getExpectedUnauthorizedAccessMessage($method);
-  }
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Comment/CommentResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/Comment/CommentResourceTestBase.php
index bade2a76c6..ea705de8a4 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/Comment/CommentResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/Comment/CommentResourceTestBase.php
@@ -279,7 +279,7 @@ public function testPostDxWithoutCriticalBaseFields() {
     $this->assertSame(500, $response->getStatusCode());
     $this->assertSame(['text/plain; charset=UTF-8'], $response->getHeader('Content-Type'));
     $this->assertStringStartsWith('The website encountered an unexpected error. Please try again later.</br></br><em class="placeholder">Symfony\Component\HttpKernel\Exception\HttpException</em>: Internal Server Error in <em class="placeholder">Drupal\rest\Plugin\rest\resource\EntityResource-&gt;post()</em>', (string) $response->getBody());
-    // $this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nentity_type: This value should not be null.\n", $response);
+    //$this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nentity_type: This value should not be null.\n", $response);
 
     // DX: 422 when missing 'entity_id' field.
     $request_options[RequestOptions::BODY] = $this->serializer->encode(array_diff_key($this->getNormalizedPostEntity(), ['entity_id' => TRUE]), static::$format);
@@ -288,14 +288,14 @@ public function testPostDxWithoutCriticalBaseFields() {
     try {
       $response = $this->request('POST', $url, $request_options);
       // This happens on DrupalCI.
-      // $this->assertSame(500, $response->getStatusCode());
+      //$this->assertSame(500, $response->getStatusCode());
     }
     catch (\Exception $e) {
       // This happens on Wim's local machine.
-      // $this->assertSame("Error: Call to a member function get() on null\nDrupal\\comment\\Plugin\\Validation\\Constraint\\CommentNameConstraintValidator->getAnonymousContactDetailsSetting()() (Line: 96)\n", $e->getMessage());
+      //$this->assertSame("Error: Call to a member function get() on null\nDrupal\\comment\\Plugin\\Validation\\Constraint\\CommentNameConstraintValidator->getAnonymousContactDetailsSetting()() (Line: 96)\n", $e->getMessage());
     }
-    // $response = $this->request('POST', $url, $request_options);
-    // $this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nentity_type: This value should not be null.\n", $response);
+    //$response = $this->request('POST', $url, $request_options);
+    //$this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nentity_type: This value should not be null.\n", $response);
 
     // DX: 422 when missing 'entity_type' field.
     $request_options[RequestOptions::BODY] = $this->serializer->encode(array_diff_key($this->getNormalizedPostEntity(), ['field_name' => TRUE]), static::$format);
@@ -303,7 +303,7 @@ public function testPostDxWithoutCriticalBaseFields() {
     // @todo Uncomment, remove next 2 lines in https://www.drupal.org/node/2820364.
     $this->assertSame(500, $response->getStatusCode());
     $this->assertSame(['text/plain; charset=UTF-8'], $response->getHeader('Content-Type'));
-    // $this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nfield_name: This value should not be null.\n", $response);
+    //$this->assertResourceErrorResponse(422, "Unprocessable Entity: validation failed.\nfield_name: This value should not be null.\n", $response);
   }
 
   /**
@@ -324,37 +324,4 @@ protected function getExpectedUnauthorizedAccessMessage($method) {
     }
   }
 
-  /**
-   * Tests POSTing a comment with and without 'skip comment approval'
-   */
-  public function testPostSkipCommentApproval() {
-    $this->initAuthentication();
-    $this->provisionEntityResource();
-    $this->setUpAuthorization('POST');
-
-    // Create request.
-    $request_options = [];
-    $request_options[RequestOptions::HEADERS]['Accept'] = static::$mimeType;
-    $request_options[RequestOptions::HEADERS]['Content-Type'] = static::$mimeType;
-    $request_options = array_merge_recursive($request_options, $this->getAuthenticationRequestOptions('POST'));
-    $request_options[RequestOptions::BODY] = $this->serializer->encode($this->getNormalizedPostEntity(), static::$format);
-
-    $url = $this->getEntityResourcePostUrl()->setOption('query', ['_format' => static::$format]);
-
-    // Status should be FALSE when posting as anonymous.
-    $response = $this->request('POST', $url, $request_options);
-    $unserialized = $this->serializer->deserialize((string) $response->getBody(), get_class($this->entity), static::$format);
-    $this->assertResourceResponse(201, FALSE, $response);
-    $this->assertFalse($unserialized->getStatus());
-
-    // Grant anonymous permission to skip comment approval.
-    $this->grantPermissionsToTestedRole(['skip comment approval']);
-
-    // Status should be TRUE when posting as anonymous and skip comment approval.
-    $response = $this->request('POST', $url, $request_options);
-    $unserialized = $this->serializer->deserialize((string) $response->getBody(), get_class($this->entity), static::$format);
-    $this->assertResourceResponse(201, FALSE, $response);
-    $this->assertTrue($unserialized->getStatus());
-  }
-
 }
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonAnonTest.php
deleted file mode 100644
index a5f360214f..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonAnonTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-
-/**
- * @group rest
- */
-class ContactFormJsonAnonTest extends ContactFormResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonBasicAuthTest.php
deleted file mode 100644
index c41b9a4ef4..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonBasicAuthTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group rest
- */
-class ContactFormJsonBasicAuthTest extends ContactFormResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonCookieTest.php
deleted file mode 100644
index 2b8d9137cc..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonCookieTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\ContactForm;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group rest
- */
-class ContactFormJsonCookieTest extends ContactFormResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormResourceTestBase.php
deleted file mode 100644
index 51e297a7b8..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormResourceTestBase.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\ContactForm;
-
-use Drupal\contact\Entity\ContactForm;
-use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
-
-abstract class ContactFormResourceTestBase extends EntityResourceTestBase {
-
-  use BcTimestampNormalizerUnixTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['contact'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $entityTypeId = 'contact_form';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $patchProtectedFieldNames = [];
-
-  /**
-   * @var \Drupal\contact\Entity\ContactForm
-   */
-  protected $entity;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    switch ($method) {
-      case 'GET':
-        $this->grantPermissionsToTestedRole(['access site-wide contact form']);
-      default:
-        $this->grantPermissionsToTestedRole(['administer contact forms']);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function createEntity() {
-    $contact_form = ContactForm::create([
-      'id' => 'llama',
-      'label' => 'Llama',
-      'message' => 'Let us know what you think about llamas',
-      'reply' => 'Llamas are indeed awesome!',
-      'recipients' => [
-        'llama@example.com',
-        'contact@example.com',
-      ],
-    ]);
-    $contact_form->save();
-
-    return $contact_form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    return [
-      'dependencies' => [],
-      'id' => 'llama',
-      'label' => 'Llama',
-      'langcode' => 'en',
-      'message' => 'Let us know what you think about llamas',
-      'recipients' => [
-        'llama@example.com',
-        'contact@example.com',
-      ],
-      'redirect' => NULL,
-      'reply' => 'Llamas are indeed awesome!',
-      'status' => TRUE,
-      'uuid' => $this->entity->uuid(),
-      'weight' => 0,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    // @todo Update in https://www.drupal.org/node/2300677.
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedUnauthorizedAccessMessage($method) {
-    if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) {
-      return parent::getExpectedUnauthorizedAccessMessage($method);
-    }
-
-    return "The 'access site-wide contact form' permission is required.";
-  }
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
index fe4ebb8310..2de3852080 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
@@ -328,6 +328,7 @@ public function testGet() {
     $url->setOption('query', []);
 
 
+
     // DX: 406 when ?_format is missing, except when requesting a canonical HTML
     // route.
     $response = $this->request('GET', $url, $request_options);
@@ -372,6 +373,7 @@ public function testGet() {
     $this->assertArrayNotHasKey('Link', $response->getHeaders());
 
 
+
     $this->setUpAuthorization('GET');
 
 
@@ -999,6 +1001,7 @@ public function testPatch() {
     $this->assertResourceErrorResponse(400, 'Syntax error', $response);
 
 
+
     $request_options[RequestOptions::BODY] = $parseable_invalid_request_body;
 
 
@@ -1274,10 +1277,7 @@ protected function assertNormalizationEdgeCases($method, Url $url, array $reques
    */
   protected function getEntityResourceUrl() {
     $has_canonical_url = $this->entity->hasLinkTemplate('canonical');
-    // Note that the 'canonical' link relation type must be specified explicitly
-    // in the call to ::toUrl(). 'canonical' is the default for
-    // \Drupal\Core\Entity\Entity::toUrl(), but ConfigEntityBase overrides this.
-    return $has_canonical_url ? $this->entity->toUrl('canonical') : Url::fromUri('base:entity/' . static::$entityTypeId . '/' . $this->entity->id());
+    return $has_canonical_url ? $this->entity->toUrl() : Url::fromUri('base:entity/' . static::$entityTypeId . '/' . $this->entity->id());
   }
 
   /**
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonAnonTest.php
deleted file mode 100644
index 1df26f3869..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonAnonTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-
-/**
- * @group rest
- */
-class EntityTestBundleJsonAnonTest extends EntityTestBundleResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonBasicAuthTest.php
deleted file mode 100644
index 0220801379..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonBasicAuthTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group rest
- */
-class EntityTestBundleJsonBasicAuthTest extends EntityTestBundleResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonCookieTest.php
deleted file mode 100644
index 56fecfd6b0..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonCookieTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group rest
- */
-class EntityTestBundleJsonCookieTest extends EntityTestBundleResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleResourceTestBase.php
deleted file mode 100644
index f43d877097..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleResourceTestBase.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\EntityTestBundle;
-
-use Drupal\entity_test\Entity\EntityTestBundle;
-use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
-
-abstract class EntityTestBundleResourceTestBase extends EntityResourceTestBase {
-
-  use BcTimestampNormalizerUnixTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['entity_test'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $entityTypeId = 'entity_test_bundle';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $patchProtectedFieldNames = [];
-
-  /**
-   * @var \Drupal\entity_test\Entity\EntityTestBundle
-   */
-  protected $entity;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    $this->grantPermissionsToTestedRole(['administer entity_test_bundle content']);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function createEntity() {
-    $entity_test_bundle = EntityTestBundle::create([
-      'id' => 'camelids',
-      'label' => 'Camelids',
-      'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.',
-    ]);
-    $entity_test_bundle->save();
-
-    return $entity_test_bundle;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    return [
-      'dependencies' => [],
-      'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.',
-      'id' => 'camelids',
-      'label' => 'Camelids',
-      'langcode' => 'en',
-      'status' => TRUE,
-      'uuid' => $this->entity->uuid(),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    // @todo Update in https://www.drupal.org/node/2300677.
-  }
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonAnonTest.php
deleted file mode 100644
index d9a3550d91..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonAnonTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\Media;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaJsonAnonTest extends MediaResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonBasicAuthTest.php
deleted file mode 100644
index f499b79bd5..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonBasicAuthTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\Media;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaJsonBasicAuthTest extends MediaResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonCookieTest.php
deleted file mode 100644
index 0cb86260a6..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonCookieTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\Media;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaJsonCookieTest extends MediaResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaResourceTestBase.php
deleted file mode 100644
index f5bfa14291..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaResourceTestBase.php
+++ /dev/null
@@ -1,264 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\Media;
-
-use Drupal\file\Entity\File;
-use Drupal\media\Entity\Media;
-use Drupal\media\Entity\MediaType;
-use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
-use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
-use Drupal\user\Entity\User;
-
-abstract class MediaResourceTestBase extends EntityResourceTestBase {
-
-  use BcTimestampNormalizerUnixTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['media'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $entityTypeId = 'media';
-
-  /**
-   * @var \Drupal\media\MediaInterface
-   */
-  protected $entity;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $patchProtectedFieldNames = [
-    'changed',
-  ];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    switch ($method) {
-      case 'GET':
-        $this->grantPermissionsToTestedRole(['view media']);
-        break;
-
-      case 'POST':
-        $this->grantPermissionsToTestedRole(['create media']);
-        break;
-
-      case 'PATCH':
-        $this->grantPermissionsToTestedRole(['update any media']);
-        break;
-
-      case 'DELETE':
-        $this->grantPermissionsToTestedRole(['delete any media']);
-        break;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function createEntity() {
-    if (!MediaType::load('camelids')) {
-      // Create a "Camelids" media type.
-      $media_type = MediaType::create([
-        'name' => 'Camelids',
-        'id' => 'camelids',
-        'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.',
-        'source' => 'file',
-      ]);
-      $media_type->save();
-      // Create the source field.
-      $source_field = $media_type->getSource()->createSourceField($media_type);
-      $source_field->getFieldStorageDefinition()->save();
-      $source_field->save();
-      $media_type
-        ->set('source_configuration', [
-          'source_field' => $source_field->getName(),
-        ])
-        ->save();
-    }
-
-    // Create a file to upload.
-    $file = File::create([
-      'uri' => 'public://llama.txt',
-    ]);
-    $file->setPermanent();
-    $file->save();
-
-    // Create a "Llama" media item.
-    $media = Media::create([
-      'bundle' => 'camelids',
-      'field_media_file_1' => [
-        'target_id' => $file->id(),
-      ],
-    ]);
-    $media
-      ->setName('Llama')
-      ->setPublished(TRUE)
-      ->setCreatedTime(123456789)
-      ->setOwnerId(static::$auth ? $this->account->id() : 0)
-      ->setRevisionUserId(static::$auth ? $this->account->id() : 0)
-      ->save();
-
-    return $media;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    $file = File::load(1);
-    $thumbnail = File::load(2);
-    $author = User::load($this->entity->getOwnerId());
-    return [
-      'mid' => [
-        [
-          'value' => 1,
-        ],
-      ],
-      'uuid' => [
-        [
-          'value' => $this->entity->uuid(),
-        ],
-      ],
-      'vid' => [
-        [
-          'value' => 1,
-        ],
-      ],
-      'langcode' => [
-        [
-          'value' => 'en',
-        ],
-      ],
-      'bundle' => [
-        [
-          'target_id' => 'camelids',
-          'target_type' => 'media_type',
-          'target_uuid' => MediaType::load('camelids')->uuid(),
-        ],
-      ],
-      'name' => [
-        [
-          'value' => 'Llama',
-        ],
-      ],
-      'field_media_file_1' => [
-        [
-          'description' => NULL,
-          'display' => NULL,
-          'target_id' => (int) $file->id(),
-          'target_type' => 'file',
-          'target_uuid' => $file->uuid(),
-          'url' => $file->url(),
-        ],
-      ],
-      'thumbnail' => [
-        [
-          'alt' => 'Thumbnail',
-          'width' => 180,
-          'height' => 180,
-          'target_id' => (int) $thumbnail->id(),
-          'target_type' => 'file',
-          'target_uuid' => $thumbnail->uuid(),
-          'title' => 'Llama',
-          'url' => $thumbnail->url(),
-        ],
-      ],
-      'status' => [
-        [
-          'value' => TRUE,
-        ],
-      ],
-      'created' => [
-        $this->formatExpectedTimestampItemValues(123456789),
-      ],
-      'changed' => [
-        $this->formatExpectedTimestampItemValues($this->entity->getChangedTime()),
-      ],
-      'revision_created' => [
-        $this->formatExpectedTimestampItemValues((int) $this->entity->getRevisionCreationTime()),
-      ],
-      'default_langcode' => [
-        [
-          'value' => TRUE,
-        ],
-      ],
-      'uid' => [
-        [
-          'target_id' => (int) $author->id(),
-          'target_type' => 'user',
-          'target_uuid' => $author->uuid(),
-          'url' => base_path() . 'user/' . $author->id(),
-        ],
-      ],
-      'revision_user' => [
-        [
-          'target_id' => (int) $author->id(),
-          'target_type' => 'user',
-          'target_uuid' => $author->uuid(),
-          'url' => base_path() . 'user/' . $author->id(),
-        ],
-      ],
-      'revision_log_message' => [],
-      'revision_translation_affected' => [
-        [
-          'value' => TRUE,
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    return [
-      'bundle' => [
-        [
-          'target_id' => 'camelids',
-        ],
-      ],
-      'name' => [
-        [
-          'value' => 'Dramallama',
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedUnauthorizedAccessMessage($method) {
-    if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) {
-      return parent::getExpectedUnauthorizedAccessMessage($method);
-    }
-
-    switch ($method) {
-      case 'GET';
-        return "The 'view media' permission is required and the media item must be published.";
-
-      case 'PATCH':
-        return 'You are not authorized to update this media entity of bundle camelids.';
-
-      case 'DELETE':
-        return 'You are not authorized to delete this media entity of bundle camelids.';
-
-      default:
-        return parent::getExpectedUnauthorizedAccessMessage($method);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function testPost() {
-    $this->markTestSkipped('POSTing File Media items is not supported until https://www.drupal.org/node/1927648 is solved.');
-  }
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonAnonTest.php b/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonAnonTest.php
deleted file mode 100644
index 2e4b63098d..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonAnonTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaTypeJsonAnonTest extends MediaTypeResourceTestBase {
-
-  use AnonResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonBasicAuthTest.php b/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonBasicAuthTest.php
deleted file mode 100644
index 052b19d54d..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonBasicAuthTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaTypeJsonBasicAuthTest extends MediaTypeResourceTestBase {
-
-  use BasicAuthResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['basic_auth'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'basic_auth';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonCookieTest.php b/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonCookieTest.php
deleted file mode 100644
index b956c9889d..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonCookieTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\MediaType;
-
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-
-/**
- * @group rest
- */
-class MediaTypeJsonCookieTest extends MediaTypeResourceTestBase {
-
-  use CookieResourceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeResourceTestBase.php
deleted file mode 100644
index ac72737538..0000000000
--- a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeResourceTestBase.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-namespace Drupal\Tests\rest\Functional\EntityResource\MediaType;
-
-use Drupal\media\Entity\MediaType;
-use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
-
-abstract class MediaTypeResourceTestBase extends EntityResourceTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['media'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $entityTypeId = 'media_type';
-
-  /**
-   * @var \Drupal\media\MediaTypeInterface
-   */
-  protected $entity;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    $this->grantPermissionsToTestedRole(['administer media types']);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function createEntity() {
-    // Create a "Camelids" media type.
-    $camelids = MediaType::create([
-      'name' => 'Camelids',
-      'id' => 'camelids',
-      'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.',
-      'source' => 'file',
-    ]);
-
-    $camelids->save();
-
-    return $camelids;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedNormalizedEntity() {
-    return [
-      'dependencies' => [],
-      'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.',
-      'field_map' => [],
-      'id' => 'camelids',
-      'label' => NULL,
-      'langcode' => 'en',
-      'new_revision' => FALSE,
-      'queue_thumbnail_downloads' => FALSE,
-      'source' => 'file',
-      'source_configuration' => [
-        'source_field' => '',
-      ],
-      'status' => TRUE,
-      'uuid' => $this->entity->uuid(),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getNormalizedPostEntity() {
-    // @todo Update in https://www.drupal.org/node/2300677.
-  }
-
-}
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/Term/TermResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/Term/TermResourceTestBase.php
index 97599774b3..44a4e83033 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/Term/TermResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/Term/TermResourceTestBase.php
@@ -41,23 +41,16 @@ protected function setUpAuthorization($method) {
       case 'GET':
         $this->grantPermissionsToTestedRole(['access content']);
         break;
-
       case 'POST':
-        $this->grantPermissionsToTestedRole(['create terms in camelids']);
-        break;
-
       case 'PATCH':
+      case 'DELETE':
         // Grant the 'create url aliases' permission to test the case when
         // the path field is accessible, see
         // \Drupal\Tests\rest\Functional\EntityResource\Node\NodeResourceTestBase
         // for a negative test.
-        $this->grantPermissionsToTestedRole(['edit terms in camelids', 'create url aliases']);
+        // @todo Update once https://www.drupal.org/node/2824408 lands.
+        $this->grantPermissionsToTestedRole(['administer taxonomy', 'create url aliases']);
         break;
-
-      case 'DELETE':
-        $this->grantPermissionsToTestedRole(['delete terms in camelids']);
-        break;
-
     }
   }
 
@@ -175,7 +168,7 @@ protected function getExpectedUnauthorizedAccessMessage($method) {
       case 'GET':
         return "The 'access content' permission is required.";
       case 'POST':
-        return "The following permissions are required: 'create terms in camelids' OR 'administer taxonomy'.";
+        return "The 'administer taxonomy' permission is required.";
       case 'PATCH':
         return "The following permissions are required: 'edit terms in camelids' OR 'administer taxonomy'.";
       case 'DELETE':
diff --git a/core/modules/rest/tests/src/Functional/ResourceTest.php b/core/modules/rest/tests/src/Functional/ResourceTest.php
index 1e8babe0db..8a32016fc3 100644
--- a/core/modules/rest/tests/src/Functional/ResourceTest.php
+++ b/core/modules/rest/tests/src/Functional/ResourceTest.php
@@ -41,12 +41,10 @@ protected function setUp() {
     $this->entity = EntityTest::create([
       'name' => $this->randomMachineName(),
       'user_id' => 1,
-      'field_test_text' => [
-        0 => [
-          'value' => $this->randomString(),
-          'format' => 'plain_text',
-        ],
-      ],
+      'field_test_text' => [0 => [
+        'value' => $this->randomString(),
+        'format' => 'plain_text',
+      ]],
     ]);
     $this->entity->save();
 
diff --git a/core/modules/rest/tests/src/Functional/ResourceTestBase.php b/core/modules/rest/tests/src/Functional/ResourceTestBase.php
index 0a0e34c35d..59d7bcbc54 100644
--- a/core/modules/rest/tests/src/Functional/ResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/ResourceTestBase.php
@@ -183,7 +183,7 @@ protected function refreshTestStateAfterRestConfigChange() {
    *   The HTTP method (GET, POST, PATCH, DELETE).
    *
    * @return string
-   *   The error string.
+   *    The error string.
    */
   protected function getExpectedUnauthorizedAccessMessage($method) {
     $resource_plugin_id = str_replace('.', ':', static::$resourceConfigId);
@@ -351,7 +351,12 @@ protected function request($method, Url $url, array $request_options) {
    */
   protected function assertResourceResponse($expected_status_code, $expected_body, ResponseInterface $response) {
     $this->assertSame($expected_status_code, $response->getStatusCode());
-    $this->assertSame([static::$mimeType], $response->getHeader('Content-Type'));
+    if ($expected_status_code < 400) {
+      $this->assertSame([static::$mimeType], $response->getHeader('Content-Type'));
+    }
+    else {
+      $this->assertSame([static::$mimeType], $response->getHeader('Content-Type'));
+    }
     if ($expected_body !== FALSE) {
       $this->assertSame($expected_body, (string) $response->getBody());
     }
diff --git a/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php b/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
index ad1a0b30a5..cb9fee24a2 100644
--- a/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
+++ b/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
@@ -667,9 +667,7 @@ public function testFieldapiField() {
 
     $result = Json::decode($this->drupalGet('test/serialize/node-field', ['query' => ['_format' => 'json']]));
     $this->assertEqual(count($result[2]['body']), $node->body->count(), 'Expected count of values');
-    $this->assertEqual($result[2]['body'], array_map(function($item) {
-      return $item['value'];
-    }, $node->body->getValue()), 'Expected raw body values found.');
+    $this->assertEqual($result[2]['body'], array_map(function($item) { return $item['value']; }, $node->body->getValue()), 'Expected raw body values found.');
   }
 
   /**
diff --git a/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php b/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php
index 51ad3e977f..f62ee03f26 100644
--- a/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php
+++ b/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php
@@ -30,9 +30,9 @@ public function testCalculateDependencies(array $configuration) {
     $rest_config = RestResourceConfig::create($configuration);
 
     $result = $config_dependencies->calculateDependencies($rest_config);
-    $this->assertEquals([
-      'module' => ['basic_auth', 'serialization', 'hal'],
-    ], $result);
+    $this->assertEquals(['module' => [
+      'basic_auth', 'serialization', 'hal',
+    ]], $result);
   }
 
   /**
diff --git a/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php b/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php
index 808d434cc0..2b8855917e 100644
--- a/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php
+++ b/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php
@@ -93,9 +93,9 @@ public function testHandle() {
  */
 class StubRequestHandlerResourcePlugin extends ResourceBase {
 
-  public function get($example, Request $request) {}
+  public function get() {}
   public function post() {}
-  public function patch($example_original, Request $request) {}
+  public function patch() {}
   public function delete() {}
 
 }
diff --git a/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php b/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php
index eab2d9f89b..d09fdced4c 100644
--- a/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php
+++ b/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php
@@ -78,7 +78,7 @@ public function providerTestSerialization() {
    *
    * @dataProvider providerTestResponseFormat
    */
-  public function testResponseFormat($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
+  public function testResponseFormat($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
     foreach ($request_headers as $key => $value) {
       unset($request_headers[$key]);
       $key = strtoupper(str_replace('-', '_', $key));
@@ -92,10 +92,8 @@ public function testResponseFormat($methods, array $supported_response_formats,
       if ($request_format) {
         $request->setRequestFormat($request_format);
       }
-
-      $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats);
-
-      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements));
+      $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format';
+      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], [$route_requirement_key_format => implode('|', $supported_formats)]));
 
       $resource_response_subscriber = new ResourceResponseSubscriber(
         $this->prophesize(SerializerInterface::class)->reveal(),
@@ -115,7 +113,9 @@ public function testResponseFormat($methods, array $supported_response_formats,
    *
    * @dataProvider providerTestResponseFormat
    */
-  public function testOnResponseWithCacheableResponse($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
+  public function testOnResponseWithCacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
+    $rest_config_name = $this->randomMachineName();
+
     foreach ($request_headers as $key => $value) {
       unset($request_headers[$key]);
       $key = strtoupper(str_replace('-', '_', $key));
@@ -129,10 +129,8 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_r
       if ($request_format) {
         $request->setRequestFormat($request_format);
       }
-
-      $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats);
-
-      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements));
+      $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format';
+      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)]));
 
       // The RequestHandler must return a ResourceResponseInterface object.
       $handler_response = new ResourceResponse($method !== 'DELETE' ? ['REST' => 'Drupal'] : NULL);
@@ -165,7 +163,9 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_r
    *
    * @dataProvider providerTestResponseFormat
    */
-  public function testOnResponseWithUncacheableResponse($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
+  public function testOnResponseWithUncacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) {
+    $rest_config_name = $this->randomMachineName();
+
     foreach ($request_headers as $key => $value) {
       unset($request_headers[$key]);
       $key = strtoupper(str_replace('-', '_', $key));
@@ -179,10 +179,8 @@ public function testOnResponseWithUncacheableResponse($methods, array $supported
       if ($request_format) {
         $request->setRequestFormat($request_format);
       }
-
-      $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats);
-
-      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements));
+      $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format';
+      $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)]));
 
       // The RequestHandler must return a ResourceResponseInterface object.
       $handler_response = new ModifiedResourceResponse($method !== 'DELETE' ? ['REST' => 'Drupal'] : NULL);
@@ -227,7 +225,6 @@ public function providerTestResponseFormat() {
         // @todo add 'HEAD' in https://www.drupal.org/node/2752325
         ['GET'],
         ['xml', 'json'],
-        [],
         'json',
         [],
         NULL,
@@ -239,7 +236,6 @@ public function providerTestResponseFormat() {
         // @todo add 'HEAD' in https://www.drupal.org/node/2752325
         ['GET'],
         ['xml', 'json'],
-        [],
         'xml',
         [],
         NULL,
@@ -251,7 +247,6 @@ public function providerTestResponseFormat() {
         // @todo add 'HEAD' in https://www.drupal.org/node/2752325
         ['GET'],
         ['json', 'xml'],
-        [],
         FALSE,
         [],
         NULL,
@@ -263,7 +258,6 @@ public function providerTestResponseFormat() {
         // @todo add 'HEAD' in https://www.drupal.org/node/2752325
         ['GET'],
         ['xml', 'json'],
-        [],
         FALSE,
         [],
         NULL,
@@ -277,7 +271,6 @@ public function providerTestResponseFormat() {
       'unsafe methods with response (POST, PATCH): client requested no format, response should use request body format (JSON)' => [
         ['POST', 'PATCH'],
         ['xml', 'json'],
-        ['xml', 'json'],
         FALSE,
         ['Content-Type' => 'application/json'],
         $json_encoded,
@@ -288,7 +281,6 @@ public function providerTestResponseFormat() {
       'unsafe methods with response (POST, PATCH): client requested no format, response should use request body format (XML)' => [
         ['POST', 'PATCH'],
         ['xml', 'json'],
-        ['xml', 'json'],
         FALSE,
         ['Content-Type' => 'text/xml'],
         $xml_encoded,
@@ -299,7 +291,6 @@ public function providerTestResponseFormat() {
       'unsafe methods with response (POST, PATCH): client requested format other than request body format (JSON): response format should use requested format (XML)' => [
         ['POST', 'PATCH'],
         ['xml', 'json'],
-        ['xml', 'json'],
         'xml',
         ['Content-Type' => 'application/json'],
         $json_encoded,
@@ -310,7 +301,6 @@ public function providerTestResponseFormat() {
       'unsafe methods with response (POST, PATCH): client requested format other than request body format (XML), but is allowed for the request body (JSON)' => [
         ['POST', 'PATCH'],
         ['xml', 'json'],
-        ['xml', 'json'],
         'json',
         ['Content-Type' => 'text/xml'],
         $xml_encoded,
@@ -318,35 +308,12 @@ public function providerTestResponseFormat() {
         'application/json',
         $json_encoded,
       ],
-      'unsafe methods with response (POST, PATCH): client requested format other than request body format when only XML is allowed as a content type format' => [
-        ['POST', 'PATCH'],
-        ['xml'],
-        ['json'],
-        'json',
-        ['Content-Type' => 'text/xml'],
-        $xml_encoded,
-        'json',
-        'application/json',
-        $json_encoded,
-      ],
-      'unsafe methods with response (POST, PATCH): client requested format other than request body format when only JSON is allowed as a content type format' => [
-        ['POST', 'PATCH'],
-        ['json'],
-        ['xml'],
-        'xml',
-        ['Content-Type' => 'application/json'],
-        $json_encoded,
-        'xml',
-        'text/xml',
-        $xml_encoded,
-      ],
     ];
 
     $unsafe_method_bodyless_test_cases = [
-      'unsafe methods without response bodies (DELETE): client requested no format, response should have no format' => [
+      'unsafe methods with response bodies (DELETE): client requested no format, response should have no format' => [
         ['DELETE'],
         ['xml', 'json'],
-        ['xml', 'json'],
         FALSE,
         ['Content-Type' => 'application/json'],
         NULL,
@@ -354,10 +321,9 @@ public function providerTestResponseFormat() {
         NULL,
         '',
       ],
-      'unsafe methods without response bodies (DELETE): client requested format (XML), response should have no format' => [
+      'unsafe methods with response bodies (DELETE): client requested format (XML), response should have no format' => [
         ['DELETE'],
         ['xml', 'json'],
-        ['xml', 'json'],
         'xml',
         ['Content-Type' => 'application/json'],
         NULL,
@@ -365,10 +331,9 @@ public function providerTestResponseFormat() {
         NULL,
         '',
       ],
-      'unsafe methods without response bodies (DELETE): client requested format (JSON), response should have no format' => [
+      'unsafe methods with response bodies (DELETE): client requested format (JSON), response should have no format' => [
         ['DELETE'],
         ['xml', 'json'],
-        ['xml', 'json'],
         'json',
         ['Content-Type' => 'application/json'],
         NULL,
@@ -403,26 +368,4 @@ protected function getFunctioningResourceResponseSubscriber(RouteMatchInterface
     return $resource_response_subscriber;
   }
 
-  /**
-   * Generates route requirements based on supported formats.
-   *
-   * @param array $supported_response_formats
-   *   The supported response formats to add to the route requirements.
-   * @param array $supported_request_formats
-   *   The supported request formats to add to the route requirements.
-   *
-   * @return array
-   *   An array of route requirements.
-   */
-  protected function generateRouteRequirements(array $supported_response_formats, array $supported_request_formats) {
-    $route_requirements = [
-      '_format' => implode('|', $supported_response_formats),
-    ];
-    if (!empty($supported_request_formats)) {
-      $route_requirements['_content_type_format'] = implode('|', $supported_request_formats);
-    }
-
-    return $route_requirements;
-  }
-
 }
diff --git a/core/modules/search/migration_templates/d6_search_settings.yml b/core/modules/search/migration_templates/d6_search_settings.yml
index 1500a3f06e..28f860060a 100644
--- a/core/modules/search/migration_templates/d6_search_settings.yml
+++ b/core/modules/search/migration_templates/d6_search_settings.yml
@@ -10,7 +10,6 @@ source:
     - minimum_word_size
     - overlap_cjk
     - search_cron_limit
-  source_module: search
 process:
   'index/minimum_word_size': minimum_word_size
   'index/overlap_cjk': overlap_cjk
diff --git a/core/modules/search/migration_templates/d7_search_settings.yml b/core/modules/search/migration_templates/d7_search_settings.yml
index 74f0ef719e..57db8b9456 100644
--- a/core/modules/search/migration_templates/d7_search_settings.yml
+++ b/core/modules/search/migration_templates/d7_search_settings.yml
@@ -13,7 +13,6 @@ source:
     - search_tag_weights
     - search_and_or_limit
     - search_default_module
-  source_module: search
 process:
   'index/minimum_word_size': minimum_word_size
   'index/overlap_cjk': overlap_cjk
diff --git a/core/modules/search/migration_templates/search_page.yml b/core/modules/search/migration_templates/search_page.yml
index fc9b410afe..8ddc02acfb 100644
--- a/core/modules/search/migration_templates/search_page.yml
+++ b/core/modules/search/migration_templates/search_page.yml
@@ -16,7 +16,6 @@ source:
     id: node_search
     path: node
     plugin: node_search
-  source_module: search
 process:
   id: 'constants/id'
   path: 'constants/path'
diff --git a/core/modules/search/src/Controller/SearchController.php b/core/modules/search/src/Controller/SearchController.php
index e0b6466aa1..4beb8448fe 100644
--- a/core/modules/search/src/Controller/SearchController.php
+++ b/core/modules/search/src/Controller/SearchController.php
@@ -149,6 +149,8 @@ public function view(Request $request, SearchPageInterface $entity) {
   /**
    * Creates a render array for the search help page.
    *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
    * @param \Drupal\search\SearchPageInterface $entity
    *   The search page entity.
    *
diff --git a/core/modules/search/src/Plugin/SearchPluginBase.php b/core/modules/search/src/Plugin/SearchPluginBase.php
index 7312df49fc..7bf4f0f4e3 100644
--- a/core/modules/search/src/Plugin/SearchPluginBase.php
+++ b/core/modules/search/src/Plugin/SearchPluginBase.php
@@ -146,18 +146,16 @@ public function buildSearchUrlQuery(FormStateInterface $form_state) {
   public function getHelp() {
     // This default search help is appropriate for plugins like NodeSearch
     // that use the SearchQuery class.
-    $help = [
-      'list' => [
-        '#theme' => 'item_list',
-        '#items' => [
-          $this->t('Search looks for exact, case-insensitive keywords; keywords shorter than a minimum length are ignored.'),
-          $this->t('Use upper-case OR to get more results. Example: cat OR dog (content contains either "cat" or "dog").'),
-          $this->t('You can use upper-case AND to require all words, but this is the same as the default behavior. Example: cat AND dog (same as cat dog, content must contain both "cat" and "dog").'),
-          $this->t('Use quotes to search for a phrase. Example: "the cat eats mice".'),
-          $this->t('You can precede keywords by - to exclude them; you must still have at least one "positive" keyword. Example: cat -dog (content must contain cat and cannot contain dog).'),
-        ],
+    $help = ['list' => [
+      '#theme' => 'item_list',
+      '#items' => [
+        $this->t('Search looks for exact, case-insensitive keywords; keywords shorter than a minimum length are ignored.'),
+        $this->t('Use upper-case OR to get more results. Example: cat OR dog (content contains either "cat" or "dog").'),
+        $this->t('You can use upper-case AND to require all words, but this is the same as the default behavior. Example: cat AND dog (same as cat dog, content must contain both "cat" and "dog").'),
+        $this->t('Use quotes to search for a phrase. Example: "the cat eats mice".'),
+        $this->t('You can precede keywords by - to exclude them; you must still have at least one "positive" keyword. Example: cat -dog (content must contain cat and cannot contain dog).'),
       ],
-    ];
+    ]];
 
     return $help;
   }
diff --git a/core/modules/search/src/Plugin/views/argument/Search.php b/core/modules/search/src/Plugin/views/argument/Search.php
index f9cd9a14b3..7e9f00d4bd 100644
--- a/core/modules/search/src/Plugin/views/argument/Search.php
+++ b/core/modules/search/src/Plugin/views/argument/Search.php
@@ -97,7 +97,7 @@ public function query($group_by = FALSE) {
       $search_dataset = $this->query->addTable('node_search_dataset');
       $conditions = $this->searchQuery->conditions();
       $condition_conditions =& $conditions->conditions();
-      foreach ($condition_conditions as $key => &$condition) {
+      foreach ($condition_conditions  as $key => &$condition) {
         // Make sure we just look at real conditions.
         if (is_numeric($key)) {
           // Replace the conditions with the table alias of views.
diff --git a/core/modules/search/src/Plugin/views/filter/Search.php b/core/modules/search/src/Plugin/views/filter/Search.php
index b1884d5ac3..ac0f671ae2 100644
--- a/core/modules/search/src/Plugin/views/filter/Search.php
+++ b/core/modules/search/src/Plugin/views/filter/Search.php
@@ -172,7 +172,7 @@ public function query() {
       $search_dataset = $this->query->addTable('node_search_dataset');
       $conditions = $this->searchQuery->conditions();
       $condition_conditions =& $conditions->conditions();
-      foreach ($condition_conditions as $key => &$condition) {
+      foreach ($condition_conditions  as $key => &$condition) {
         // Make sure we just look at real conditions.
         if (is_numeric($key)) {
           // Replace the conditions with the table alias of views.
diff --git a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
index b081b857d0..cc77f2b6a6 100644
--- a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php
@@ -177,7 +177,7 @@ public function testSearchModuleDisabling() {
       $this->submitGetForm('node', $terms, t('Search'));
       $current = $this->getURL();
       $expected = \Drupal::url('search.view_' . $entity->id(), [], ['query' => ['keys' => $info['keys']], 'absolute' => TRUE]);
-      $this->assertEqual($current, $expected, 'Block redirected to right search page');
+      $this->assertEqual( $current, $expected, 'Block redirected to right search page');
 
       // Try an invalid search path, which should 404.
       $this->drupalGet('search/not_a_plugin_path');
diff --git a/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php b/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php
index c19814e026..9b86052352 100644
--- a/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php
+++ b/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php
@@ -39,8 +39,7 @@ public function testSearchIndexUpdateOnNodeChange() {
     $node = $this->drupalCreateNode([
       'title' => 'Someone who says Ni!',
       'body' => [['value' => "We are the knights who say Ni!"]],
-      'type' => 'page',
-    ]);
+      'type' => 'page']);
 
     $node_search_plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
     // Update the search index.
@@ -74,8 +73,7 @@ public function testSearchIndexUpdateOnNodeDeletion() {
     $node = $this->drupalCreateNode([
       'title' => 'No dragons here',
       'body' => [['value' => 'Again: No dragons here']],
-      'type' => 'page',
-    ]);
+      'type' => 'page']);
 
     $node_search_plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
     // Update the search index.
diff --git a/core/modules/search/src/Tests/SearchRankingTest.php b/core/modules/search/src/Tests/SearchRankingTest.php
index 55da9acbeb..28241d2af2 100644
--- a/core/modules/search/src/Tests/SearchRankingTest.php
+++ b/core/modules/search/src/Tests/SearchRankingTest.php
@@ -53,9 +53,9 @@ public function testRankings() {
     foreach ($node_ranks as $node_rank) {
       $settings = [
         'type' => 'page',
-        'comment' => [
-          ['status' => CommentItemInterface::HIDDEN],
-        ],
+        'comment' => [[
+          'status' => CommentItemInterface::HIDDEN,
+        ]],
         'title' => 'Drupal rocks',
         'body' => [['value' => "Drupal's search rocks"]],
         // Node is one day old.
diff --git a/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php b/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
index 9b3a6ddc85..3dfc1179c0 100644
--- a/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
+++ b/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
@@ -78,11 +78,16 @@ protected function setUp() {
       // After the third node, we don't care what the settings are. But we
       // need to have at least 5 to make sure the throttling is working
       // correctly. So, let's make 8 total.
-      [],
-      [],
-      [],
-      [],
-      [],
+      [
+      ],
+      [
+      ],
+      [
+      ],
+      [
+      ],
+      [
+      ],
     ];
     $this->searchableNodes = [];
     foreach ($nodes as $setting) {
diff --git a/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php b/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
index 33beb373a1..3d2031218f 100644
--- a/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
@@ -26,9 +26,9 @@ class ComplexDataNormalizer extends NormalizerBase {
    */
   public function normalize($object, $format = NULL, array $context = []) {
     $attributes = [];
-    /** @var \Drupal\Core\TypedData\TypedDataInterface $property */
-    foreach ($object as $name => $property) {
-      $attributes[$name] = $this->serializer->normalize($property, $format, $context);
+    /** @var \Drupal\Core\TypedData\TypedDataInterface $field */
+    foreach ($object as $name => $field) {
+      $attributes[$name] = $this->serializer->normalize($field, $format, $context);
     }
     return $attributes;
   }
diff --git a/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php b/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
index d3abef6f12..f1ca82d549 100644
--- a/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
@@ -15,15 +15,15 @@ class ContentEntityNormalizer extends EntityNormalizer {
   /**
    * {@inheritdoc}
    */
-  public function normalize($entity, $format = NULL, array $context = []) {
+  public function normalize($object, $format = NULL, array $context = []) {
     $context += [
       'account' => NULL,
     ];
 
     $attributes = [];
-    foreach ($entity as $name => $field_items) {
-      if ($field_items->access('view', $context['account'])) {
-        $attributes[$name] = $this->serializer->normalize($field_items, $format, $context);
+    foreach ($object as $name => $field) {
+      if ($field->access('view', $context['account'])) {
+        $attributes[$name] = $this->serializer->normalize($field, $format, $context);
       }
     }
 
diff --git a/core/modules/serialization/src/Tests/NormalizerTestBase.php b/core/modules/serialization/src/Tests/NormalizerTestBase.php
index 0adbae7643..1dec036b51 100644
--- a/core/modules/serialization/src/Tests/NormalizerTestBase.php
+++ b/core/modules/serialization/src/Tests/NormalizerTestBase.php
@@ -10,4 +10,4 @@
  * @deprecated Scheduled for removal in Drupal 9.0.0.
  *   Use \Drupal\Tests\serialization\Kernel\NormalizerTestBase instead.
  */
-abstract class NormalizerTestBase extends SerializationNormalizerTestBase {}
+abstract class NormalizerTestBase extends SerializationNormalizerTestBase { }
diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
index 63b9bf714d..f5e8f0f7b5 100644
--- a/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
+++ b/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
@@ -26,7 +26,7 @@ class NormalizerBaseTest extends UnitTestCase {
    * @param mixed $data
    *   The data passed to supportsNormalization.
    * @param string $supported_interface_or_class
-   *   (optional) The supported interface or class to set on the normalizer.
+   *   (optional) the supported interface or class to set on the normalizer.
    */
   public function testSupportsNormalization($expected_return, $data, $supported_interface_or_class = NULL) {
     $normalizer_base = $this->getMockForAbstractClass('Drupal\Tests\serialization\Unit\Normalizer\TestNormalizerBase');
diff --git a/core/modules/settings_tray/settings_tray.api.php b/core/modules/settings_tray/settings_tray.api.php
deleted file mode 100644
index 4516127f7c..0000000000
--- a/core/modules/settings_tray/settings_tray.api.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @file
- * Documentation for Settings Tray API.
- */
-
-/**
- * @defgroup settings_tray Settings Tray API
- * @{
- * Settings Tray API
- *
- * @section sec_api The API: the form in the Settings Tray
- *
- * By default, every block will show its built-in form in the Settings Tray.
- * However, many blocks would benefit from a tailored form which either:
- * - limits the form items displayed in the Settings Tray to only items that
- *   affect the content of the rendered block
- * - adds additional form items to edit configuration that is rendered by the
- *   block. See \Drupal\settings_tray\Form\SystemBrandingOffCanvasForm which
- *   adds site name and slogan configuration.
- *
- * These can be used to provide a better experience, so that the Settings Tray
- * only displays what the user will expect to change when editing the block.
- *
- * Each block plugin can specify which form to use in the Settings Tray dialog
- * in its plugin annotation:
- * @code
- * forms = {
- *   "settings_tray" = "\Drupal\some_module\Form\MyBlockOffCanvasForm",
- * },
- * @encode
- *
- * In some cases, a block's content is not configurable (for example, the title,
- * main content, and help blocks). Such blocks can opt out of providing an
- * off-canvas form:
- * @code
- * forms = {
- *   "settings_tray" = FALSE,
- * },
- * @encode
- *
- * Finally, blocks that do not specify an off-canvas form using the annotation
- * above will automatically have it set to their plugin class. For example, the
- * "Powered by Drupal" block plugin
- * (\Drupal\system\Plugin\Block\SystemPoweredByBlock) automatically gets
- * this added to its annotation:
- * @code
- * forms = {
- *   "settings_tray" = "\Drupal\system\Plugin\Block\SystemPoweredByBlock",
- * },
- * @encode
- *
- * Therefore, the entire Settings Tray API is just this annotation: it controls
- * what the Settings Tray does for a given block.
- *
- * @see settings_tray_block_alter()
- * @see \Drupal\Tests\settings_tray\Functional\SettingsTrayBlockTest::testPossibleAnnotations()
- *
- * @}
- */
diff --git a/core/modules/settings_tray/settings_tray.module b/core/modules/settings_tray/settings_tray.module
deleted file mode 100644
index 7017439414..0000000000
--- a/core/modules/settings_tray/settings_tray.module
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-/**
- * @file
- * Allows configuring blocks and other configuration from the site front-end.
- */
-
-use Drupal\Core\Asset\AttachedAssetsInterface;
-use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\settings_tray\Block\BlockEntityOffCanvasForm;
-use Drupal\settings_tray\Form\SystemBrandingOffCanvasForm;
-use Drupal\settings_tray\Form\SystemMenuOffCanvasForm;
-
-/**
- * Implements hook_help().
- */
-function settings_tray_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.settings_tray':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Settings Tray module provides an \'edit mode\' in which clicking on a block opens a slide-out tray which allows configuration to be altered without leaving the page.For more information, see the <a href=":settings-tray-documentation">online documentation for the Settings Tray module</a>.', [':settings-tray-documentation' => 'https://www.drupal.org/documentation/modules/settings_tray']) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Editing blocks on the same page in the slide-out tray') . '</dt>';
-      $output .= '</dl>';
-      return ['#markup' => $output];
-  }
-}
-
-/**
- * Implements hook_contextual_links_view_alter().
- *
- * Change Configure Blocks into off_canvas links.
- */
-function settings_tray_contextual_links_view_alter(&$element, $items) {
-  if (isset($element['#links']['settings-trayblock-configure'])) {
-    // Place settings_tray link first.
-    $settings_tray_link = $element['#links']['settings-trayblock-configure'];
-    unset($element['#links']['settings-trayblock-configure']);
-    $element['#links'] = ['settings-trayblock-configure' => $settings_tray_link] + $element['#links'];
-
-    // If this is content block change title to avoid duplicate "Quick Edit".
-    if (isset($element['#links']['block-contentblock-edit'])) {
-      $element['#links']['settings-trayblock-configure']['title'] = t('Quick edit settings');
-    }
-
-    $element['#attached']['library'][] = 'settings_tray/drupal.off_canvas';
-  }
-}
-
-/**
- * Implements hook_block_view_alter().
- */
-function settings_tray_block_view_alter(array &$build) {
-  // Force a new 'data-contextual-id' attribute on blocks when this module is
-  // enabled so as not to reuse stale data cached client-side.
-  // @todo Remove when https://www.drupal.org/node/2773591 is fixed.
-  $build['#contextual_links']['settings_tray'] = [
-    'route_parameters' => [],
-  ];
-}
-
-/**
- * Implements hook_element_info_alter().
- */
-function settings_tray_element_info_alter(&$type) {
-  if (isset($type['page'])) {
-    $type['page']['#theme_wrappers']['settings_tray_page_wrapper'] = ['#weight' => -1000];
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function settings_tray_theme() {
-  return [
-    'settings_tray_page_wrapper' => [
-      'variables' => ['children' => NULL],
-    ],
-  ];
-}
-
-/**
- * Implements hook_entity_type_build().
- */
-function settings_tray_entity_type_build(array &$entity_types) {
-  /* @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
-  $entity_types['block']
-    ->setFormClass('off_canvas', BlockEntityOffCanvasForm::class)
-    ->setLinkTemplate('off_canvas-form', '/admin/structure/block/manage/{block}/off-canvas');
-}
-
-/**
- * Implements hook_preprocess_HOOK() for block templates.
- */
-function settings_tray_preprocess_block(&$variables) {
-  // Only blocks that have an settings_tray form will have a "Quick Edit" link.
-  // We could wait for the contextual links to be initialized on the client
-  // side,  and then add the class and data- attribute below there (via
-  // JavaScript). But that would mean that it would be impossible to show
-  // Settings Tray's clickable regions immediately when the page loads. When
-  // latency is high, this will cause flicker.
-  // @see \Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck
-  /** @var \Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck $access_checker */
-  $access_checker = \Drupal::service('access_check.settings_tray.block.settings_tray_form');
-  /** @var \Drupal\Core\Block\BlockManagerInterface $block_plugin_manager */
-  $block_plugin_manager = \Drupal::service('plugin.manager.block');
-  /** @var \Drupal\Core\Block\BlockPluginInterface $block_plugin */
-  $block_plugin = $block_plugin_manager->createInstance($variables['plugin_id']);
-  if ($access_checker->accessBlockPlugin($block_plugin)->isAllowed()) {
-    // Add class and attributes to all blocks to allow Javascript to target.
-    $variables['attributes']['class'][] = 'settings-tray-editable';
-    $variables['attributes']['data-drupal-settingstray'] = 'editable';
-  }
-}
-
-/**
- * Implements hook_toolbar_alter().
- *
- * Alters the 'contextual' toolbar tab if it exists (meaning the user is allowed
- * to use contextual links) and if they can administer blocks.
- *
- * @todo Remove the "administer blocks" requirement in
- *   https://www.drupal.org/node/2822965.
- *
- * @see contextual_toolbar()
- */
-function settings_tray_toolbar_alter(&$items) {
-  $items['contextual']['#cache']['contexts'][] = 'user.permissions';
-  if (isset($items['contextual']['tab']) && \Drupal::currentUser()->hasPermission('administer blocks')) {
-    $items['contextual']['#weight'] = -1000;
-    $items['contextual']['#attached']['library'][] = 'settings_tray/drupal.settings_tray';
-    $items['contextual']['tab']['#attributes']['data-drupal-settingstray'] = 'toggle';
-
-    // Set a class on items to mark whether they should be active in edit mode.
-    // @todo Create a dynamic method for modules to set their own items.
-    //   https://www.drupal.org/node/2784589.
-    $edit_mode_items = ['contextual', 'block_place'];
-    foreach ($items as $key => $item) {
-      if (!in_array($key, $edit_mode_items) && (!isset($items[$key]['#wrapper_attributes']['class']) || !in_array('hidden', $items[$key]['#wrapper_attributes']['class']))) {
-        $items[$key]['#wrapper_attributes']['class'][] = 'edit-mode-inactive';
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_block_alter().
- *
- * Ensures every block plugin definition has an 'settings_tray' form specified.
- *
- * @see \Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck
- */
-function settings_tray_block_alter(&$definitions) {
-  foreach ($definitions as &$definition) {
-    // If a block plugin already defines its own 'settings_tray' form, use that
-    // form instead of specifying one here.
-    if (isset($definition['forms']['settings_tray'])) {
-      continue;
-    }
-
-    switch ($definition['id']) {
-      // Use specialized forms for certain blocks that do not yet provide the
-      // form with their own annotation.
-      // @todo Move these into the corresponding block plugin annotations in
-      //   https://www.drupal.org/node/2896356.
-      case 'system_menu_block':
-        $definition['forms']['settings_tray'] = SystemMenuOffCanvasForm::class;
-        break;
-
-      case 'system_branding_block':
-        $definition['forms']['settings_tray'] = SystemBrandingOffCanvasForm::class;
-        break;
-
-      // No off-canvas form for the page title block, despite it having
-      // contextual links: it's too confusing that you're editing configuration,
-      // not content, so the title itself cannot actually be changed.
-      // @todo Move these into the corresponding block plugin annotations in
-      //   https://www.drupal.org/node/2896356.
-      case 'page_title_block':
-        $definition['forms']['settings_tray'] = FALSE;
-        break;
-
-      case 'system_main_block':
-        $definition['forms']['settings_tray'] = FALSE;
-        break;
-
-      case 'help_block':
-        $definition['forms']['settings_tray'] = FALSE;
-        break;
-
-      // Otherwise, use the block plugin's normal form rather than
-      // a custom form for Settings Tray.
-      default:
-        $definition['forms']['settings_tray'] = $definition['class'];
-        break;
-    }
-  }
-}
-
-/**
- * Implements hook_css_alter().
- */
-function settings_tray_css_alter(&$css, AttachedAssetsInterface $assets) {
-  // @todo Remove once conditional ordering is introduced in
-  //   https://www.drupal.org/node/1945262.
-  $path = drupal_get_path('module', 'settings_tray') . '/css/settings_tray.theme.css';
-  if (isset($css[$path])) {
-    // Use 200 to come after CSS_AGGREGATE_THEME.
-    $css[$path]['group'] = 200;
-  }
-}
diff --git a/core/modules/settings_tray/settings_tray.services.yml b/core/modules/settings_tray/settings_tray.services.yml
deleted file mode 100644
index aeaaf57ed9..0000000000
--- a/core/modules/settings_tray/settings_tray.services.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-services:
-  main_content_renderer.off_canvas:
-    class: Drupal\settings_tray\Render\MainContent\OffCanvasRenderer
-    arguments: ['@title_resolver', '@renderer']
-    tags:
-      - { name: render.main_content_renderer, format: drupal_dialog.off_canvas }
-
-  access_check.settings_tray.block.settings_tray_form:
-    class: Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck
-    tags:
-      - { name: access_check, applies_to: _access_block_plugin_has_settings_tray_form }
diff --git a/core/modules/settings_tray/src/Access/BlockPluginHasSettingsTrayFormAccessCheck.php b/core/modules/settings_tray/src/Access/BlockPluginHasSettingsTrayFormAccessCheck.php
deleted file mode 100644
index 01a99a0791..0000000000
--- a/core/modules/settings_tray/src/Access/BlockPluginHasSettingsTrayFormAccessCheck.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-namespace Drupal\settings_tray\Access;
-
-use Drupal\block\BlockInterface;
-use Drupal\Core\Access\AccessResult;
-use Drupal\Core\Block\BlockPluginInterface;
-use Drupal\Core\Plugin\PluginWithFormsInterface;
-use Drupal\Core\Routing\Access\AccessInterface;
-
-/**
- * Determines whether the requested block has a 'settings_tray' form.
- *
- * @internal
- */
-class BlockPluginHasSettingsTrayFormAccessCheck implements AccessInterface {
-
-  /**
-   * Checks access for accessing a block's 'settings_tray' form.
-   *
-   * @param \Drupal\block\BlockInterface $block
-   *   The block whose 'settings_tray' form is being accessed.
-   *
-   * @return \Drupal\Core\Access\AccessResultInterface
-   *   The access result.
-   */
-  public function access(BlockInterface $block) {
-    /** @var \Drupal\Core\Block\BlockPluginInterface $block_plugin */
-    $block_plugin = $block->getPlugin();
-    return $this->accessBlockPlugin($block_plugin);
-  }
-
-  /**
-   * Checks access for accessing a block plugin's 'settings_tray' form.
-   *
-   * @param \Drupal\Core\Block\BlockPluginInterface $block_plugin
-   *   The block plugin whose 'settings_tray' form is being accessed.
-   *
-   * @return \Drupal\Core\Access\AccessResultInterface
-   *   The access result.
-   *
-   * @see settings_tray_preprocess_block()
-   */
-  public function accessBlockPlugin(BlockPluginInterface $block_plugin) {
-    return AccessResult::allowedIf($block_plugin instanceof PluginWithFormsInterface && $block_plugin->hasFormClass('settings_tray'));
-  }
-
-}
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Form/SettingsTrayFormAnnotationIsClassBlockForm.php b/core/modules/settings_tray/tests/modules/settings_tray_test/src/Form/SettingsTrayFormAnnotationIsClassBlockForm.php
deleted file mode 100644
index f0fae68c4f..0000000000
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Form/SettingsTrayFormAnnotationIsClassBlockForm.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace Drupal\settings_tray_test\Form;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Plugin\PluginFormBase;
-
-/**
- * @see \Drupal\settings_tray_test\Plugin\Block\SettingsTrayFormAnnotationIsClassBlock
- */
-class SettingsTrayFormAnnotationIsClassBlockForm extends PluginFormBase {
-
-  /**
-   * The block plugin.
-   *
-   * @var \Drupal\Core\Block\BlockPluginInterface
-   */
-  protected $plugin;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = $this->plugin->buildConfigurationForm($form, $form_state);
-
-    $form['some_setting'] = [
-      '#type' => 'select',
-      '#title' => t('Some setting'),
-      '#options' => [
-        'a' => 'A',
-        'b' => 'B',
-      ],
-      '#required' => TRUE,
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
-
-}
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsClassBlock.php b/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsClassBlock.php
deleted file mode 100644
index 699a09a501..0000000000
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsClassBlock.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Drupal\settings_tray_test\Plugin\Block;
-
-use Drupal\Core\Block\BlockBase;
-
-/**
- * Block that explicitly provides a "settings_tray" form class.
- *
- * @Block(
- *   id = "settings_tray_test_class",
- *   admin_label = "Settings Tray test block: forms[settings_tray]=class",
- *   forms = {
- *     "settings_tray" = "\Drupal\settings_tray_test\Form\SettingsTrayFormAnnotationIsClassBlockForm",
- *   },
- * )
- */
-class SettingsTrayFormAnnotationIsClassBlock extends BlockBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function build() {
-    return ['#markup' => '<span>class</span>'];
-  }
-
-}
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsFalseBlock.php b/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsFalseBlock.php
deleted file mode 100644
index 47bb6113bd..0000000000
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationIsFalseBlock.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Drupal\settings_tray_test\Plugin\Block;
-
-use Drupal\Core\Block\BlockBase;
-
-/**
- * Block that explicitly provides no "settings_tray" form, thus opting out.
- *
- * @Block(
- *   id = "settings_tray_test_false",
- *   admin_label = "Settings Tray test block: forms[settings_tray]=FALSE",
- *   forms = {
- *     "settings_tray" = FALSE,
- *   },
- * )
- */
-class SettingsTrayFormAnnotationIsFalseBlock extends BlockBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function build() {
-    return ['#markup' => '<span>FALSE</span>'];
-  }
-
-}
diff --git a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationNoneBlock.php b/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationNoneBlock.php
deleted file mode 100644
index 5b6eb92368..0000000000
--- a/core/modules/settings_tray/tests/modules/settings_tray_test/src/Plugin/Block/SettingsTrayFormAnnotationNoneBlock.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\settings_tray_test\Plugin\Block;
-
-use Drupal\Core\Block\BlockBase;
-
-/**
- * Block that does nothing explicit for Settings Tray.
- *
- * @Block(
- *   id = "settings_tray_test_none",
- *   admin_label = "Settings Tray test block: forms[settings_tray] is not specified",
- * )
- */
-class SettingsTrayFormAnnotationNoneBlock extends BlockBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function build() {
-    return ['#markup' => '<span>none</span>'];
-  }
-
-}
diff --git a/core/modules/settings_tray/tests/src/Functional/SettingsTrayTest.php b/core/modules/settings_tray/tests/src/Functional/SettingsTrayTest.php
deleted file mode 100644
index aec0392de1..0000000000
--- a/core/modules/settings_tray/tests/src/Functional/SettingsTrayTest.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-namespace Drupal\Tests\settings_tray\Functional;
-
-use Drupal\block\Entity\Block;
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Tests opening and saving block forms in the off-canvas dialog.
- *
- * @group settings_tray
- */
-class SettingsTrayTest extends BrowserTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = [
-    'settings_tray',
-    'settings_tray_test',
-  ];
-
-  /**
-   * Gets the block CSS selector.
-   *
-   * @param \Drupal\block\Entity\Block $block
-   *   The block.
-   *
-   * @return string
-   *   The CSS selector.
-   */
-  protected  function getBlockSelector(Block $block) {
-    return '#block-' . $block->id();
-  }
-
-  /**
-   * Tests the 3 possible forms[settings_tray] annotations: class, FALSE, none.
-   *
-   * There is also functional JS test coverage to ensure that the two blocks
-   * that support Settings Tray (the "class" and "none" cases) do work
-   * correctly.
-   *
-   * @see SettingsTrayBlockFormTest::testBlocks()
-   */
-  public function testPossibleAnnotations() {
-    $test_block_plugin_ids = [
-      // Block that explicitly provides an "settings_tray" form class.
-      'settings_tray_test_class',
-      // Block that explicitly provides no "settings_tray" form, thus opting out.
-      'settings_tray_test_false',
-      // Block that does nothing explicit for Settings Tray.
-      'settings_tray_test_none',
-    ];
-
-    $placed_blocks = [];
-    foreach ($test_block_plugin_ids as $plugin_id) {
-      $placed_blocks[$plugin_id] = $this->placeBlock($plugin_id);
-    }
-
-    $this->drupalGet('');
-    $web_assert = $this->assertSession();
-    foreach ($placed_blocks as $plugin_id => $placed_block) {
-      $block_selector = $this->getBlockSelector($placed_block);
-
-      // All blocks are rendered.
-      $web_assert->elementExists('css', $block_selector);
-
-      // All blocks except 'settings_tray_test_false' are editable. For more
-      // detailed test coverage, which requires JS execution, see
-      // \Drupal\Tests\settings_tray\FunctionalJavascript\SettingsTrayBlockFormTest::testBlocks().
-      if ($plugin_id === 'settings_tray_test_false') {
-        $web_assert->elementNotExists('css', "{$block_selector}[data-drupal-settingstray=\"editable\"]");
-      }
-      else {
-        $web_assert->elementExists('css', "{$block_selector}[data-drupal-settingstray=\"editable\"]");
-      }
-    }
-  }
-
-  /**
-   * Tests that certain blocks opt out from Settings Tray.
-   */
-  public function testOptOut() {
-    $web_assert = $this->assertSession();
-
-    $non_excluded_block = $this->placeBlock('system_powered_by_block');
-    $excluded_block_plugin_ids = ['page_title_block', 'system_main_block', 'settings_tray_test_false'];
-    $block_selectors = [];
-    // Place blocks that should be excluded.
-    foreach ($excluded_block_plugin_ids as $excluded_block_plugin_id) {
-      // The block HTML 'id' attribute will be "block-[block_id]".
-      $block_selectors[] = $this->getBlockSelector($this->placeBlock($excluded_block_plugin_id));
-    }
-    $this->drupalGet('');
-    // Assert that block has been marked as "editable" and contextual that
-    // should exist does.
-    $web_assert->elementExists('css', $this->getBlockSelector($non_excluded_block) . "[data-drupal-settingstray=\"editable\"]");
-    // Assert that each block that has a "forms[settings_tray] = FALSE" annotation:
-    // - is still rendered on the page
-    // - but is not marked as "editable" by settings_tray_preprocess_block()
-    // - and does not have the Settings Tray contextual link.
-    foreach ($block_selectors as $block_selector) {
-      $web_assert->elementExists('css', $block_selector);
-      $web_assert->elementNotExists('css', "{$block_selector}[data-drupal-settingstray=\"editable\"]");
-      $web_assert->elementNotExists('css', "$block_selector [data-settings-tray-edit]");
-    }
-  }
-
-}
diff --git a/core/modules/settings_tray/tests/src/Unit/Access/BlockPluginHasSettingsTrayFormAccessCheckTest.php b/core/modules/settings_tray/tests/src/Unit/Access/BlockPluginHasSettingsTrayFormAccessCheckTest.php
deleted file mode 100644
index c89abfd928..0000000000
--- a/core/modules/settings_tray/tests/src/Unit/Access/BlockPluginHasSettingsTrayFormAccessCheckTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-namespace Drupal\Tests\settings_tray\Unit\Access;
-
-use Drupal\block\BlockInterface;
-use Drupal\Core\Access\AccessResultAllowed;
-use Drupal\Core\Access\AccessResultInterface;
-use Drupal\Core\Access\AccessResultNeutral;
-use Drupal\Core\Block\BlockPluginInterface;
-use Drupal\Core\Plugin\PluginWithFormsInterface;
-use Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck;
-use Drupal\Tests\UnitTestCase;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck
- * @group settings_tray
- */
-class BlockPluginHasSettingsTrayFormAccessCheckTest extends UnitTestCase {
-
-  /**
-   * @covers ::access
-   * @covers ::accessBlockPlugin
-   * @dataProvider providerTestAccess
-   */
-  public function testAccess($with_forms, array $plugin_definition, AccessResultInterface $expected_access_result) {
-    $block_plugin = $this->prophesize()->willImplement(BlockPluginInterface::class);
-
-    if ($with_forms) {
-      $block_plugin->willImplement(PluginWithFormsInterface::class);
-      $block_plugin->hasFormClass(Argument::type('string'))->will(function ($arguments) use ($plugin_definition) {
-        return !empty($plugin_definition['forms'][$arguments[0]]);
-      });
-    }
-
-    $block = $this->prophesize(BlockInterface::class);
-    $block->getPlugin()->willReturn($block_plugin->reveal());
-
-    $access_check = new BlockPluginHasSettingsTrayFormAccessCheck();
-    $this->assertEquals($expected_access_result, $access_check->access($block->reveal()));
-    $this->assertEquals($expected_access_result, $access_check->accessBlockPlugin($block_plugin->reveal()));
-  }
-
-  /**
-   * Provides test data for ::testAccess().
-   */
-  public function providerTestAccess() {
-    $annotation_forms_settings_tray_class = [
-      'forms' => [
-        'settings_tray' => $this->randomMachineName(),
-      ],
-    ];
-    $annotation_forms_settings_tray_not_set = [];
-    $annotation_forms_settings_tray_false = [
-      'forms' => [
-        'settings_tray' => FALSE,
-      ],
-    ];
-    return [
-      'block plugin with forms, forms[settings_tray] set to class' => [
-        TRUE,
-        $annotation_forms_settings_tray_class,
-        new AccessResultAllowed(),
-      ],
-      'block plugin with forms, forms[settings_tray] not set' => [
-        TRUE,
-        $annotation_forms_settings_tray_not_set,
-        new AccessResultNeutral(),
-      ],
-      'block plugin with forms, forms[settings_tray] set to FALSE' => [
-        TRUE,
-        $annotation_forms_settings_tray_false,
-        new AccessResultNeutral(),
-      ],
-      // In practice, all block plugins extend BlockBase, which means they all
-      // implement PluginWithFormsInterface, but this may change in the future.
-      // This ensures Settings Tray will continue to work correctly.
-      'block plugin without forms, forms[settings_tray] set to class' => [
-        FALSE,
-        $annotation_forms_settings_tray_class,
-        new AccessResultNeutral(),
-      ],
-      'block plugin without forms, forms[settings_tray] not set' => [
-        FALSE,
-        $annotation_forms_settings_tray_not_set,
-        new AccessResultNeutral(),
-      ],
-      'block plugin without forms, forms[settings_tray] set to FALSE' => [
-        FALSE,
-        $annotation_forms_settings_tray_false,
-        new AccessResultNeutral(),
-      ],
-    ];
-  }
-
-}
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index bba393acf1..87e2ccb91b 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -18,7 +18,6 @@
  * @ContentEntityType(
  *   id = "shortcut",
  *   label = @Translation("Shortcut link"),
- *   bundle_label = @Translation("Shortcut set"),
  *   handlers = {
  *     "access" = "Drupal\shortcut\ShortcutAccessControlHandler",
  *     "form" = {
diff --git a/core/modules/shortcut/src/Plugin/migrate/source/d7/Shortcut.php b/core/modules/shortcut/src/Plugin/migrate/source/d7/Shortcut.php
index ac2c63f29d..444c38feb9 100644
--- a/core/modules/shortcut/src/Plugin/migrate/source/d7/Shortcut.php
+++ b/core/modules/shortcut/src/Plugin/migrate/source/d7/Shortcut.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_shortcut",
- *   source_module = "shortcut"
+ *   source_provider = "shortcut"
  * )
  */
 class Shortcut extends DrupalSqlBase {
diff --git a/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSet.php b/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSet.php
index 7a3ed8ac53..a088ca8efb 100644
--- a/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSet.php
+++ b/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSet.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_shortcut_set",
- *   source_module = "shortcut"
+ *   source_provider = "shortcut"
  * )
  */
 class ShortcutSet extends DrupalSqlBase {
diff --git a/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSetUsers.php b/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSetUsers.php
index c4d54e9fd0..b86dccde16 100644
--- a/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSetUsers.php
+++ b/core/modules/shortcut/src/Plugin/migrate/source/d7/ShortcutSetUsers.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_shortcut_set_users",
- *   source_module = "shortcut"
+ *   source_provider = "shortcut"
  * )
  */
 class ShortcutSetUsers extends DrupalSqlBase {
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
similarity index 97%
rename from core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
rename to core/modules/shortcut/src/Tests/ShortcutLinksTest.php
index e39f652e55..cf4ae0fbe5 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\shortcut\Functional;
+namespace Drupal\shortcut\Tests;
 
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\Component\Utility\SafeMarkup;
@@ -8,7 +8,6 @@
 use Drupal\Core\Url;
 use Drupal\shortcut\Entity\Shortcut;
 use Drupal\shortcut\Entity\ShortcutSet;
-use Drupal\Tests\block\Functional\AssertBlockAppearsTrait;
 use Drupal\views\Entity\View;
 
 /**
@@ -18,8 +17,6 @@
  */
 class ShortcutLinksTest extends ShortcutTestBase {
 
-  use AssertBlockAppearsTrait;
-
   /**
    * Modules to enable.
    *
@@ -371,15 +368,15 @@ public function testShortcutLinkOrder() {
     $this->drupalLogin($this->drupalCreateUser(['access toolbar', 'access shortcuts', 'access content overview', 'administer content types']));
     $this->drupalGet(Url::fromRoute('<front>'));
     $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .toolbar-menu a');
-    $this->assertEqual($shortcuts[0]->getText(), 'Add content');
-    $this->assertEqual($shortcuts[1]->getText(), 'All content');
+    $this->assertEqual((string) $shortcuts[0], 'Add content');
+    $this->assertEqual((string) $shortcuts[1], 'All content');
     foreach ($this->set->getShortcuts() as $shortcut) {
       $shortcut->setWeight($shortcut->getWeight() * -1)->save();
     }
     $this->drupalGet(Url::fromRoute('<front>'));
     $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .toolbar-menu a');
-    $this->assertEqual($shortcuts[0]->getText(), 'All content');
-    $this->assertEqual($shortcuts[1]->getText(), 'Add content');
+    $this->assertEqual((string) $shortcuts[0], 'All content');
+    $this->assertEqual((string) $shortcuts[1], 'Add content');
   }
 
   /**
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php b/core/modules/shortcut/src/Tests/ShortcutSetsTest.php
similarity index 98%
rename from core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php
rename to core/modules/shortcut/src/Tests/ShortcutSetsTest.php
index b897df752d..e34518e0ae 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutSetsTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\shortcut\Functional;
+namespace Drupal\shortcut\Tests;
 
 use Drupal\shortcut\Entity\ShortcutSet;
 
@@ -68,7 +68,7 @@ public function testShortcutSetEdit() {
     // Test the contents of each th cell.
     $expected_items = [t('Name'), t('Weight'), t('Operations')];
     foreach ($elements as $key => $element) {
-      $this->assertEqual($element->getText(), $expected_items[$key]);
+      $this->assertEqual((string) $element[0], $expected_items[$key]);
     }
 
     // Look for test shortcuts in the table.
diff --git a/core/modules/shortcut/src/Tests/ShortcutTestBase.php b/core/modules/shortcut/src/Tests/ShortcutTestBase.php
index 584a6154c3..1e3196ceb4 100644
--- a/core/modules/shortcut/src/Tests/ShortcutTestBase.php
+++ b/core/modules/shortcut/src/Tests/ShortcutTestBase.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\shortcut\Tests;
 
-@trigger_error(__NAMESPACE__ . '\ShortcutTestBase is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\shortcut\Functional\ShortcutTestBase, see https://www.drupal.org/node/2906736.', E_USER_DEPRECATED);
-
 use Drupal\shortcut\Entity\Shortcut;
 use Drupal\shortcut\Entity\ShortcutSet;
 use Drupal\shortcut\ShortcutSetInterface;
@@ -11,11 +9,6 @@
 
 /**
  * Defines base class for shortcut test cases.
- *
- * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\Tests\shortcut\Functional\ShortcutTestBase.
- *
- * @see https://www.drupal.org/node/2906736
  */
 abstract class ShortcutTestBase extends WebTestBase {
 
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
similarity index 98%
rename from core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php
rename to core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
index 83bf47a495..300ca3b722 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\shortcut\Functional;
+namespace Drupal\shortcut\Tests;
 
 use Drupal\content_translation\Tests\ContentTranslationUITestBase;
 use Drupal\Core\Entity\EntityChangedInterface;
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php b/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
deleted file mode 100644
index 3f9cc87be3..0000000000
--- a/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-namespace Drupal\Tests\shortcut\Functional;
-
-use Drupal\shortcut\Entity\Shortcut;
-use Drupal\shortcut\Entity\ShortcutSet;
-use Drupal\shortcut\ShortcutSetInterface;
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Defines base class for shortcut test cases.
- */
-abstract class ShortcutTestBase extends BrowserTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['node', 'toolbar', 'shortcut'];
-
-  /**
-   * User with permission to administer shortcuts.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $adminUser;
-
-  /**
-   * User with permission to use shortcuts, but not administer them.
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $shortcutUser;
-
-  /**
-   * Generic node used for testing.
-   *
-   * @var \Drupal\node\NodeInterface
-   */
-  protected $node;
-
-  /**
-   * Site-wide default shortcut set.
-   *
-   * @var \Drupal\shortcut\ShortcutSetInterface
-   */
-  protected $set;
-
-  protected function setUp() {
-    parent::setUp();
-
-    if ($this->profile != 'standard') {
-      // Create Basic page and Article node types.
-      $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
-      $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
-
-      // Populate the default shortcut set.
-      $shortcut = Shortcut::create([
-        'shortcut_set' => 'default',
-        'title' => t('Add content'),
-        'weight' => -20,
-        'link' => [
-          'uri' => 'internal:/node/add',
-        ],
-      ]);
-      $shortcut->save();
-
-      $shortcut = Shortcut::create([
-        'shortcut_set' => 'default',
-        'title' => t('All content'),
-        'weight' => -19,
-        'link' => [
-          'uri' => 'internal:/admin/content',
-        ],
-      ]);
-      $shortcut->save();
-    }
-
-    // Create users.
-    $this->adminUser = $this->drupalCreateUser(['access toolbar', 'administer shortcuts', 'view the administration theme', 'create article content', 'create page content', 'access content overview', 'administer users', 'link to any page', 'edit any article content']);
-    $this->shortcutUser = $this->drupalCreateUser(['customize shortcut links', 'switch shortcut sets', 'access shortcuts', 'access content']);
-
-    // Create a node.
-    $this->node = $this->drupalCreateNode(['type' => 'article']);
-
-    // Log in as admin and grab the default shortcut set.
-    $this->drupalLogin($this->adminUser);
-    $this->set = ShortcutSet::load('default');
-    \Drupal::entityManager()->getStorage('shortcut_set')->assignUser($this->set, $this->adminUser);
-  }
-
-  /**
-   * Creates a generic shortcut set.
-   */
-  public function generateShortcutSet($label = '', $id = NULL) {
-    $set = ShortcutSet::create([
-      'id' => isset($id) ? $id : strtolower($this->randomMachineName()),
-      'label' => empty($label) ? $this->randomString() : $label,
-    ]);
-    $set->save();
-    return $set;
-  }
-
-  /**
-   * Extracts information from shortcut set links.
-   *
-   * @param \Drupal\shortcut\ShortcutSetInterface $set
-   *   The shortcut set object to extract information from.
-   * @param string $key
-   *   The array key indicating what information to extract from each link:
-   *    - 'title': Extract shortcut titles.
-   *    - 'link': Extract shortcut paths.
-   *    - 'id': Extract the shortcut ID.
-   *
-   * @return array
-   *   Array of the requested information from each link.
-   */
-  public function getShortcutInformation(ShortcutSetInterface $set, $key) {
-    $info = [];
-    \Drupal::entityManager()->getStorage('shortcut')->resetCache();
-    foreach ($set->getShortcuts() as $shortcut) {
-      if ($key == 'link') {
-        $info[] = $shortcut->link->uri;
-      }
-      else {
-        $info[] = $shortcut->{$key}->value;
-      }
-    }
-    return $info;
-  }
-
-}
diff --git a/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml b/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
index ec5e2f262b..c9eedbb265 100644
--- a/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
+++ b/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
@@ -10,7 +10,6 @@ source:
     - simpletest_httpauth_password
     - simpletest_httpauth_username
     - simpletest_verbose
-  source_module: simpletest
 process:
   clear_results: simpletest_clear_results
   'httpauth/method': simpletest_httpauth_method
diff --git a/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml b/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
index f5e9357466..b77f76a329 100644
--- a/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
+++ b/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
@@ -10,7 +10,6 @@ source:
     - simpletest_httpauth_password
     - simpletest_httpauth_username
     - simpletest_verbose
-  source_module: simpletest
 process:
   clear_results: simpletest_clear_results
   'httpauth/method': simpletest_httpauth_method
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index 2213e9347d..83d7feb699 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -363,7 +363,7 @@ function simpletest_phpunit_run_command(array $unescaped_test_classnames, $phpun
 
   // exec in a subshell so that the environment is isolated when running tests
   // via the simpletest UI.
-  $ret = exec(implode(" ", $command), $output, $status);
+  $ret = exec(join($command, " "), $output, $status);
 
   chdir($old_cwd);
   putenv('SIMPLETEST_DB=');
@@ -772,10 +772,9 @@ function simpletest_mail_alter(&$message) {
  * @param $phpunit_xml_file
  *   Path to the PHPUnit XML file.
  *
- * @return array[]|null
+ * @return array[]
  *   The results as array of rows in a format that can be inserted into
- *   {simpletest}. If the phpunit_xml_file does not have any contents then the
- *   function will return NULL.
+ *   {simpletest}.
  */
 function simpletest_phpunit_xml_to_rows($test_id, $phpunit_xml_file) {
   $contents = @file_get_contents($phpunit_xml_file);
@@ -795,7 +794,7 @@ function simpletest_phpunit_xml_to_rows($test_id, $phpunit_xml_file) {
  *
  * @param \SimpleXMLElement $element
  *   The PHPUnit xml to search for test cases.
- * @param \SimpleXMLElement $parent
+ * @param \SimpleXMLElement $suite
  *   (Optional) The parent of the current element. Defaults to NULL.
  *
  * @return array
diff --git a/core/modules/simpletest/src/AssertHelperTrait.php b/core/modules/simpletest/src/AssertHelperTrait.php
index 8a7ec9925b..5325e8c9b0 100644
--- a/core/modules/simpletest/src/AssertHelperTrait.php
+++ b/core/modules/simpletest/src/AssertHelperTrait.php
@@ -2,18 +2,34 @@
 
 namespace Drupal\simpletest;
 
-use Drupal\Tests\AssertHelperTrait as BaseAssertHelperTrait;
+use Drupal\Component\Render\MarkupInterface;
 
 /**
  * Provides helper methods for assertions.
- *
- * @deprecated in Drupal 8.4.x. Will be removed before Drupal 9.0.0. Use
- *   Drupal\Tests\AssertHelperTrait instead.
- *
- * @see https://www.drupal.org/node/2884454
  */
 trait AssertHelperTrait {
 
-  use BaseAssertHelperTrait;
+  /**
+   * Casts MarkupInterface objects into strings.
+   *
+   * @param string|array $value
+   *   The value to act on.
+   *
+   * @return mixed
+   *   The input value, with MarkupInterface objects casted to string.
+   */
+  protected static function castSafeStrings($value) {
+    if ($value instanceof MarkupInterface) {
+      $value = (string) $value;
+    }
+    if (is_array($value)) {
+      array_walk_recursive($value, function (&$item) {
+        if ($item instanceof MarkupInterface) {
+          $item = (string) $item;
+        }
+      });
+    }
+    return $value;
+  }
 
 }
diff --git a/core/modules/simpletest/src/BlockCreationTrait.php b/core/modules/simpletest/src/BlockCreationTrait.php
index f5dcffe46e..b252d9e9e6 100644
--- a/core/modules/simpletest/src/BlockCreationTrait.php
+++ b/core/modules/simpletest/src/BlockCreationTrait.php
@@ -2,20 +2,66 @@
 
 namespace Drupal\simpletest;
 
-use Drupal\Tests\block\Traits\BlockCreationTrait as BaseBlockCreationTrait;
+use Drupal\block\Entity\Block;
 
 /**
  * Provides methods to create and place block with default settings.
  *
  * This trait is meant to be used only by test classes.
- *
- * @deprecated in Drupal 8.4.x. Will be removed before Drupal 9.0.0. Use
- *   Drupal\Tests\AssertHelperTrait instead.
- *
- * @see https://www.drupal.org/node/2884454
  */
 trait BlockCreationTrait {
 
-  use BaseBlockCreationTrait;
+  /**
+   * Creates a block instance based on default settings.
+   *
+   * @param string $plugin_id
+   *   The plugin ID of the block type for this block instance.
+   * @param array $settings
+   *   (optional) An associative array of settings for the block entity.
+   *   Override the defaults by specifying the key and value in the array, for
+   *   example:
+   *   @code
+   *     $this->drupalPlaceBlock('system_powered_by_block', array(
+   *       'label' => t('Hello, world!'),
+   *     ));
+   *   @endcode
+   *   The following defaults are provided:
+   *   - label: Random string.
+   *   - ID: Random string.
+   *   - region: 'sidebar_first'.
+   *   - theme: The default theme.
+   *   - visibility: Empty array.
+   *
+   * @return \Drupal\block\Entity\Block
+   *   The block entity.
+   *
+   * @todo
+   *   Add support for creating custom block instances.
+   */
+  protected function placeBlock($plugin_id, array $settings = []) {
+    $config = \Drupal::configFactory();
+    $settings += [
+      'plugin' => $plugin_id,
+      'region' => 'sidebar_first',
+      'id' => strtolower($this->randomMachineName(8)),
+      'theme' => $config->get('system.theme')->get('default'),
+      'label' => $this->randomMachineName(8),
+      'visibility' => [],
+      'weight' => 0,
+    ];
+    $values = [];
+    foreach (['region', 'id', 'theme', 'plugin', 'weight', 'visibility'] as $key) {
+      $values[$key] = $settings[$key];
+      // Remove extra values that do not belong in the settings array.
+      unset($settings[$key]);
+    }
+    foreach ($values['visibility'] as $id => $visibility) {
+      $values['visibility'][$id]['id'] = $id;
+    }
+    $values['settings'] = $settings;
+    $block = Block::create($values);
+    $block->save();
+    return $block;
+  }
 
 }
diff --git a/core/modules/simpletest/src/ContentTypeCreationTrait.php b/core/modules/simpletest/src/ContentTypeCreationTrait.php
index b929893f0a..ec15b9af77 100644
--- a/core/modules/simpletest/src/ContentTypeCreationTrait.php
+++ b/core/modules/simpletest/src/ContentTypeCreationTrait.php
@@ -2,20 +2,53 @@
 
 namespace Drupal\simpletest;
 
-use Drupal\Tests\node\Traits\ContentTypeCreationTrait as BaseContentTypeCreationTrait;
+use Drupal\Component\Render\FormattableMarkup;
+use Drupal\node\Entity\NodeType;
+use PHPUnit\Framework\TestCase;
 
 /**
  * Provides methods to create content type from given values.
  *
  * This trait is meant to be used only by test classes.
- *
- * @deprecated in Drupal 8.4.x. Will be removed before Drupal 9.0.0. Use
- *   Drupal\Tests\ContentTypeCreationTrait instead.
- *
- * @see https://www.drupal.org/node/2884454
  */
 trait ContentTypeCreationTrait {
 
-  use BaseContentTypeCreationTrait;
+  /**
+   * Creates a custom content type based on default settings.
+   *
+   * @param array $values
+   *   An array of settings to change from the defaults.
+   *   Example: 'type' => 'foo'.
+   *
+   * @return \Drupal\node\Entity\NodeType
+   *   Created content type.
+   */
+  protected function createContentType(array $values = []) {
+    // Find a non-existent random type name.
+    if (!isset($values['type'])) {
+      do {
+        $id = strtolower($this->randomMachineName(8));
+      } while (NodeType::load($id));
+    }
+    else {
+      $id = $values['type'];
+    }
+    $values += [
+      'type' => $id,
+      'name' => $id,
+    ];
+    $type = NodeType::create($values);
+    $status = $type->save();
+    node_add_body_field($type);
+
+    if ($this instanceof TestCase) {
+      $this->assertSame($status, SAVED_NEW, (new FormattableMarkup('Created content type %type.', ['%type' => $type->id()]))->__toString());
+    }
+    else {
+      $this->assertEqual($status, SAVED_NEW, (new FormattableMarkup('Created content type %type.', ['%type' => $type->id()]))->__toString());
+    }
+
+    return $type;
+  }
 
 }
diff --git a/core/modules/simpletest/src/Form/SimpletestResultsForm.php b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
index e1d21ae7c8..090ae0276e 100644
--- a/core/modules/simpletest/src/Form/SimpletestResultsForm.php
+++ b/core/modules/simpletest/src/Form/SimpletestResultsForm.php
@@ -235,7 +235,7 @@ protected function getResults($test_id) {
    *
    * @param array $form
    *   The form to attach the results to.
-   * @param array $results
+   * @param array $test_results
    *   The simpletest results.
    *
    * @return array
diff --git a/core/modules/simpletest/src/KernelTestBase.php b/core/modules/simpletest/src/KernelTestBase.php
index b133bfb2fb..8c92ec7dad 100644
--- a/core/modules/simpletest/src/KernelTestBase.php
+++ b/core/modules/simpletest/src/KernelTestBase.php
@@ -454,6 +454,7 @@ protected function installSchema($module, $tables) {
   }
 
 
+
   /**
    * Installs the storage schema for a specific entity type.
    *
diff --git a/core/modules/simpletest/src/NodeCreationTrait.php b/core/modules/simpletest/src/NodeCreationTrait.php
index 19351a2e2a..20dc3f8379 100644
--- a/core/modules/simpletest/src/NodeCreationTrait.php
+++ b/core/modules/simpletest/src/NodeCreationTrait.php
@@ -2,20 +2,83 @@
 
 namespace Drupal\simpletest;
 
-use Drupal\Tests\node\Traits\NodeCreationTrait as BaseNodeCreationTrait;
+use Drupal\node\Entity\Node;
 
 /**
  * Provides methods to create node based on default settings.
  *
  * This trait is meant to be used only by test classes.
- *
- * @deprecated in Drupal 8.4.x. Will be removed before Drupal 9.0.0. Use
- *   Drupal\Tests\NodeCreationTrait instead.
- *
- * @see https://www.drupal.org/node/2884454
  */
 trait NodeCreationTrait {
 
-  use BaseNodeCreationTrait;
+  /**
+   * Get a node from the database based on its title.
+   *
+   * @param string|\Drupal\Component\Render\MarkupInterface $title
+   *   A node title, usually generated by $this->randomMachineName().
+   * @param $reset
+   *   (optional) Whether to reset the entity cache.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   A node entity matching $title.
+   */
+  public function getNodeByTitle($title, $reset = FALSE) {
+    if ($reset) {
+      \Drupal::entityTypeManager()->getStorage('node')->resetCache();
+    }
+    // Cast MarkupInterface objects to string.
+    $title = (string) $title;
+    $nodes = \Drupal::entityTypeManager()
+      ->getStorage('node')
+      ->loadByProperties(['title' => $title]);
+    // Load the first node returned from the database.
+    $returned_node = reset($nodes);
+    return $returned_node;
+  }
+
+  /**
+   * Creates a node based on default settings.
+   *
+   * @param array $settings
+   *   (optional) An associative array of settings for the node, as used in
+   *   entity_create(). Override the defaults by specifying the key and value
+   *   in the array, for example:
+   *   @code
+   *     $this->drupalCreateNode(array(
+   *       'title' => t('Hello, world!'),
+   *       'type' => 'article',
+   *     ));
+   *   @endcode
+   *   The following defaults are provided:
+   *   - body: Random string using the default filter format:
+   *     @code
+   *       $settings['body'][0] = array(
+   *         'value' => $this->randomMachineName(32),
+   *         'format' => filter_default_format(),
+   *       );
+   *     @endcode
+   *   - title: Random string.
+   *   - type: 'page'.
+   *   - uid: The currently logged in user, or anonymous.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   The created node entity.
+   */
+  protected function createNode(array $settings = []) {
+    // Populate defaults array.
+    $settings += [
+      'body'      => [[
+        'value' => $this->randomMachineName(32),
+        'format' => filter_default_format(),
+      ]],
+      'title'     => $this->randomMachineName(8),
+      'type'      => 'page',
+      'uid'       => \Drupal::currentUser()->id(),
+    ];
+    $node = Node::create($settings);
+    $node->save();
+
+    return $node;
+  }
 
 }
diff --git a/core/modules/simpletest/src/TestBase.php b/core/modules/simpletest/src/TestBase.php
index a3fd1788d6..8b33f4be06 100644
--- a/core/modules/simpletest/src/TestBase.php
+++ b/core/modules/simpletest/src/TestBase.php
@@ -12,7 +12,6 @@
 use Drupal\Core\Test\TestDatabase;
 use Drupal\Core\Test\TestSetupTrait;
 use Drupal\Core\Utility\Error;
-use Drupal\Tests\AssertHelperTrait as BaseAssertHelperTrait;
 use Drupal\Tests\ConfigTestTrait;
 use Drupal\Tests\RandomGeneratorTrait;
 use Drupal\Tests\SessionTestTrait;
@@ -25,10 +24,10 @@
  */
 abstract class TestBase {
 
-  use BaseAssertHelperTrait;
   use TestSetupTrait;
   use SessionTestTrait;
   use RandomGeneratorTrait;
+  use AssertHelperTrait;
   use GeneratePermutationsTrait;
   // For backwards compatibility switch the visbility of the methods to public.
   use ConfigTestTrait {
diff --git a/core/modules/simpletest/src/TestDiscovery.php b/core/modules/simpletest/src/TestDiscovery.php
index 9e6c32c327..5374520e56 100644
--- a/core/modules/simpletest/src/TestDiscovery.php
+++ b/core/modules/simpletest/src/TestDiscovery.php
@@ -144,8 +144,8 @@ public function registerTestNamespaces() {
    *   An array of tests keyed by the the group name.
    * @code
    *     $groups['block'] => array(
-   *       'Drupal\Tests\block\Functional\BlockTest' => array(
-   *         'name' => 'Drupal\Tests\block\Functional\BlockTest',
+   *       'Drupal\block\Tests\BlockTest' => array(
+   *         'name' => 'Drupal\block\Tests\BlockTest',
    *         'description' => 'Tests block UI CRUD functionality.',
    *         'group' => 'block',
    *       ),
@@ -189,17 +189,14 @@ public function getTestClasses($extension = NULL, array $types = []) {
         // abstract class, trait or test fixture.
         continue;
       }
-      // Skip this test class if it is a Simpletest-based test and requires
-      // unavailable modules. TestDiscovery should not filter out module
-      // requirements for PHPUnit-based test classes.
-      // @todo Move this behavior to \Drupal\simpletest\TestBase so tests can be
-      //       marked as skipped, instead.
+      // Skip this test class if it requires unavailable modules.
+      // @todo PHPUnit skips tests with unmet requirements when executing a test
+      //   (instead of excluding them upfront). Refactor test runner to follow
+      //   that approach.
       // @see https://www.drupal.org/node/1273478
-      if ($info['type'] == 'Simpletest') {
-        if (!empty($info['requires']['module'])) {
-          if (array_diff($info['requires']['module'], $this->availableExtensions['module'])) {
-            continue;
-          }
+      if (!empty($info['requires']['module'])) {
+        if (array_diff($info['requires']['module'], $this->availableExtensions['module'])) {
+          continue;
         }
       }
 
@@ -312,7 +309,7 @@ public static function scanDirectory($namespace_prefix, $path) {
   /**
    * Retrieves information about a test class for UI purposes.
    *
-   * @param string $classname
+   * @param string $class
    *   The test classname.
    * @param string $doc_comment
    *   (optional) The class PHPDoc comment. If not passed in reflection will be
diff --git a/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php b/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
index bb9da9411a..7e4f9125b2 100644
--- a/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
+++ b/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
@@ -87,7 +87,7 @@ public function testUserAgentValidation() {
     $this->drupalLogout();
 
     $system_path = $base_url . '/' . drupal_get_path('module', 'system');
-    $http_path = $system_path . '/tests/http.php/user/login';
+    $HTTP_path = $system_path . '/tests/http.php/user/login';
     $https_path = $system_path . '/tests/https.php/user/login';
     // Generate a valid simpletest User-Agent to pass validation.
     $this->assertTrue(preg_match('/test\d+/', $this->databasePrefix, $matches), 'Database prefix contains test prefix.');
@@ -95,14 +95,14 @@ public function testUserAgentValidation() {
     $this->additionalCurlOptions = [CURLOPT_USERAGENT => $test_ua];
 
     // Test pages only available for testing.
-    $this->drupalGet($http_path);
+    $this->drupalGet($HTTP_path);
     $this->assertResponse(200, 'Requesting http.php with a legitimate simpletest User-Agent returns OK.');
     $this->drupalGet($https_path);
     $this->assertResponse(200, 'Requesting https.php with a legitimate simpletest User-Agent returns OK.');
 
     // Now slightly modify the HMAC on the header, which should not validate.
     $this->additionalCurlOptions = [CURLOPT_USERAGENT => $test_ua . 'X'];
-    $this->drupalGet($http_path);
+    $this->drupalGet($HTTP_path);
     $this->assertResponse(403, 'Requesting http.php with a bad simpletest User-Agent fails.');
     $this->drupalGet($https_path);
     $this->assertResponse(403, 'Requesting https.php with a bad simpletest User-Agent fails.');
@@ -110,7 +110,7 @@ public function testUserAgentValidation() {
     // Use a real User-Agent and verify that the special files http.php and
     // https.php can't be accessed.
     $this->additionalCurlOptions = [CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12'];
-    $this->drupalGet($http_path);
+    $this->drupalGet($HTTP_path);
     $this->assertResponse(403, 'Requesting http.php with a normal User-Agent fails.');
     $this->drupalGet($https_path);
     $this->assertResponse(403, 'Requesting https.php with a normal User-Agent fails.');
diff --git a/core/modules/simpletest/src/Tests/SimpleTestTest.php b/core/modules/simpletest/src/Tests/SimpleTestTest.php
index 5896b384a4..a32c142369 100644
--- a/core/modules/simpletest/src/Tests/SimpleTestTest.php
+++ b/core/modules/simpletest/src/Tests/SimpleTestTest.php
@@ -175,7 +175,7 @@ public function stubTest() {
         // along by the rethrow.
         assert(FALSE, 'Lorem Ipsum');
       }
-      catch (\AssertionError $e ) {
+      catch ( \AssertionError $e ) {
         $this->assertEqual($e->getMessage(), 'Lorem Ipsum', 'Runtime assertions Enabled and running.');
       }
     }
diff --git a/core/modules/simpletest/src/Tests/SkipRequiredModulesTest.php b/core/modules/simpletest/src/Tests/SkipRequiredModulesTest.php
deleted file mode 100644
index c68237c4dc..0000000000
--- a/core/modules/simpletest/src/Tests/SkipRequiredModulesTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace Drupal\simpletest\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests if Simpletest-based tests are skipped based on module requirements.
- *
- * This test should always be skipped when TestDiscovery is used to discover it.
- * This means that if you specify this test to run-tests.sh with --class or
- * --file, this test will run and fail.
- *
- * @dependencies module_does_not_exist
- *
- * @group simpletest
- *
- * @todo Change or remove this test when Simpletest-based tests are able to skip
- *       themselves based on requirements.
- * @see https://www.drupal.org/node/1273478
- */
-class SkipRequiredModulesTest extends WebTestBase {
-
-  public function testModuleNotFound() {
-    $this->fail('This test should have been skipped during discovery.');
-  }
-
-}
diff --git a/core/modules/simpletest/src/UserCreationTrait.php b/core/modules/simpletest/src/UserCreationTrait.php
index f97ec5ccc2..4b4d0ec956 100644
--- a/core/modules/simpletest/src/UserCreationTrait.php
+++ b/core/modules/simpletest/src/UserCreationTrait.php
@@ -2,7 +2,11 @@
 
 namespace Drupal\simpletest;
 
-use Drupal\Tests\user\Traits\UserCreationTrait as BaseUserCreationTrait;
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\user\Entity\Role;
+use Drupal\user\Entity\User;
+use Drupal\user\RoleInterface;
 
 /**
  * Provides methods to create additional test users and switch the currently
@@ -10,14 +14,201 @@
  *
  * This trait is meant to be used only by test classes extending
  * \Drupal\simpletest\TestBase.
- *
- * @deprecated in Drupal 8.4.x. Will be removed before Drupal 9.0.0. Use
- *   Drupal\Tests\UserCreationTrait instead.
- *
- * @see https://www.drupal.org/node/2884454
  */
 trait UserCreationTrait {
 
-  use BaseUserCreationTrait;
+  /**
+   * Switch the current logged in user.
+   *
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *   The user account object.
+   */
+  protected function setCurrentUser(AccountInterface $account) {
+    \Drupal::currentUser()->setAccount($account);
+  }
+
+  /**
+   * Create a user with a given set of permissions.
+   *
+   * @param array $permissions
+   *   Array of permission names to assign to user. Note that the user always
+   *   has the default permissions derived from the "authenticated users" role.
+   * @param string $name
+   *   The user name.
+   * @param bool $admin
+   *   (optional) Whether the user should be an administrator
+   *   with all the available permissions.
+   *
+   * @return \Drupal\user\Entity\User|false
+   *   A fully loaded user object with pass_raw property, or FALSE if account
+   *   creation fails.
+   */
+  protected function createUser(array $permissions = [], $name = NULL, $admin = FALSE) {
+    // Create a role with the given permission set, if any.
+    $rid = FALSE;
+    if ($permissions) {
+      $rid = $this->createRole($permissions);
+      if (!$rid) {
+        return FALSE;
+      }
+    }
+
+    // Create a user assigned to that role.
+    $edit = [];
+    $edit['name'] = !empty($name) ? $name : $this->randomMachineName();
+    $edit['mail'] = $edit['name'] . '@example.com';
+    $edit['pass'] = user_password();
+    $edit['status'] = 1;
+    if ($rid) {
+      $edit['roles'] = [$rid];
+    }
+
+    if ($admin) {
+      $edit['roles'][] = $this->createAdminRole();
+    }
+
+    $account = User::create($edit);
+    $account->save();
+
+    $this->assertTrue($account->id(), SafeMarkup::format('User created with name %name and pass %pass', ['%name' => $edit['name'], '%pass' => $edit['pass']]), 'User login');
+    if (!$account->id()) {
+      return FALSE;
+    }
+
+    // Add the raw password so that we can log in as this user.
+    $account->pass_raw = $edit['pass'];
+    // Support BrowserTestBase as well.
+    $account->passRaw = $account->pass_raw;
+    return $account;
+  }
+
+  /**
+   * Creates an administrative role.
+   *
+   * @param string $rid
+   *   (optional) The role ID (machine name). Defaults to a random name.
+   * @param string $name
+   *   (optional) The label for the role. Defaults to a random string.
+   * @param int $weight
+   *   (optional) The weight for the role. Defaults NULL so that entity_create()
+   *   sets the weight to maximum + 1.
+   *
+   * @return string
+   *   Role ID of newly created role, or FALSE if role creation failed.
+   */
+  protected function createAdminRole($rid = NULL, $name = NULL, $weight = NULL) {
+    $rid = $this->createRole([], $rid, $name, $weight);
+    if ($rid) {
+      /** @var \Drupal\user\RoleInterface $role */
+      $role = Role::load($rid);
+      $role->setIsAdmin(TRUE);
+      $role->save();
+    }
+    return $rid;
+  }
+
+  /**
+   * Creates a role with specified permissions.
+   *
+   * @param array $permissions
+   *   Array of permission names to assign to role.
+   * @param string $rid
+   *   (optional) The role ID (machine name). Defaults to a random name.
+   * @param string $name
+   *   (optional) The label for the role. Defaults to a random string.
+   * @param int $weight
+   *   (optional) The weight for the role. Defaults NULL so that entity_create()
+   *   sets the weight to maximum + 1.
+   *
+   * @return string
+   *   Role ID of newly created role, or FALSE if role creation failed.
+   */
+  protected function createRole(array $permissions, $rid = NULL, $name = NULL, $weight = NULL) {
+    // Generate a random, lowercase machine name if none was passed.
+    if (!isset($rid)) {
+      $rid = strtolower($this->randomMachineName(8));
+    }
+    // Generate a random label.
+    if (!isset($name)) {
+      // In the role UI role names are trimmed and random string can start or
+      // end with a space.
+      $name = trim($this->randomString(8));
+    }
+
+    // Check the all the permissions strings are valid.
+    if (!$this->checkPermissions($permissions)) {
+      return FALSE;
+    }
+
+    // Create new role.
+    $role = Role::create([
+      'id' => $rid,
+      'label' => $name,
+    ]);
+    if (isset($weight)) {
+      $role->set('weight', $weight);
+    }
+    $result = $role->save();
+
+    $this->assertIdentical($result, SAVED_NEW, SafeMarkup::format('Created role ID @rid with name @name.', [
+      '@name' => var_export($role->label(), TRUE),
+      '@rid' => var_export($role->id(), TRUE),
+    ]), 'Role');
+
+    if ($result === SAVED_NEW) {
+      // Grant the specified permissions to the role, if any.
+      if (!empty($permissions)) {
+        $this->grantPermissions($role, $permissions);
+        $assigned_permissions = Role::load($role->id())->getPermissions();
+        $missing_permissions = array_diff($permissions, $assigned_permissions);
+        if (!$missing_permissions) {
+          $this->pass(SafeMarkup::format('Created permissions: @perms', ['@perms' => implode(', ', $permissions)]), 'Role');
+        }
+        else {
+          $this->fail(SafeMarkup::format('Failed to create permissions: @perms', ['@perms' => implode(', ', $missing_permissions)]), 'Role');
+        }
+      }
+      return $role->id();
+    }
+    else {
+      return FALSE;
+    }
+  }
+
+  /**
+   * Checks whether a given list of permission names is valid.
+   *
+   * @param array $permissions
+   *   The permission names to check.
+   *
+   * @return bool
+   *   TRUE if the permissions are valid, FALSE otherwise.
+   */
+  protected function checkPermissions(array $permissions) {
+    $available = array_keys(\Drupal::service('user.permissions')->getPermissions());
+    $valid = TRUE;
+    foreach ($permissions as $permission) {
+      if (!in_array($permission, $available)) {
+        $this->fail(SafeMarkup::format('Invalid permission %permission.', ['%permission' => $permission]), 'Role');
+        $valid = FALSE;
+      }
+    }
+    return $valid;
+  }
+
+  /**
+   * Grant permissions to a user role.
+   *
+   * @param \Drupal\user\RoleInterface $role
+   *   The ID of a user role to alter.
+   * @param array $permissions
+   *   (optional) A list of permission names to grant.
+   */
+  protected function grantPermissions(RoleInterface $role, array $permissions) {
+    foreach ($permissions as $permission) {
+      $role->grantPermission($permission);
+    }
+    $role->trustData()->save();
+  }
 
 }
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 569103224e..975d95bd9a 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -8,6 +8,7 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Database\Database;
 use Drupal\Core\EventSubscriber\AjaxResponseSubscriber;
 use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
 use Drupal\Core\Session\AccountInterface;
@@ -17,12 +18,8 @@
 use Drupal\Core\Url;
 use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
 use Drupal\Tests\EntityViewTrait;
-use Drupal\Tests\block\Traits\BlockCreationTrait as BaseBlockCreationTrait;
-use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
-use Drupal\Tests\node\Traits\NodeCreationTrait;
 use Drupal\Tests\Traits\Core\CronRunTrait;
 use Drupal\Tests\TestFileCreationTrait;
-use Drupal\Tests\user\Traits\UserCreationTrait;
 use Drupal\Tests\XdebugRequestTrait;
 use Zend\Diactoros\Uri;
 
@@ -40,7 +37,7 @@
     compareFiles as drupalCompareFiles;
   }
   use AssertPageCacheContextsAndTagsTrait;
-  use BaseBlockCreationTrait {
+  use BlockCreationTrait {
     placeBlock as drupalPlaceBlock;
   }
   use ContentTypeCreationTrait {
@@ -392,6 +389,69 @@ protected function setUp() {
     $this->rebuildAll();
   }
 
+  /**
+   * Returns the parameters that will be used when Simpletest installs Drupal.
+   *
+   * @see install_drupal()
+   * @see install_state_defaults()
+   *
+   * @return array
+   *   Array of parameters for use in install_drupal().
+   */
+  protected function installParameters() {
+    $connection_info = Database::getConnectionInfo();
+    $driver = $connection_info['default']['driver'];
+    $connection_info['default']['prefix'] = $connection_info['default']['prefix']['default'];
+    unset($connection_info['default']['driver']);
+    unset($connection_info['default']['namespace']);
+    unset($connection_info['default']['pdo']);
+    unset($connection_info['default']['init_commands']);
+    // Remove database connection info that is not used by SQLite.
+    if ($driver == 'sqlite') {
+      unset($connection_info['default']['username']);
+      unset($connection_info['default']['password']);
+      unset($connection_info['default']['host']);
+      unset($connection_info['default']['port']);
+    }
+    $parameters = [
+      'interactive' => FALSE,
+      'parameters' => [
+        'profile' => $this->profile,
+        'langcode' => 'en',
+      ],
+      'forms' => [
+        'install_settings_form' => [
+          'driver' => $driver,
+          $driver => $connection_info['default'],
+        ],
+        'install_configure_form' => [
+          'site_name' => 'Drupal',
+          'site_mail' => 'simpletest@example.com',
+          'account' => [
+            'name' => $this->rootUser->name,
+            'mail' => $this->rootUser->getEmail(),
+            'pass' => [
+              'pass1' => $this->rootUser->pass_raw,
+              'pass2' => $this->rootUser->pass_raw,
+            ],
+          ],
+          // \Drupal\Core\Render\Element\Checkboxes::valueCallback() requires
+          // NULL instead of FALSE values for programmatic form submissions to
+          // disable a checkbox.
+          'enable_update_status_module' => NULL,
+          'enable_update_status_emails' => NULL,
+        ],
+      ],
+    ];
+
+    // If we only have one db driver available, we cannot set the driver.
+    include_once DRUPAL_ROOT . '/core/includes/install.inc';
+    if (count($this->getDatabaseTypes()) == 1) {
+      unset($parameters['forms']['install_settings_form']['driver']);
+    }
+    return $parameters;
+  }
+
   /**
    * Preserve the original batch, and instantiate the test batch.
    */
@@ -419,6 +479,21 @@ protected function restoreBatch() {
     $batch = $this->originalBatch;
   }
 
+  /**
+   * Returns all supported database driver installer objects.
+   *
+   * This wraps drupal_get_database_types() for use without a current container.
+   *
+   * @return \Drupal\Core\Database\Install\Tasks[]
+   *   An array of available database driver installer objects.
+   */
+  protected function getDatabaseTypes() {
+    \Drupal::setContainer($this->originalContainer);
+    $database_types = drupal_get_database_types();
+    \Drupal::unsetContainer();
+    return $database_types;
+  }
+
   /**
    * Queues custom translations to be written to settings.php.
    *
diff --git a/core/modules/simpletest/tests/src/Functional/MissingDependentModuleUnitTest.php b/core/modules/simpletest/tests/src/Functional/MissingDependentModuleUnitTest.php
new file mode 100644
index 0000000000..acd55dd014
--- /dev/null
+++ b/core/modules/simpletest/tests/src/Functional/MissingDependentModuleUnitTest.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Drupal\Tests\simpletest\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * This test should not load since it requires a module that is not found.
+ *
+ * @group simpletest
+ * @dependencies simpletest_missing_module
+ */
+class MissingDependentModuleUnitTest extends BrowserTestBase {
+
+  /**
+   * Ensure that this test will not be loaded despite its dependency.
+   */
+  public function testFail() {
+    $this->fail('Running test with missing required module.');
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/AssertHelperTraitTest.php b/core/modules/simpletest/tests/src/Unit/AssertHelperTraitTest.php
similarity index 80%
rename from core/tests/Drupal/Tests/AssertHelperTraitTest.php
rename to core/modules/simpletest/tests/src/Unit/AssertHelperTraitTest.php
index f2e7eca6c7..8c816b0bbe 100644
--- a/core/tests/Drupal/Tests/AssertHelperTraitTest.php
+++ b/core/modules/simpletest/tests/src/Unit/AssertHelperTraitTest.php
@@ -1,13 +1,19 @@
 <?php
 
-namespace Drupal\Tests;
+/**
+ * @file
+ * Contains \Drupal\Tests\simpletest\Unit\AssertHelperTraitTest.
+ */
+
+namespace Drupal\Tests\simpletest\Unit;
 
 use Drupal\Core\Render\Markup;
+use Drupal\simpletest\AssertHelperTrait;
+use Drupal\Tests\UnitTestCase;
 
 /**
- * @coversDefaultClass \Drupal\Tests\AssertHelperTrait
+ * @coversDefaultClass \Drupal\simpletest\AssertHelperTrait
  * @group simpletest
- * @group Tests
  */
 class AssertHelperTraitTest extends UnitTestCase {
 
diff --git a/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php b/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php
index 625297e439..88a2aca62f 100644
--- a/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php
+++ b/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php
@@ -348,7 +348,8 @@ public function testGetTestClassesWithSelectedTypes() {
     $result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
     $this->assertCount(2, $result);
     $this->assertEquals([
-      'example' => [],
+      'example' => [
+      ],
       'example2' => [
         'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [
           'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3',
diff --git a/core/modules/statistics/migration_templates/statistics_settings.yml b/core/modules/statistics/migration_templates/statistics_settings.yml
index 429d7e11c9..1f5b5bbd0e 100644
--- a/core/modules/statistics/migration_templates/statistics_settings.yml
+++ b/core/modules/statistics/migration_templates/statistics_settings.yml
@@ -9,7 +9,6 @@ source:
     - statistics_enable_access_log
     - statistics_flush_accesslog_timer
     - statistics_count_content_views
-  source_module: statistics
 process:
   'count_content_views': statistics_count_content_views
 destination:
diff --git a/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php b/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php
index dcb69833e8..0cccb1700b 100644
--- a/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php
+++ b/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php
@@ -131,7 +131,7 @@ public function resetDayCount() {
   public function maxTotalCount() {
     $query = $this->connection->select('node_counter', 'nc');
     $query->addExpression('MAX(totalcount)');
-    $max_total_count = (int) $query->execute()->fetchField();
+    $max_total_count = (int)$query->execute()->fetchField();
     return $max_total_count;
   }
 
diff --git a/core/modules/syslog/migration_templates/d6_syslog_settings.yml b/core/modules/syslog/migration_templates/d6_syslog_settings.yml
index 5426271b4a..86a7017d00 100644
--- a/core/modules/syslog/migration_templates/d6_syslog_settings.yml
+++ b/core/modules/syslog/migration_templates/d6_syslog_settings.yml
@@ -7,7 +7,6 @@ source:
   variables:
     - syslog_identity
     - syslog_facility
-  source_module: syslog
 process:
   identity: syslog_identity
   facility: syslog_facility
diff --git a/core/modules/syslog/migration_templates/d7_syslog_settings.yml b/core/modules/syslog/migration_templates/d7_syslog_settings.yml
index 357b38a63b..4000572226 100644
--- a/core/modules/syslog/migration_templates/d7_syslog_settings.yml
+++ b/core/modules/syslog/migration_templates/d7_syslog_settings.yml
@@ -8,7 +8,6 @@ source:
     - syslog_facility
     - syslog_format
     - syslog_identity
-  source_module: syslog
 process:
   facility: syslog_facility
   format: syslog_format
diff --git a/core/modules/syslog/tests/src/Functional/Update/SyslogUpdateTest.php b/core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php
similarity index 78%
rename from core/modules/syslog/tests/src/Functional/Update/SyslogUpdateTest.php
rename to core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php
index e5dfed687b..2b0482ff93 100644
--- a/core/modules/syslog/tests/src/Functional/Update/SyslogUpdateTest.php
+++ b/core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\syslog\Functional\Update;
+namespace Drupal\syslog\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that syslog settings are properly updated during database updates.
@@ -16,7 +16,7 @@ class SyslogUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/migration_templates/d6_date_formats.yml b/core/modules/system/migration_templates/d6_date_formats.yml
index b28128015c..71257d4fc5 100644
--- a/core/modules/system/migration_templates/d6_date_formats.yml
+++ b/core/modules/system/migration_templates/d6_date_formats.yml
@@ -8,7 +8,6 @@ source:
     - date_format_long
     - date_format_medium
     - date_format_short
-  source_module: system
 process:
   id:
     plugin: static_map
diff --git a/core/modules/system/migration_templates/d6_system_cron.yml b/core/modules/system/migration_templates/d6_system_cron.yml
index bf1f6b331d..7dd3a2bcec 100644
--- a/core/modules/system/migration_templates/d6_system_cron.yml
+++ b/core/modules/system/migration_templates/d6_system_cron.yml
@@ -8,7 +8,6 @@ source:
     - cron_threshold_warning
     - cron_threshold_error
     - cron_last
-  source_module: system
 process:
   'threshold/requirements_warning': cron_threshold_warning
   'threshold/requirements_error': cron_threshold_error
diff --git a/core/modules/system/migration_templates/d6_system_date.yml b/core/modules/system/migration_templates/d6_system_date.yml
index 7da96c3488..25f6728ae1 100644
--- a/core/modules/system/migration_templates/d6_system_date.yml
+++ b/core/modules/system/migration_templates/d6_system_date.yml
@@ -8,7 +8,6 @@ source:
     - configurable_timezones
     - date_first_day
     - date_default_timezone
-  source_module: system
 process:
   'timezone/user/configurable': configurable_timezones
   first_day: date_first_day
diff --git a/core/modules/system/migration_templates/d6_system_file.yml b/core/modules/system/migration_templates/d6_system_file.yml
index 902b0e4477..60cd61600b 100644
--- a/core/modules/system/migration_templates/d6_system_file.yml
+++ b/core/modules/system/migration_templates/d6_system_file.yml
@@ -7,7 +7,6 @@ source:
   variables:
     - file_directory_temp
     - allow_insecure_uploads
-  source_module: system
 process:
   'path/temporary': file_directory_temp
   allow_insecure_uploads:
diff --git a/core/modules/system/migration_templates/d6_system_performance.yml b/core/modules/system/migration_templates/d6_system_performance.yml
index 87811c36b8..70a03d61e7 100644
--- a/core/modules/system/migration_templates/d6_system_performance.yml
+++ b/core/modules/system/migration_templates/d6_system_performance.yml
@@ -10,7 +10,6 @@ source:
     - cache_lifetime
     - cache
     - page_compression
-  source_module: system
 process:
   'css/preprocess': preprocess_css
   'js/preprocess': preprocess_js
diff --git a/core/modules/system/migration_templates/d7_global_theme_settings.yml b/core/modules/system/migration_templates/d7_global_theme_settings.yml
index 9b5ff83f5a..42c5177d43 100644
--- a/core/modules/system/migration_templates/d7_global_theme_settings.yml
+++ b/core/modules/system/migration_templates/d7_global_theme_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - theme_settings
-  source_module: system
 process:
   'features/logo': theme_settings/toggle_logo
   'features/name': theme_settings/toggle_name
diff --git a/core/modules/system/migration_templates/d7_system_authorize.yml b/core/modules/system/migration_templates/d7_system_authorize.yml
index ca09567ab2..420497b8d3 100644
--- a/core/modules/system/migration_templates/d7_system_authorize.yml
+++ b/core/modules/system/migration_templates/d7_system_authorize.yml
@@ -1,12 +1,10 @@
 id: d7_system_authorize
-label: Drupal 7 file transfer authorize configuration
 migration_tags:
   - Drupal 7
 source:
   plugin: variable
   variables:
     - authorize_filetransfer_default
-  source_module: system
 process:
    filetransfer_default: authorize_filetransfer_default
 destination:
diff --git a/core/modules/system/migration_templates/d7_system_cron.yml b/core/modules/system/migration_templates/d7_system_cron.yml
index 55021c9de9..a603af3e91 100644
--- a/core/modules/system/migration_templates/d7_system_cron.yml
+++ b/core/modules/system/migration_templates/d7_system_cron.yml
@@ -7,7 +7,6 @@ source:
   variables:
     - cron_threshold_warning
     - cron_threshold_error
-  source_module: system
 process:
   'threshold/requirements_warning': cron_threshold_warning
   'threshold/requirements_error': cron_threshold_error
diff --git a/core/modules/system/migration_templates/d7_system_date.yml b/core/modules/system/migration_templates/d7_system_date.yml
index f860b07c80..b380c897d7 100644
--- a/core/modules/system/migration_templates/d7_system_date.yml
+++ b/core/modules/system/migration_templates/d7_system_date.yml
@@ -1,5 +1,4 @@
 id: d7_system_date
-label: Drupal 7 system date configuration
 migration_tags:
   - Drupal 7
 source:
@@ -11,7 +10,6 @@ source:
     - configurable_timezones
     - empty_timezone_message
     - user_default_timezone
-  source_module: system
 process:
   'country/default': site_default_country
   first_day: date_first_day
diff --git a/core/modules/system/migration_templates/d7_system_file.yml b/core/modules/system/migration_templates/d7_system_file.yml
index 9652cb0e51..2295e0e10c 100644
--- a/core/modules/system/migration_templates/d7_system_file.yml
+++ b/core/modules/system/migration_templates/d7_system_file.yml
@@ -7,7 +7,6 @@ source:
   variables:
     - allow_insecure_uploads
     - file_temporary_path
-  source_module: system
 process:
   allow_insecure_uploads:
     plugin: static_map
diff --git a/core/modules/system/migration_templates/d7_system_mail.yml b/core/modules/system/migration_templates/d7_system_mail.yml
index 520437472c..d4a569cf8c 100644
--- a/core/modules/system/migration_templates/d7_system_mail.yml
+++ b/core/modules/system/migration_templates/d7_system_mail.yml
@@ -1,12 +1,10 @@
 id: d7_system_mail
-label: Drupal 7 system mail configuration
 migration_tags:
   - Drupal 7
 source:
   plugin: variable
   variables:
     - mail_system
-  source_module: system
 process:
   'interface/default':
     plugin: static_map
diff --git a/core/modules/system/migration_templates/d7_system_performance.yml b/core/modules/system/migration_templates/d7_system_performance.yml
index 0f28dbfc6d..abeb008674 100644
--- a/core/modules/system/migration_templates/d7_system_performance.yml
+++ b/core/modules/system/migration_templates/d7_system_performance.yml
@@ -9,7 +9,6 @@ source:
     - preprocess_js
     - cache_lifetime
     - page_compression
-  source_module: system
 process:
   'css/preprocess': preprocess_css
   'js/preprocess': preprocess_js
diff --git a/core/modules/system/migration_templates/system_image.yml b/core/modules/system/migration_templates/system_image.yml
index 1f5612f766..7bb16b1b78 100644
--- a/core/modules/system/migration_templates/system_image.yml
+++ b/core/modules/system/migration_templates/system_image.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - image_toolkit
-  source_module: system
 process:
   toolkit: image_toolkit
 destination:
diff --git a/core/modules/system/migration_templates/system_image_gd.yml b/core/modules/system/migration_templates/system_image_gd.yml
index 28e0ab71ee..685116eeb6 100644
--- a/core/modules/system/migration_templates/system_image_gd.yml
+++ b/core/modules/system/migration_templates/system_image_gd.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - image_jpeg_quality
-  source_module: system
 process:
   jpeg_quality: image_jpeg_quality
 destination:
diff --git a/core/modules/system/migration_templates/system_logging.yml b/core/modules/system/migration_templates/system_logging.yml
index eea3473bf8..c1e81141c7 100644
--- a/core/modules/system/migration_templates/system_logging.yml
+++ b/core/modules/system/migration_templates/system_logging.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - error_level
-  source_module: system
 process:
   error_level:
     plugin: static_map
diff --git a/core/modules/system/migration_templates/system_maintenance.yml b/core/modules/system/migration_templates/system_maintenance.yml
index 183fa10835..b9f6c34820 100644
--- a/core/modules/system/migration_templates/system_maintenance.yml
+++ b/core/modules/system/migration_templates/system_maintenance.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - site_offline_message
-  source_module: system
 process:
   message: site_offline_message
 destination:
diff --git a/core/modules/system/migration_templates/system_rss.yml b/core/modules/system/migration_templates/system_rss.yml
index d6ff5bc4bf..92ce45a617 100644
--- a/core/modules/system/migration_templates/system_rss.yml
+++ b/core/modules/system/migration_templates/system_rss.yml
@@ -8,7 +8,6 @@ source:
   variables:
     - feed_default_items
     - feed_item_length
-  source_module: system
 process:
   'items/limit': feed_default_items
   'items/view_mode': feed_item_length
diff --git a/core/modules/system/migration_templates/system_site.yml b/core/modules/system/migration_templates/system_site.yml
index 397823c2b5..c8fd849067 100644
--- a/core/modules/system/migration_templates/system_site.yml
+++ b/core/modules/system/migration_templates/system_site.yml
@@ -16,7 +16,6 @@ source:
     - site_404
     - drupal_weight_select_max
     - admin_compact_mode
-  source_module: system
 process:
   name: site_name
   mail: site_mail
diff --git a/core/modules/system/src/Form/CronForm.php b/core/modules/system/src/Form/CronForm.php
index 8a3f23175c..751b3379eb 100644
--- a/core/modules/system/src/Form/CronForm.php
+++ b/core/modules/system/src/Form/CronForm.php
@@ -16,7 +16,6 @@
  * Configure cron settings for this site.
  */
 class CronForm extends FormBase {
-
   use ConfigFormBaseTrait;
 
   /**
@@ -105,7 +104,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form['run'] = [
       '#type' => 'submit',
       '#value' => t('Run cron'),
-      '#submit' => ['::runCron'],
     ];
     $status = '<p>' . $this->t('Last run: %time ago.', ['%time' => $this->dateFormatter->formatTimeDiffSince($this->state->get('system.cron_last'))]) . '</p>';
     $form['status'] = [
@@ -147,25 +145,22 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   }
 
   /**
-   * {@inheritdoc}
+   * Runs cron and reloads the page.
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->config('system.cron')
       ->set('logging', $form_state->getValue('logging'))
       ->save();
     drupal_set_message(t('The configuration options have been saved.'));
-  }
 
-  /**
-   * Form submission handler for running cron manually.
-   */
-  public function runCron(array &$form, FormStateInterface $form_state) {
+    // Run cron manually from Cron form.
     if ($this->cron->run()) {
-      drupal_set_message($this->t('Cron ran successfully.'));
+      drupal_set_message(t('Cron ran successfully.'));
     }
     else {
-      drupal_set_message($this->t('Cron run failed.'), 'error');
+      drupal_set_message(t('Cron run failed.'), 'error');
     }
+
   }
 
 }
diff --git a/core/modules/system/src/Form/DateFormatDeleteForm.php b/core/modules/system/src/Form/DateFormatDeleteForm.php
index 3d3047e71e..901c34b1ab 100644
--- a/core/modules/system/src/Form/DateFormatDeleteForm.php
+++ b/core/modules/system/src/Form/DateFormatDeleteForm.php
@@ -43,8 +43,8 @@ public static function create(ContainerInterface $container) {
   public function getQuestion() {
     return t('Are you sure you want to delete the format %name : %format?', [
       '%name' => $this->entity->label(),
-      '%format' => $this->dateFormatter->format(REQUEST_TIME, $this->entity->id()),
-    ]);
+      '%format' => $this->dateFormatter->format(REQUEST_TIME, $this->entity->id())]
+    );
   }
 
 }
diff --git a/core/modules/system/src/Form/SiteInformationForm.php b/core/modules/system/src/Form/SiteInformationForm.php
index 86376e2cdf..7173ebe942 100644
--- a/core/modules/system/src/Form/SiteInformationForm.php
+++ b/core/modules/system/src/Form/SiteInformationForm.php
@@ -172,7 +172,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
 
     }
     if (!$this->pathValidator->isValid($form_state->getValue('site_frontpage'))) {
-      $form_state->setErrorByName('site_frontpage', $this->t("Either the path '%path' is invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_frontpage')]));
+      $form_state->setErrorByName('site_frontpage', $this->t("The path '%path' is either invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_frontpage')]));
     }
     // Get the normal paths of both error pages.
     if (!$form_state->isValueEmpty('site_403')) {
@@ -189,11 +189,11 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
     }
     // Validate 403 error path.
     if (!$form_state->isValueEmpty('site_403') && !$this->pathValidator->isValid($form_state->getValue('site_403'))) {
-      $form_state->setErrorByName('site_403', $this->t("Either the path '%path' is invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_403')]));
+      $form_state->setErrorByName('site_403', $this->t("The path '%path' is either invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_403')]));
     }
     // Validate 404 error path.
     if (!$form_state->isValueEmpty('site_404') && !$this->pathValidator->isValid($form_state->getValue('site_404'))) {
-      $form_state->setErrorByName('site_404', $this->t("Either the path '%path' is invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_404')]));
+      $form_state->setErrorByName('site_404', $this->t("The path '%path' is either invalid or you do not have access to it.", ['%path' => $form_state->getValue('site_404')]));
     }
 
     parent::validateForm($form, $form_state);
diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php
index 2ad98931a3..f5cfb09082 100644
--- a/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -324,21 +324,9 @@ public function buildForm(array $form, FormStateInterface $form_state, $theme =
       // Process the theme and all its base themes.
       foreach ($theme_keys as $theme) {
         // Include the theme-settings.php file.
-        $theme_path = drupal_get_path('theme', $theme);
-        $theme_settings_file = $theme_path . '/theme-settings.php';
-        $theme_file = $theme_path . '/' . $theme . '.theme';
-        $filenames = [$theme_settings_file, $theme_file];
-        foreach ($filenames as $filename) {
-          if (file_exists($filename)) {
-            require_once $filename;
-
-            // The file must be required for the cached form too.
-            $files = $form_state->getBuildInfo()['files'];
-            if (!in_array($filename, $files)) {
-              $files[] = $filename;
-            }
-            $form_state->addBuildInfo('files', $files);
-          }
+        $filename = DRUPAL_ROOT . '/' . $themes[$theme]->getPath() . '/theme-settings.php';
+        if (file_exists($filename)) {
+          require_once $filename;
         }
 
         // Call theme-specific settings.
diff --git a/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php b/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php
index f27f82e645..4335612531 100644
--- a/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php
+++ b/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php
@@ -45,7 +45,7 @@ protected function validateArguments(array $arguments) {
     // Validate or set background color argument.
     if (!empty($arguments['background'])) {
       // Validate the background color: Color::hexToRgb does so for us.
-      $background = Color::hexToRgb($arguments['background']) + ['alpha' => 0 ];
+      $background = Color::hexToRgb($arguments['background']) + [ 'alpha' => 0 ];
     }
     else {
       // Background color is not specified: use transparent white as background.
diff --git a/core/modules/system/src/Plugin/migrate/source/Menu.php b/core/modules/system/src/Plugin/migrate/source/Menu.php
index a97878fa4a..c55bc4bb7f 100644
--- a/core/modules/system/src/Plugin/migrate/source/Menu.php
+++ b/core/modules/system/src/Plugin/migrate/source/Menu.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "menu",
- *   source_module = "menu"
+ *   source_provider = "menu"
  * )
  */
 class Menu extends DrupalSqlBase {
diff --git a/core/modules/system/src/Plugin/migrate/source/d7/ThemeSettings.php b/core/modules/system/src/Plugin/migrate/source/d7/ThemeSettings.php
index 6ae17beabe..5561a9a53f 100644
--- a/core/modules/system/src/Plugin/migrate/source/d7/ThemeSettings.php
+++ b/core/modules/system/src/Plugin/migrate/source/d7/ThemeSettings.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_theme_settings",
- *   source_module = "system"
+ *   source_provider = "system"
  * )
  */
 class ThemeSettings extends VariableMultiRow {
diff --git a/core/modules/system/src/SystemConfigSubscriber.php b/core/modules/system/src/SystemConfigSubscriber.php
index 0ea851d55a..ddd37be37a 100644
--- a/core/modules/system/src/SystemConfigSubscriber.php
+++ b/core/modules/system/src/SystemConfigSubscriber.php
@@ -25,7 +25,7 @@ class SystemConfigSubscriber implements EventSubscriberInterface {
   /**
    * Constructs the SystemConfigSubscriber.
    *
-   * @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder
+   * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
    *   The router builder service.
    */
   public function __construct(RouteBuilderInterface $router_builder) {
diff --git a/core/modules/system/src/Tests/Ajax/DialogTest.php b/core/modules/system/src/Tests/Ajax/DialogTest.php
index 90c548b630..ec947825fe 100644
--- a/core/modules/system/src/Tests/Ajax/DialogTest.php
+++ b/core/modules/system/src/Tests/Ajax/DialogTest.php
@@ -175,12 +175,10 @@ public function testDialog() {
       'edit-preview' => [
         'callback' => '::preview',
         'event' => 'click',
-        'url' => Url::fromRoute('ajax_test.dialog_form', [], [
-          'query' => [
+        'url' => Url::fromRoute('ajax_test.dialog_form', [], ['query' => [
             MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_modal',
             FormBuilderInterface::AJAX_FORM_REQUEST => TRUE,
-          ],
-        ])->toString(),
+          ]])->toString(),
         'dialogType' => 'ajax',
         'submit' => [
           '_triggering_element_name' => 'op',
diff --git a/core/modules/system/src/Tests/Cache/GenericCacheBackendUnitTestBase.php b/core/modules/system/src/Tests/Cache/GenericCacheBackendUnitTestBase.php
index 01fef63283..d47e88a51c 100644
--- a/core/modules/system/src/Tests/Cache/GenericCacheBackendUnitTestBase.php
+++ b/core/modules/system/src/Tests/Cache/GenericCacheBackendUnitTestBase.php
@@ -69,7 +69,7 @@ protected function getTestBin() {
    * @return \Drupal\Core\Cache\CacheBackendInterface
    *   Cache backend to test.
    */
-  abstract protected function createCacheBackend($bin);
+  protected abstract function createCacheBackend($bin);
 
   /**
    * Allows specific implementation to change the environment before a test run.
diff --git a/core/modules/system/src/Tests/Database/FakeRecord.php b/core/modules/system/src/Tests/Database/FakeRecord.php
index 375e60f244..cd7486cc73 100644
--- a/core/modules/system/src/Tests/Database/FakeRecord.php
+++ b/core/modules/system/src/Tests/Database/FakeRecord.php
@@ -14,4 +14,4 @@
  * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead
  *   use \Drupal\Tests\system\Functional\Database\FakeRecord.
  */
-class FakeRecord {}
+class FakeRecord { }
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateFilledTest.php b/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateFilledTest.php
similarity index 68%
rename from core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateFilledTest.php
rename to core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateFilledTest.php
index 7e95ed7797..898627c217 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateFilledTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
 /**
  * Runs LangcodeToAsciiUpdateTest with a dump filled with content.
@@ -14,7 +14,7 @@ class LangcodeToAsciiUpdateFilledTest extends LangcodeToAsciiUpdateTest {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateTest.php b/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php
similarity index 91%
rename from core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateTest.php
rename to core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php
index d1a3cabb06..270bc4946c 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
 use Drupal\Core\Database\Database;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that the entity langcode fields have been updated to varchar_ascii.
@@ -17,7 +17,7 @@ class LangcodeToAsciiUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php b/core/modules/system/src/Tests/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php
similarity index 87%
rename from core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php
rename to core/modules/system/src/Tests/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php
index c843c835bf..ba7e028ae0 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -17,9 +17,9 @@ class MoveRevisionMetadataFieldsUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../tests/fixtures/update/drupal-8.2.0.bare.standard_with_entity_test_revlog_enabled.php.gz',
-      __DIR__ . '/../../../../../tests/fixtures/update/drupal-8.entity-data-revision-metadata-fields-2248983.php',
-      __DIR__ . '/../../../../../tests/fixtures/update/drupal-8.views-revision-metadata-fields-2248983.php',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.2.0.bare.standard_with_entity_test_revlog_enabled.php.gz',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.entity-data-revision-metadata-fields-2248983.php',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.views-revision-metadata-fields-2248983.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
similarity index 97%
rename from core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
rename to core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
index 625ee190ed..b6a8695205 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
 use Drupal\Core\Entity\Sql\TemporaryTableMapping;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\system\Tests\Entity\EntityDefinitionTestTrait;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests updating an entity type with existing data to be revisionable.
@@ -69,8 +69,8 @@ protected function setUp() {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
-      __DIR__ . '/../../../../fixtures/update/drupal-8.entity-test-schema-converter-enabled.php',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.entity-test-schema-converter-enabled.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php
similarity index 67%
rename from core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php
rename to core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php
index d3c6912f95..623e6c6c7c 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
 /**
  * Runs SqlContentEntityStorageSchemaIndexTest with a dump filled with content.
@@ -14,7 +14,7 @@ class SqlContentEntityStorageSchemaIndexFilledTest extends SqlContentEntityStora
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php
similarity index 90%
rename from core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php
rename to core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php
index 3954230333..c92d1db2fe 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaIndexTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests that a newly-added index is properly created during database updates.
@@ -16,7 +16,7 @@ class SqlContentEntityStorageSchemaIndexTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php b/core/modules/system/src/Tests/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php
similarity index 97%
rename from core/modules/system/tests/src/Functional/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php
rename to core/modules/system/src/Tests/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php
index 89c1d7072d..ddc52fe52c 100644
--- a/core/modules/system/tests/src/Functional/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/UpdateApiEntityDefinitionUpdateTest.php
@@ -1,18 +1,18 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Entity\Update;
+namespace Drupal\system\Tests\Entity\Update;
 
 use Drupal\Core\Entity\Exception\FieldStorageDefinitionUpdateForbiddenException;
 use Drupal\entity_test\Entity\EntityTest;
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\system\Functional\Update\DbUpdatesTrait;
+use Drupal\simpletest\WebTestBase;
+use Drupal\system\Tests\Update\DbUpdatesTrait;
 
 /**
  * Tests performing entity updates through the Update API.
  *
  * @group Entity
  */
-class UpdateApiEntityDefinitionUpdateTest extends BrowserTestBase {
+class UpdateApiEntityDefinitionUpdateTest extends WebTestBase {
 
   use DbUpdatesTrait;
 
diff --git a/core/modules/system/tests/src/Functional/Form/AlterTest.php b/core/modules/system/src/Tests/Form/AlterTest.php
similarity index 79%
rename from core/modules/system/tests/src/Functional/Form/AlterTest.php
rename to core/modules/system/src/Tests/Form/AlterTest.php
index 622a3d1ead..216e5d2014 100644
--- a/core/modules/system/tests/src/Functional/Form/AlterTest.php
+++ b/core/modules/system/src/Tests/Form/AlterTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Utility\Xss;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests hook_form_alter() and hook_form_FORM_ID_alter().
  *
  * @group Form
  */
-class AlterTest extends BrowserTestBase {
+class AlterTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -32,7 +32,7 @@ public function testExecutionOrder() {
       'form_test_form_form_test_alter_form_alter() executed.',
       'system_form_form_test_alter_form_alter() executed.',
     ];
-    $content = preg_replace('/\s+/', ' ', Xss::filter($this->getSession()->getPage()->getContent(), []));
+    $content = preg_replace('/\s+/', ' ', Xss::filter($this->content, []));
     $this->assert(strpos($content, implode(' ', $expected)) !== FALSE, 'Form alter hooks executed in the expected order.');
   }
 
diff --git a/core/modules/system/tests/src/Functional/Form/ArbitraryRebuildTest.php b/core/modules/system/src/Tests/Form/ArbitraryRebuildTest.php
similarity index 93%
rename from core/modules/system/tests/src/Functional/Form/ArbitraryRebuildTest.php
rename to core/modules/system/src/Tests/Form/ArbitraryRebuildTest.php
index e35ac6d08a..d6e99705e7 100644
--- a/core/modules/system/tests/src/Functional/Form/ArbitraryRebuildTest.php
+++ b/core/modules/system/src/Tests/Form/ArbitraryRebuildTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\field\Entity\FieldConfig;
+use Drupal\simpletest\WebTestBase;
 use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests altering forms to be rebuilt so there are multiple steps.
  *
  * @group Form
  */
-class ArbitraryRebuildTest extends BrowserTestBase {
+class ArbitraryRebuildTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Form/CheckboxTest.php b/core/modules/system/src/Tests/Form/CheckboxTest.php
similarity index 75%
rename from core/modules/system/tests/src/Functional/Form/CheckboxTest.php
rename to core/modules/system/src/Tests/Form/CheckboxTest.php
index 60fad6a2e8..61e7bd9ba5 100644
--- a/core/modules/system/tests/src/Functional/Form/CheckboxTest.php
+++ b/core/modules/system/src/Tests/Form/CheckboxTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests form API checkbox handling of various combinations of #default_value
@@ -10,7 +10,7 @@
  *
  * @group Form
  */
-class CheckboxTest extends BrowserTestBase {
+class CheckboxTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -55,18 +55,12 @@ public function testFormCheckbox() {
 
     // Ensure that $form_state->getValues() is populated correctly for a
     // checkboxes group that includes a 0-indexed array of options.
-    $this->drupalPostForm('form-test/checkboxes-zero/1', [], 'Save');
-    $results = json_decode($this->getSession()->getPage()->getContent());
+    $results = json_decode($this->drupalPostForm('form-test/checkboxes-zero/1', [], 'Save'));
     $this->assertIdentical($results->checkbox_off, [0, 0, 0], 'All three in checkbox_off are zeroes: off.');
     $this->assertIdentical($results->checkbox_zero_default, ['0', 0, 0], 'The first choice is on in checkbox_zero_default');
     $this->assertIdentical($results->checkbox_string_zero_default, ['0', 0, 0], 'The first choice is on in checkbox_string_zero_default');
-    // Due to Mink driver differences, we cannot submit an empty checkbox value
-    // to drupalPostForm(), even if that empty value is the 'true' value for
-    // the checkbox.
-    $this->drupalGet('form-test/checkboxes-zero/1');
-    $this->assertSession()->fieldExists('checkbox_off[0]')->check();
-    $this->drupalPostForm(NULL, NULL, 'Save');
-    $results = json_decode($this->getSession()->getPage()->getContent());
+    $edit = ['checkbox_off[0]' => '0'];
+    $results = json_decode($this->drupalPostForm('form-test/checkboxes-zero/1', $edit, 'Save'));
     $this->assertIdentical($results->checkbox_off, ['0', 0, 0], 'The first choice is on in checkbox_off but the rest is not');
 
     // Ensure that each checkbox is rendered correctly for a checkboxes group
@@ -76,22 +70,18 @@ public function testFormCheckbox() {
 
     $this->assertIdentical(count($checkboxes), 9, 'Correct number of checkboxes found.');
     foreach ($checkboxes as $checkbox) {
-      $checked = $checkbox->isChecked();
-      $name = $checkbox->getAttribute('name');
+      $checked = isset($checkbox['checked']);
+      $name = (string) $checkbox['name'];
       $this->assertIdentical($checked, $name == 'checkbox_zero_default[0]' || $name == 'checkbox_string_zero_default[0]', format_string('Checkbox %name correctly checked', ['%name' => $name]));
     }
-    // Due to Mink driver differences, we cannot submit an empty checkbox value
-    // to drupalPostForm(), even if that empty value is the 'true' value for
-    // the checkbox.
-    $this->drupalGet('form-test/checkboxes-zero/0');
-    $this->assertSession()->fieldExists('checkbox_off[0]')->check();
-    $this->drupalPostForm(NULL, NULL, 'Save');
+    $edit = ['checkbox_off[0]' => '0'];
+    $this->drupalPostForm('form-test/checkboxes-zero/0', $edit, 'Save');
     $checkboxes = $this->xpath('//input[@type="checkbox"]');
 
     $this->assertIdentical(count($checkboxes), 9, 'Correct number of checkboxes found.');
     foreach ($checkboxes as $checkbox) {
-      $checked = $checkbox->isChecked();
-      $name = (string) $checkbox->getAttribute('name');
+      $checked = isset($checkbox['checked']);
+      $name = (string) $checkbox['name'];
       $this->assertIdentical($checked, $name == 'checkbox_off[0]' || $name == 'checkbox_zero_default[0]' || $name == 'checkbox_string_zero_default[0]', format_string('Checkbox %name correctly checked', ['%name' => $name]));
     }
   }
diff --git a/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php b/core/modules/system/src/Tests/Form/ConfirmFormTest.php
similarity index 96%
rename from core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php
rename to core/modules/system/src/Tests/Form/ConfirmFormTest.php
index c65546a481..31ede02a72 100644
--- a/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php
+++ b/core/modules/system/src/Tests/Form/ConfirmFormTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests confirmation forms.
  *
  * @group Form
  */
-class ConfirmFormTest extends BrowserTestBase {
+class ConfirmFormTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Form/ElementTest.php b/core/modules/system/src/Tests/Form/ElementTest.php
similarity index 75%
rename from core/modules/system/tests/src/Functional/Form/ElementTest.php
rename to core/modules/system/src/Tests/Form/ElementTest.php
index 57da8daf27..0e1c3ce0cb 100644
--- a/core/modules/system/tests/src/Functional/Form/ElementTest.php
+++ b/core/modules/system/src/Tests/Form/ElementTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests building and processing of core form elements.
  *
  * @group Form
  */
-class ElementTest extends BrowserTestBase {
+class ElementTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -53,7 +53,7 @@ public function testOptions() {
       $expected_values = ['0', 'foo', '1', 'bar', '>'];
       foreach ($elements as $element) {
         $expected = array_shift($expected_values);
-        $this->assertIdentical((string) $element->getAttribute('value'), $expected);
+        $this->assertIdentical((string) $element['value'], $expected);
       }
     }
 
@@ -73,7 +73,7 @@ public function testOptions() {
       $expected_values = ['0', 'foo', 'bar', '>', '1'];
       foreach ($elements as $element) {
         $expected = array_shift($expected_values);
-        $this->assertIdentical((string) $element->getAttribute('value'), $expected);
+        $this->assertIdentical((string) $element['value'], $expected);
       }
     }
     // Verify that custom #description properties are output.
@@ -88,46 +88,6 @@ public function testOptions() {
     }
   }
 
-  /**
-   * Tests correct checked attribute for radios element.
-   */
-  public function testRadiosChecked() {
-    // Verify that there is only one radio option checked.
-    $this->drupalGet('form-test/radios-checked');
-    $elements = $this->xpath('//input[@name="radios" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('0', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-string" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('bar', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-boolean-true" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('1', $elements[0]->getValue());
-    // A default value of FALSE indicates that nothing is set.
-    $elements = $this->xpath('//input[@name="radios-boolean-false" and @checked]');
-    $this->assertCount(0, $elements);
-    $elements = $this->xpath('//input[@name="radios-boolean-any" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('All', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-string-zero" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('0', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-int-non-zero" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('10', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-int-non-zero-as-string" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('100', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-empty-string" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('0', $elements[0]->getValue());
-    $elements = $this->xpath('//input[@name="radios-empty-array" and @checked]');
-    $this->assertCount(0, $elements);
-    $elements = $this->xpath('//input[@name="radios-key-FALSE" and @checked]');
-    $this->assertCount(1, $elements);
-    $this->assertSame('0', $elements[0]->getValue());
-  }
-
   /**
    * Tests wrapper ids for checkboxes and radios.
    */
diff --git a/core/modules/system/tests/src/Functional/Form/ElementsLabelsTest.php b/core/modules/system/src/Tests/Form/ElementsLabelsTest.php
similarity index 95%
rename from core/modules/system/tests/src/Functional/Form/ElementsLabelsTest.php
rename to core/modules/system/src/Tests/Form/ElementsLabelsTest.php
index 6747ed63fb..2a57e5d70b 100644
--- a/core/modules/system/tests/src/Functional/Form/ElementsLabelsTest.php
+++ b/core/modules/system/src/Tests/Form/ElementsLabelsTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests form element labels, required markers and associated output.
  *
  * @group Form
  */
-class ElementsLabelsTest extends BrowserTestBase {
+class ElementsLabelsTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -85,9 +85,9 @@ public function testFormLabels() {
 
     // Check title attribute for radios and checkboxes.
     $elements = $this->xpath('//div[@id="edit-form-checkboxes-title-attribute"]');
-    $this->assertEqual($elements[0]->getAttribute('title'), 'Checkboxes test' . ' (' . t('Required') . ')', 'Title attribute found.');
+    $this->assertEqual($elements[0]['title'], 'Checkboxes test' . ' (' . t('Required') . ')', 'Title attribute found.');
     $elements = $this->xpath('//div[@id="edit-form-radios-title-attribute"]');
-    $this->assertEqual($elements[0]->getAttribute('title'), 'Radios test' . ' (' . t('Required') . ')', 'Title attribute found.');
+    $this->assertEqual($elements[0]['title'], 'Radios test' . ' (' . t('Required') . ')', 'Title attribute found.');
 
     $elements = $this->xpath('//fieldset[@id="edit-form-checkboxes-title-invisible--wrapper"]/legend/span[contains(@class, "visually-hidden")]');
     $this->assertTrue(!empty($elements), "Title/Label not displayed when 'visually-hidden' attribute is set in checkboxes.");
diff --git a/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php b/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php
index d335518a9f..208f85911d 100644
--- a/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php
+++ b/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php
@@ -4,7 +4,6 @@
 
 use Drupal\Core\Form\FormState;
 use Drupal\simpletest\WebTestBase;
-use Drupal\Tests\system\Functional\Form\StubForm;
 
 /**
  * Tests the tableselect form element for expected behavior.
@@ -93,7 +92,7 @@ public function testTableselectColSpan() {
     // The first two body rows should each have 5 table cells: One for the
     // radio, one cell in the first column, one cell in the second column,
     // and two cells in the third column which has colspan 2.
-    for ($i = 0; $i <= 1; $i++) {
+    for ( $i = 0; $i <= 1; $i++) {
       $this->assertEqual(count($table_body[0]->tr[$i]->td), 5, format_string('There are five cells in row @row.', ['@row' => $i]));
     }
     // The third row should have 3 cells, one for the radio, one spanning the
diff --git a/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php b/core/modules/system/src/Tests/Form/ElementsVerticalTabsTest.php
similarity index 81%
rename from core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php
rename to core/modules/system/src/Tests/Form/ElementsVerticalTabsTest.php
index 07f25fef6b..3ef90e13a1 100644
--- a/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php
+++ b/core/modules/system/src/Tests/Form/ElementsVerticalTabsTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\simpletest\WebTestBase;
 use Drupal\Component\Serialization\Json;
-use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests the vertical_tabs form element for expected behavior.
  *
  * @group Form
  */
-class ElementsVerticalTabsTest extends BrowserTestBase {
+class ElementsVerticalTabsTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -49,9 +49,8 @@ protected function setUp() {
    */
   public function testJavaScriptOrdering() {
     $this->drupalGet('form_test/vertical-tabs');
-    $content = $this->getSession()->getPage()->getContent();
-    $position1 = strpos($content, 'core/misc/vertical-tabs.js');
-    $position2 = strpos($content, 'core/misc/collapse.js');
+    $position1 = strpos($this->content, 'core/misc/vertical-tabs.js');
+    $position2 = strpos($this->content, 'core/misc/collapse.js');
     $this->assertTrue($position1 !== FALSE && $position2 !== FALSE && $position1 < $position2, 'vertical-tabs.js is included before collapse.js');
   }
 
@@ -76,12 +75,7 @@ public function testWrapperNotShownWhenEmpty() {
    */
   public function testDefaultTab() {
     $this->drupalGet('form_test/vertical-tabs');
-
-    $value = $this->assertSession()
-      ->elementExists('css', 'input[name="vertical_tabs__active_tab"]')
-      ->getValue();
-
-    $this->assertSame('edit-tab3', $value, t('The default vertical tab is correctly selected.'));
+    $this->assertFieldByName('vertical_tabs__active_tab', 'edit-tab3', t('The default vertical tab is correctly selected.'));
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Form/EmailTest.php b/core/modules/system/src/Tests/Form/EmailTest.php
similarity index 73%
rename from core/modules/system/tests/src/Functional/Form/EmailTest.php
rename to core/modules/system/src/Tests/Form/EmailTest.php
index 2fe6ebe907..a9d445d633 100644
--- a/core/modules/system/tests/src/Functional/Form/EmailTest.php
+++ b/core/modules/system/src/Tests/Form/EmailTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the form API email element.
  *
  * @group Form
  */
-class EmailTest extends BrowserTestBase {
+class EmailTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -19,6 +19,8 @@ class EmailTest extends BrowserTestBase {
    */
   public static $modules = ['form_test'];
 
+  protected $profile = 'testing';
+
   /**
    * Tests that #type 'email' fields are properly validated.
    */
@@ -32,16 +34,14 @@ public function testFormEmail() {
 
     $edit = [];
     $edit['email_required'] = '  foo.bar@example.com ';
-    $this->drupalPostForm('form-test/email', $edit, 'Submit');
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm('form-test/email', $edit, 'Submit'));
     $this->assertIdentical($values['email'], '');
     $this->assertEqual($values['email_required'], 'foo.bar@example.com');
 
     $edit = [];
     $edit['email'] = 'foo@example.com';
     $edit['email_required'] = 'example@drupal.org';
-    $this->drupalPostForm('form-test/email', $edit, 'Submit');
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm('form-test/email', $edit, 'Submit'));
     $this->assertEqual($values['email'], 'foo@example.com');
     $this->assertEqual($values['email_required'], 'example@drupal.org');
   }
diff --git a/core/modules/system/tests/src/Functional/Form/FormStoragePageCacheTest.php b/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php
similarity index 96%
rename from core/modules/system/tests/src/Functional/Form/FormStoragePageCacheTest.php
rename to core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php
index 474a35b55a..b6c6686583 100644
--- a/core/modules/system/tests/src/Functional/Form/FormStoragePageCacheTest.php
+++ b/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests form storage from cached pages.
  *
  * @group Form
  */
-class FormStoragePageCacheTest extends BrowserTestBase {
+class FormStoragePageCacheTest extends WebTestBase {
 
   /**
    * @var array
@@ -33,7 +33,7 @@ protected function setUp() {
   protected function getFormBuildId() {
     $build_id_fields = $this->xpath('//input[@name="form_build_id"]');
     $this->assertEqual(count($build_id_fields), 1, 'One form build id field on the page');
-    return (string) $build_id_fields[0]->getAttribute('value');
+    return (string) $build_id_fields[0]['value'];
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Form/FormTest.php b/core/modules/system/src/Tests/Form/FormTest.php
similarity index 91%
rename from core/modules/system/tests/src/Functional/Form/FormTest.php
rename to core/modules/system/src/Tests/Form/FormTest.php
index 87c7632457..4b8d042faa 100644
--- a/core/modules/system/tests/src/Functional/Form/FormTest.php
+++ b/core/modules/system/src/Tests/Form/FormTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\Html;
@@ -9,7 +9,7 @@
 use Drupal\Core\Render\Element;
 use Drupal\Core\Url;
 use Drupal\form_test\Form\FormTestDisabledElementsForm;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 use Drupal\user\RoleInterface;
 use Drupal\filter\Entity\FilterFormat;
 
@@ -18,7 +18,7 @@
  *
  * @group Form
  */
-class FormTest extends BrowserTestBase {
+class FormTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -188,7 +188,7 @@ public function testRequiredCheckboxesRadio() {
     // Check the page for error messages.
     $errors = $this->xpath('//div[contains(@class, "error")]//li');
     foreach ($errors as $error) {
-      $expected_key = array_search($error->getText(), $expected);
+      $expected_key = array_search($error[0], $expected);
       // If the error message is not one of the expected messages, fail.
       if ($expected_key === FALSE) {
         $this->fail(format_string("Unexpected error message: @error", ['@error' => $error[0]]));
@@ -240,17 +240,14 @@ public function testInputWithInvalidToken() {
     $this->drupalLogin($account);
     // Submit again with required fields set but an invalid form token and
     // verify that all the values are retained.
-    $this->drupalGet(Url::fromRoute('form_test.validate_required'));
-    $this->assertSession()
-      ->elementExists('css', 'input[name="form_token"]')
-      ->setValue('invalid token');
     $edit = [
       'textfield' => $this->randomString(),
       'checkboxes[bar]' => TRUE,
       'select' => 'bar',
       'radios' => 'foo',
+      'form_token' => 'invalid token',
     ];
-    $this->drupalPostForm(NULL, $edit, 'Submit');
+    $this->drupalPostForm(Url::fromRoute('form_test.validate_required'), $edit, 'Submit');
     $this->assertFieldByXpath('//div[contains(@class, "error")]', NULL, 'Error message is displayed with invalid token even when required fields are filled.');
     $this->assertText('The form has become outdated. Copy any unsaved work in the form below');
     // Verify that input elements retained the posted values.
@@ -261,42 +258,33 @@ public function testInputWithInvalidToken() {
     $this->assertFieldChecked('edit-radios-foo');
 
     // Check another form that has a textarea input.
-    $this->drupalGet(Url::fromRoute('form_test.required'));
-    $this->assertSession()
-      ->elementExists('css', 'input[name="form_token"]')
-      ->setValue('invalid token');
     $edit = [
       'textfield' => $this->randomString(),
       'textarea' => $this->randomString() . "\n",
+      'form_token' => 'invalid token',
     ];
-    $this->drupalPostForm(NULL, $edit, 'Submit');
+    $this->drupalPostForm(Url::fromRoute('form_test.required'), $edit, 'Submit');
     $this->assertFieldByXpath('//div[contains(@class, "error")]', NULL, 'Error message is displayed with invalid token even when required fields are filled.');
     $this->assertText('The form has become outdated. Copy any unsaved work in the form below');
     $this->assertFieldByName('textfield', $edit['textfield']);
     $this->assertFieldByName('textarea', $edit['textarea']);
 
     // Check another form that has a number input.
-    $this->drupalGet(Url::fromRoute('form_test.number'));
-    $this->assertSession()
-      ->elementExists('css', 'input[name="form_token"]')
-      ->setValue('invalid token');
     $edit = [
       'integer_step' => mt_rand(1, 100),
+      'form_token' => 'invalid token',
     ];
-    $this->drupalPostForm(NULL, $edit, 'Submit');
+    $this->drupalPostForm(Url::fromRoute('form_test.number'), $edit, 'Submit');
     $this->assertFieldByXpath('//div[contains(@class, "error")]', NULL, 'Error message is displayed with invalid token even when required fields are filled.');
     $this->assertText('The form has become outdated. Copy any unsaved work in the form below');
     $this->assertFieldByName('integer_step', $edit['integer_step']);
 
     // Check a form with a Url field
-    $this->drupalGet(Url::fromRoute('form_test.url'));
-    $this->assertSession()
-      ->elementExists('css', 'input[name="form_token"]')
-      ->setValue('invalid token');
     $edit = [
       'url' => $this->randomString(),
+      'form_token' => 'invalid token',
     ];
-    $this->drupalPostForm(NULL, $edit, 'Submit');
+    $this->drupalPostForm(Url::fromRoute('form_test.url'), $edit, 'Submit');
     $this->assertFieldByXpath('//div[contains(@class, "error")]', NULL, 'Error message is displayed with invalid token even when required fields are filled.');
     $this->assertText('The form has become outdated. Copy any unsaved work in the form below');
     $this->assertFieldByName('url', $edit['url']);
@@ -358,18 +346,17 @@ public function testCheckboxProcessing() {
     $this->assertRaw(t('@name field is required.', ['@name' => 'required_checkbox']), 'A required checkbox is actually mandatory');
 
     // Now try to submit the form correctly.
-    $this->drupalPostForm(NULL, ['required_checkbox' => 1], t('Submit'));
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm(NULL, ['required_checkbox' => 1], t('Submit')));
     $expected_values = [
       'disabled_checkbox_on' => 'disabled_checkbox_on',
-      'disabled_checkbox_off' => 0,
+      'disabled_checkbox_off' => '',
       'checkbox_on' => 'checkbox_on',
-      'checkbox_off' => 0,
+      'checkbox_off' => '',
       'zero_checkbox_on' => '0',
-      'zero_checkbox_off' => 0,
+      'zero_checkbox_off' => '',
     ];
     foreach ($expected_values as $widget => $expected_value) {
-      $this->assertSame($values[$widget], $expected_value, format_string('Checkbox %widget returns expected value (expected: %expected, got: %value)', [
+      $this->assertEqual($values[$widget], $expected_value, format_string('Checkbox %widget returns expected value (expected: %expected, got: %value)', [
         '%widget' => var_export($widget, TRUE),
         '%expected' => var_export($expected_value, TRUE),
         '%value' => var_export($values[$widget], TRUE),
@@ -531,8 +518,7 @@ public function testNumber() {
    * Tests default value handling of #type 'range' elements.
    */
   public function testRange() {
-    $this->drupalPostForm('form-test/range', [], 'Submit');
-    $values = json_decode($this->getSession()->getPage()->getContent());
+    $values = json_decode($this->drupalPostForm('form-test/range', [], 'Submit'));
     $this->assertEqual($values->with_default_value, 18);
     $this->assertEqual($values->float, 10.5);
     $this->assertEqual($values->integer, 6);
@@ -562,8 +548,7 @@ public function testColorValidation() {
       $edit = [
         'color' => $input,
       ];
-      $this->drupalPostForm('form-test/color', $edit, 'Submit');
-      $result = json_decode($this->getSession()->getPage()->getContent());
+      $result = json_decode($this->drupalPostForm('form-test/color', $edit, 'Submit'));
       $this->assertEqual($result->color, $expected);
     }
 
@@ -607,7 +592,7 @@ public function testDisabledElements() {
     // Submit the form with no input, as the browser does for disabled elements,
     // and fetch the $form_state->getValues() that is passed to the submit handler.
     $this->drupalPostForm('form-test/disabled-elements', [], t('Submit'));
-    $returned_values['normal'] = Json::decode($this->getSession()->getPage()->getContent());
+    $returned_values['normal'] = Json::decode($this->content);
 
     // Do the same with input, as could happen if JavaScript un-disables an
     // element. drupalPostForm() emulates a browser by not submitting input for
@@ -615,7 +600,8 @@ public function testDisabledElements() {
     $this->drupalGet('form-test/disabled-elements');
     $disabled_elements = [];
     foreach ($this->xpath('//*[@disabled]') as $element) {
-      $disabled_elements[] = (string) $element->getAttribute('name');
+      $disabled_elements[] = (string) $element['name'];
+      unset($element['disabled']);
     }
 
     // All the elements should be marked as disabled, including the ones below
@@ -627,14 +613,8 @@ public function testDisabledElements() {
       '@expected' => $expected_count,
     ]));
 
-    // Mink does not "see" hidden elements, so we need to set the value of the
-    // hidden element directly.
-    $this->assertSession()
-      ->elementExists('css', 'input[name="hidden"]')
-      ->setValue($edit['hidden']);
-    unset($edit['hidden']);
     $this->drupalPostForm(NULL, $edit, t('Submit'));
-    $returned_values['hijacked'] = Json::decode($this->getSession()->getPage()->getContent());
+    $returned_values['hijacked'] = Json::decode($this->content);
 
     // Ensure that the returned values match the form's default values in both
     // cases.
@@ -707,9 +687,6 @@ public function testDisabledMarkup() {
       if (isset($type_map[$item['#type']])) {
         $type = $type_map[$item['#type']];
       }
-      if (isset($item['#value']) && is_object($item['#value'])) {
-        $item['#value'] = (string) $item['#value'];
-      }
       $path = strtr($path, ['!type' => $type]);
       // Verify that the element exists.
       $element = $this->xpath($path, [
@@ -736,13 +713,12 @@ public function testDisabledMarkup() {
   /**
    * Test Form API protections against input forgery.
    *
-   * @see \Drupal\form_test\Form\FormTestInputForgeryForm
+   * @see _form_test_input_forgery()
    */
   public function testInputForgery() {
     $this->drupalGet('form-test/input-forgery');
-    // The value for checkboxes[two] was changed using post render to simulate
-    // an input forgery.
-    // @see \Drupal\form_test\Form\FormTestInputForgeryForm::postRender
+    $checkbox = $this->xpath('//input[@name="checkboxes[two]"]');
+    $checkbox[0]['value'] = 'FORGERY';
     $this->drupalPostForm(NULL, ['checkboxes[one]' => TRUE, 'checkboxes[two]' => TRUE], t('Submit'));
     $this->assertText('An illegal choice has been detected.', 'Input forgery was detected.');
   }
diff --git a/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php b/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
similarity index 93%
rename from core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php
rename to core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
index 1bfa19f482..d443d4b647 100644
--- a/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php
+++ b/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
@@ -1,11 +1,11 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that the language select form element prints and submits the right
@@ -13,7 +13,7 @@
  *
  * @group Form
  */
-class LanguageSelectElementTest extends BrowserTestBase {
+class LanguageSelectElementTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -105,11 +105,10 @@ protected function _testLanguageSelectElementOptions($id, $options) {
     // including the order, as the languages sent as a parameter.
     $elements = $this->xpath("//select[@id='" . $id . "']");
     $count = 0;
-    /** @var \Behat\Mink\Element\NodeElement $option */
-    foreach ($elements[0]->findAll('css', 'option') as $option) {
+    foreach ($elements[0]->option as $option) {
       $count++;
       $option_title = current($options);
-      $this->assertEqual($option->getText(), $option_title);
+      $this->assertEqual((string) $option, $option_title);
       next($options);
     }
     $this->assertEqual($count, count($options), format_string('The number of languages and the number of options shown by the language element are the same: @languages languages, @number options', ['@languages' => count($options), '@number' => $count]));
diff --git a/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php b/core/modules/system/src/Tests/Form/ProgrammaticTest.php
similarity index 78%
rename from core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php
rename to core/modules/system/src/Tests/Form/ProgrammaticTest.php
index 03d22afe57..d365fb6bf5 100644
--- a/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php
+++ b/core/modules/system/src/Tests/Form/ProgrammaticTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Kernel\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Core\Form\FormState;
-use Drupal\KernelTests\KernelTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the programmatic form submission behavior.
  *
  * @group Form
  */
-class ProgrammaticTest extends KernelTestBase {
+class ProgrammaticTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -30,26 +30,26 @@ public function testSubmissionWorkflow() {
 
     // Test that a programmatic form submission is rejected when a required
     // textfield is omitted and correctly processed when it is provided.
-    $this->doSubmitForm([], FALSE);
-    $this->doSubmitForm(['textfield' => 'test 1'], TRUE);
-    $this->doSubmitForm([], FALSE);
-    $this->doSubmitForm(['textfield' => 'test 2'], TRUE);
+    $this->submitForm([], FALSE);
+    $this->submitForm(['textfield' => 'test 1'], TRUE);
+    $this->submitForm([], FALSE);
+    $this->submitForm(['textfield' => 'test 2'], TRUE);
 
     // Test that a programmatic form submission can turn on and off checkboxes
     // which are, by default, checked.
-    $this->doSubmitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => 1, 2 => 2]], TRUE);
-    $this->doSubmitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => 1, 2 => NULL]], TRUE);
-    $this->doSubmitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => NULL, 2 => 2]], TRUE);
-    $this->doSubmitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => NULL, 2 => NULL]], TRUE);
+    $this->submitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => 1, 2 => 2]], TRUE);
+    $this->submitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => 1, 2 => NULL]], TRUE);
+    $this->submitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => NULL, 2 => 2]], TRUE);
+    $this->submitForm(['textfield' => 'dummy value', 'checkboxes' => [1 => NULL, 2 => NULL]], TRUE);
 
     // Test that a programmatic form submission can correctly click a button
     // that limits validation errors based on user input. Since we do not
     // submit any values for "textfield" here and the textfield is required, we
     // only expect form validation to pass when validation is limited to a
     // different field.
-    $this->doSubmitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'all'], FALSE);
-    $this->doSubmitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'textfield'], FALSE);
-    $this->doSubmitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'field_to_validate'], TRUE);
+    $this->submitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'all'], FALSE);
+    $this->submitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'textfield'], FALSE);
+    $this->submitForm(['op' => 'Submit with limited validation', 'field_to_validate' => 'field_to_validate'], TRUE);
 
     // Restore the current batch status.
     $batch = $current_batch;
@@ -65,7 +65,7 @@ public function testSubmissionWorkflow() {
    *   A boolean indicating whether or not the form submission is expected to
    *   be valid.
    */
-  protected function doSubmitForm($values, $valid_input) {
+  private function submitForm($values, $valid_input) {
     // Programmatically submit the given values.
     $form_state = (new FormState())->setValues($values);
     \Drupal::formBuilder()->submitForm('\Drupal\form_test\Form\FormTestProgrammaticForm', $form_state);
diff --git a/core/modules/system/tests/src/Functional/Form/ResponseTest.php b/core/modules/system/src/Tests/Form/ResponseTest.php
similarity index 76%
rename from core/modules/system/tests/src/Functional/Form/ResponseTest.php
rename to core/modules/system/src/Tests/Form/ResponseTest.php
index de5d8fd6c7..e3064a5511 100644
--- a/core/modules/system/tests/src/Functional/Form/ResponseTest.php
+++ b/core/modules/system/src/Tests/Form/ResponseTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the form API Response element.
  *
  * @group Form
  */
-class ResponseTest extends BrowserTestBase {
+class ResponseTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -27,8 +27,7 @@ public function testFormResponse() {
       'content' => $this->randomString(),
       'status' => 200,
     ];
-    $this->drupalPostForm('form-test/response', $edit, 'Submit');
-    $content = Json::decode($this->getSession()->getPage()->getContent());
+    $content = Json::decode($this->drupalPostForm('form-test/response', $edit, 'Submit'));
     $this->assertResponse(200);
     $this->assertIdentical($edit['content'], $content, 'Response content matches');
     $this->assertIdentical('invoked', $this->drupalGetHeader('X-Form-Test-Response-Event'), 'Response handled by kernel response subscriber');
@@ -38,8 +37,7 @@ public function testFormResponse() {
       'content' => $this->randomString(),
       'status' => 418,
     ];
-    $this->drupalPostForm('form-test/response', $edit, 'Submit');
-    $content = Json::decode($this->getSession()->getPage()->getContent());
+    $content = Json::decode($this->drupalPostForm('form-test/response', $edit, 'Submit'));
     $this->assertResponse(418);
     $this->assertIdentical($edit['content'], $content, 'Response content matches');
     $this->assertIdentical('invoked', $this->drupalGetHeader('X-Form-Test-Response-Event'), 'Response handled by kernel response subscriber');
diff --git a/core/modules/system/tests/src/Functional/Form/StateValuesCleanAdvancedTest.php b/core/modules/system/src/Tests/Form/StateValuesCleanAdvancedTest.php
similarity index 82%
rename from core/modules/system/tests/src/Functional/Form/StateValuesCleanAdvancedTest.php
rename to core/modules/system/src/Tests/Form/StateValuesCleanAdvancedTest.php
index 63d8e70c30..976209e7b2 100644
--- a/core/modules/system/tests/src/Functional/Form/StateValuesCleanAdvancedTest.php
+++ b/core/modules/system/src/Tests/Form/StateValuesCleanAdvancedTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\TestFileCreationTrait;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests proper removal of submitted form values using
@@ -12,11 +11,7 @@
  *
  * @group Form
  */
-class StateValuesCleanAdvancedTest extends BrowserTestBase {
-
-  use TestFileCreationTrait {
-    getTestFiles as drupalGetTestFiles;
-  }
+class StateValuesCleanAdvancedTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Form/StateValuesCleanTest.php b/core/modules/system/src/Tests/Form/StateValuesCleanTest.php
similarity index 87%
rename from core/modules/system/tests/src/Functional/Form/StateValuesCleanTest.php
rename to core/modules/system/src/Tests/Form/StateValuesCleanTest.php
index 6266487244..8e79ac29d4 100644
--- a/core/modules/system/tests/src/Functional/Form/StateValuesCleanTest.php
+++ b/core/modules/system/src/Tests/Form/StateValuesCleanTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests proper removal of submitted form values using
@@ -12,7 +12,7 @@
  *
  * @group Form
  */
-class StateValuesCleanTest extends BrowserTestBase {
+class StateValuesCleanTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -25,8 +25,7 @@ class StateValuesCleanTest extends BrowserTestBase {
    * Tests \Drupal\Core\Form\FormState::cleanValues().
    */
   public function testFormStateValuesClean() {
-    $this->drupalPostForm('form_test/form-state-values-clean', [], t('Submit'));
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm('form_test/form-state-values-clean', [], t('Submit')));
 
     // Setup the expected result.
     $result = [
diff --git a/core/modules/system/tests/src/Functional/Form/StubForm.php b/core/modules/system/src/Tests/Form/StubForm.php
similarity index 95%
rename from core/modules/system/tests/src/Functional/Form/StubForm.php
rename to core/modules/system/src/Tests/Form/StubForm.php
index 4cf91c04ce..afeb79c358 100644
--- a/core/modules/system/tests/src/Functional/Form/StubForm.php
+++ b/core/modules/system/src/Tests/Form/StubForm.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
diff --git a/core/modules/system/tests/src/Functional/Form/SystemConfigFormTest.php b/core/modules/system/src/Tests/Form/SystemConfigFormTest.php
similarity index 83%
rename from core/modules/system/tests/src/Functional/Form/SystemConfigFormTest.php
rename to core/modules/system/src/Tests/Form/SystemConfigFormTest.php
index 09ad06ac8c..19be45f3f3 100644
--- a/core/modules/system/tests/src/Functional/Form/SystemConfigFormTest.php
+++ b/core/modules/system/src/Tests/Form/SystemConfigFormTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the SystemConfigFormTestBase class.
  *
  * @group Form
  */
-class SystemConfigFormTest extends BrowserTestBase {
+class SystemConfigFormTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/src/Tests/Form/TriggeringElementTest.php b/core/modules/system/src/Tests/Form/TriggeringElementTest.php
index fb59cb5e8a..973d37db9f 100644
--- a/core/modules/system/src/Tests/Form/TriggeringElementTest.php
+++ b/core/modules/system/src/Tests/Form/TriggeringElementTest.php
@@ -89,7 +89,7 @@ public function testAttemptAccessControlBypass() {
     // Ensure that the triggering element was not set to the restricted button.
     // Do this with both a negative and positive assertion, because negative
     // assertions alone can be brittle. See testNoButtonInfoInPost() for why the
-    // triggering element gets set to 'button2'.
+    //triggering element gets set to 'button2'.
     $this->assertNoText('The clicked button is button1.', '$form_state->getTriggeringElement() not set to a restricted button.');
     $this->assertText('The clicked button is button2.', '$form_state->getTriggeringElement() not set to a restricted button.');
   }
diff --git a/core/modules/system/tests/src/Functional/Form/UrlTest.php b/core/modules/system/src/Tests/Form/UrlTest.php
similarity index 74%
rename from core/modules/system/tests/src/Functional/Form/UrlTest.php
rename to core/modules/system/src/Tests/Form/UrlTest.php
index 82d227bbdf..aceb6b4202 100644
--- a/core/modules/system/tests/src/Functional/Form/UrlTest.php
+++ b/core/modules/system/src/Tests/Form/UrlTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the form API URL element.
  *
  * @group Form
  */
-class UrlTest extends BrowserTestBase {
+class UrlTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -35,16 +35,14 @@ public function testFormUrl() {
     $edit = [];
     $edit['url'] = "\n";
     $edit['url_required'] = 'http://example.com/   ';
-    $this->drupalPostForm('form-test/url', $edit, 'Submit');
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm('form-test/url', $edit, 'Submit'));
     $this->assertIdentical($values['url'], '');
     $this->assertEqual($values['url_required'], 'http://example.com/');
 
     $edit = [];
     $edit['url'] = 'http://foo.bar.example.com/';
     $edit['url_required'] = 'https://www.drupal.org/node/1174630?page=0&foo=bar#new';
-    $this->drupalPostForm('form-test/url', $edit, 'Submit');
-    $values = Json::decode($this->getSession()->getPage()->getContent());
+    $values = Json::decode($this->drupalPostForm('form-test/url', $edit, 'Submit'));
     $this->assertEqual($values['url'], $edit['url']);
     $this->assertEqual($values['url_required'], $edit['url_required']);
   }
diff --git a/core/modules/system/tests/src/Functional/Form/ValidationTest.php b/core/modules/system/src/Tests/Form/ValidationTest.php
similarity index 95%
rename from core/modules/system/tests/src/Functional/Form/ValidationTest.php
rename to core/modules/system/src/Tests/Form/ValidationTest.php
index 094a0af73c..7854fc24ad 100644
--- a/core/modules/system/tests/src/Functional/Form/ValidationTest.php
+++ b/core/modules/system/src/Tests/Form/ValidationTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Form;
+namespace Drupal\system\Tests\Form;
 
 use Drupal\Core\Render\Element;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests form processing and alteration via form validation handlers.
  *
  * @group Form
  */
-class ValidationTest extends BrowserTestBase {
+class ValidationTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -59,13 +59,11 @@ public function testValidate() {
     // Verify that #validate handlers don't run if the CSRF token is invalid.
     $this->drupalLogin($this->drupalCreateUser());
     $this->drupalGet('form-test/validate');
-    // $this->assertSession()->fieldExists() does not recognize hidden fields,
-    // which breaks $this->drupalPostForm() if we try to change the value of a
-    // hidden field such as form_token.
-    $this->assertSession()
-      ->elementExists('css', 'input[name="form_token"]')
-      ->setValue('invalid_token');
-    $this->drupalPostForm(NULL, ['name' => 'validate'], 'Save');
+    $edit = [
+      'name' => 'validate',
+      'form_token' => 'invalid token'
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save');
     $this->assertNoFieldByName('name', '#value changed by #validate', 'Form element #value was not altered.');
     $this->assertNoText('Name value: value changed by setValueForElement() in #validate', 'Form element value in $form_state was not altered.');
     $this->assertText('The form has become outdated. Copy any unsaved work in the form below');
diff --git a/core/modules/system/src/Tests/Menu/AssertBreadcrumbTrait.php b/core/modules/system/src/Tests/Menu/AssertBreadcrumbTrait.php
index 41634b115e..a18f45cd3f 100644
--- a/core/modules/system/src/Tests/Menu/AssertBreadcrumbTrait.php
+++ b/core/modules/system/src/Tests/Menu/AssertBreadcrumbTrait.php
@@ -2,16 +2,11 @@
 
 namespace Drupal\system\Tests\Menu;
 
-@trigger_error(__NAMESPACE__ . '\AssertBreadcrumbTrait is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\system\Functional\Menu\AssertBreadcrumbTrait', E_USER_DEPRECATED);
-
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Url;
 
 /**
  * Provides test assertions for verifying breadcrumbs.
- *
- * @deprecated Scheduled for removal in Drupal 9.0.0.
- *   Use \Drupal\Tests\system\Functional\Menu\AssertBreadcrumbTrait instead.
  */
 trait AssertBreadcrumbTrait {
 
diff --git a/core/modules/system/src/Tests/Menu/AssertMenuActiveTrailTrait.php b/core/modules/system/src/Tests/Menu/AssertMenuActiveTrailTrait.php
index e64177a8c2..05e0268c20 100644
--- a/core/modules/system/src/Tests/Menu/AssertMenuActiveTrailTrait.php
+++ b/core/modules/system/src/Tests/Menu/AssertMenuActiveTrailTrait.php
@@ -2,15 +2,10 @@
 
 namespace Drupal\system\Tests\Menu;
 
-@trigger_error(__NAMESPACE__ . '\AssertMenuActiveTrailTrait is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\system\Functional\Menu\AssertMenuActiveTrailTrait', E_USER_DEPRECATED);
-
 use Drupal\Core\Url;
 
 /**
  * Provides test assertions for verifying the active menu trail.
- *
- * @deprecated Scheduled for removal in Drupal 9.0.0.
- *   Use \Drupal\Tests\system\Functional\Menu\AssertMenuActiveTrailTrait instead.
  */
 trait AssertMenuActiveTrailTrait {
 
diff --git a/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php b/core/modules/system/src/Tests/Menu/BreadcrumbTest.php
similarity index 97%
rename from core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
rename to core/modules/system/src/Tests/Menu/BreadcrumbTest.php
index e9142dc853..39303fffcd 100644
--- a/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
+++ b/core/modules/system/src/Tests/Menu/BreadcrumbTest.php
@@ -1,10 +1,9 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Menu;
+namespace Drupal\system\Tests\Menu;
 
 use Drupal\Core\Url;
 use Drupal\node\Entity\NodeType;
-use Drupal\Tests\BrowserTestBase;
 use Drupal\user\RoleInterface;
 
 /**
@@ -12,9 +11,7 @@
  *
  * @group Menu
  */
-class BreadcrumbTest extends BrowserTestBase {
-
-  use AssertBreadcrumbTrait;
+class BreadcrumbTest extends MenuTestBase {
 
   /**
    * Modules to enable.
@@ -361,17 +358,17 @@ public function testBreadCrumbs() {
     // user is not able to access "Administer".
     $trail = $home;
     $this->assertBreadcrumb('admin', $trail, t('Access denied'));
-    $this->assertSession()->statusCodeEquals(403);
+    $this->assertResponse(403);
 
     // Since the 'admin' path is not accessible, we still expect only the Home
     // link.
     $this->assertBreadcrumb('admin/reports', $trail, t('Reports'));
-    $this->assertSession()->statusCodeNotEquals(403);
+    $this->assertNoResponse(403);
 
     // Since the Reports page is accessible, that will show.
     $trail += ['admin/reports' => t('Reports')];
     $this->assertBreadcrumb('admin/reports/dblog', $trail, t('Recent log messages'));
-    $this->assertSession()->statusCodeNotEquals(403);
+    $this->assertNoResponse(403);
 
     // Ensure that the breadcrumb is safe against XSS.
     $this->drupalGet('menu-test/breadcrumb1/breadcrumb2/breadcrumb3');
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php b/core/modules/system/src/Tests/Menu/LocalActionTest.php
similarity index 93%
rename from core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
rename to core/modules/system/src/Tests/Menu/LocalActionTest.php
index f7b9aafae4..3886cb8095 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
+++ b/core/modules/system/src/Tests/Menu/LocalActionTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Menu;
+namespace Drupal\system\Tests\Menu;
 
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests local actions derived from router and added/altered via hooks.
  *
  * @group Menu
  */
-class LocalActionTest extends BrowserTestBase {
+class LocalActionTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -80,7 +80,7 @@ protected function assertLocalAction(array $actions) {
       // This behaviour is a bug in libxml, see
       // https://bugs.php.net/bug.php?id=49437.
       $this->assertPattern('@<a [^>]*class="[^"]*button-action[^"]*"[^>]*>' . preg_quote($title, '@') . '</@');
-      $this->assertEqual($elements[$index]->getAttribute('href'), $url->toString());
+      $this->assertEqual($elements[$index]['href'], $url->toString());
       $index++;
     }
   }
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php b/core/modules/system/src/Tests/Menu/LocalTasksTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
rename to core/modules/system/src/Tests/Menu/LocalTasksTest.php
index 12a157d587..7171d3e541 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
+++ b/core/modules/system/src/Tests/Menu/LocalTasksTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Menu;
+namespace Drupal\system\Tests\Menu;
 
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests local tasks derived from router and added/altered via hooks.
  *
  * @group Menu
  */
-class LocalTasksTest extends BrowserTestBase {
+class LocalTasksTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -55,10 +55,10 @@ protected function assertLocalTasks(array $routes, $level = 0) {
     foreach ($routes as $index => $route_info) {
       list($route_name, $route_parameters) = $route_info;
       $expected = Url::fromRoute($route_name, $route_parameters)->toString();
-      $method = ($elements[$index]->getAttribute('href') == $expected ? 'pass' : 'fail');
+      $method = ($elements[$index]['href'] == $expected ? 'pass' : 'fail');
       $this->{$method}(format_string('Task @number href @value equals @expected.', [
         '@number' => $index + 1,
-        '@value' => $elements[$index]->getAttribute('href'),
+        '@value' => (string) $elements[$index]['href'],
         '@expected' => $expected,
       ]));
     }
@@ -129,7 +129,7 @@ public function testPluginLocalTask() {
     // Ensure the view tab is active.
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]/a');
     $this->assertEqual(1, count($result), 'There is just a single active tab.');
-    $this->assertEqual('View(active tab)', $result[0]->getText(), 'The view tab is active.');
+    $this->assertEqual('View', (string) $result[0], 'The view tab is active.');
 
     // Verify that local tasks in the second level appear.
     $sub_tasks = [
@@ -144,15 +144,15 @@ public function testPluginLocalTask() {
 
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]/a');
     $this->assertEqual(1, count($result), 'There is just a single active tab.');
-    $this->assertEqual('Settings(active tab)', $result[0]->getText(), 'The settings tab is active.');
+    $this->assertEqual('Settings', (string) $result[0], 'The settings tab is active.');
 
     $this->drupalGet(Url::fromRoute('menu_test.local_task_test_tasks_settings_sub1'));
     $this->assertLocalTasks($sub_tasks, 1);
 
     $result = $this->xpath('//ul[contains(@class, "tabs")]//a[contains(@class, "active")]');
     $this->assertEqual(2, count($result), 'There are tabs active on both levels.');
-    $this->assertEqual('Settings(active tab)', $result[0]->getText(), 'The settings tab is active.');
-    $this->assertEqual('Dynamic title for TestTasksSettingsSub1(active tab)', $result[1]->getText(), 'The sub1 tab is active.');
+    $this->assertEqual('Settings', (string) $result[0], 'The settings tab is active.');
+    $this->assertEqual('Dynamic title for TestTasksSettingsSub1', (string) $result[1], 'The sub1 tab is active.');
 
     $this->assertCacheTag('kittens:ragdoll');
     $this->assertCacheTag('kittens:dwarf-cat');
@@ -162,8 +162,8 @@ public function testPluginLocalTask() {
 
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]');
     $this->assertEqual(2, count($result), 'There are tabs active on both levels.');
-    $this->assertEqual('Settings(active tab)', $result[0]->getText(), 'The settings tab is active.');
-    $this->assertEqual('Derive 1(active tab)', $result[1]->getText(), 'The derive1 tab is active.');
+    $this->assertEqual('Settings', (string) $result[0]->a, 'The settings tab is active.');
+    $this->assertEqual('Derive 1', (string) $result[1]->a, 'The derive1 tab is active.');
 
     // Ensures that the local tasks contains the proper 'provider key'
     $definitions = $this->container->get('plugin.manager.menu.local_task')->getDefinitions();
@@ -190,7 +190,7 @@ public function testPluginLocalTask() {
 
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]');
     $this->assertEqual(1, count($result), 'There is one active tab.');
-    $this->assertEqual('upcasting sub1(active tab)', $result[0]->getText(), 'The "upcasting sub1" tab is active.');
+    $this->assertEqual('upcasting sub1', (string) $result[0]->a, 'The "upcasting sub1" tab is active.');
 
     $this->drupalGet(Url::fromRoute('menu_test.local_task_test_upcasting_sub2', ['entity_test' => '1']));
 
@@ -202,7 +202,7 @@ public function testPluginLocalTask() {
 
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]');
     $this->assertEqual(1, count($result), 'There is one active tab.');
-    $this->assertEqual('upcasting sub2(active tab)', $result[0]->getText(), 'The "upcasting sub2" tab is active.');
+    $this->assertEqual('upcasting sub2', (string) $result[0]->a, 'The "upcasting sub2" tab is active.');
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php b/core/modules/system/src/Tests/Menu/MenuRouterTest.php
similarity index 99%
rename from core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php
rename to core/modules/system/src/Tests/Menu/MenuRouterTest.php
index eec96fcae8..521a691537 100644
--- a/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php
+++ b/core/modules/system/src/Tests/Menu/MenuRouterTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Menu;
+namespace Drupal\system\Tests\Menu;
 
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests menu router and default menu link functionality.
  *
  * @group Menu
  */
-class MenuRouterTest extends BrowserTestBase {
+class MenuRouterTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/src/Tests/Menu/MenuTestBase.php b/core/modules/system/src/Tests/Menu/MenuTestBase.php
index c77f079c01..f791eecbe2 100644
--- a/core/modules/system/src/Tests/Menu/MenuTestBase.php
+++ b/core/modules/system/src/Tests/Menu/MenuTestBase.php
@@ -2,16 +2,8 @@
 
 namespace Drupal\system\Tests\Menu;
 
-@trigger_error(__NAMESPACE__ . '\MenuTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\BrowserTestBase', E_USER_DEPRECATED);
-
 use Drupal\simpletest\WebTestBase;
 
-/**
- * Base class for Menu tests.
- *
- * @deprecated Scheduled for removal in Drupal 9.0.0.
- *   Use \Drupal\Tests\BrowserTestBase instead.
- */
 abstract class MenuTestBase extends WebTestBase {
 
   use AssertBreadcrumbTrait;
diff --git a/core/modules/system/src/Tests/Module/ModuleTestBase.php b/core/modules/system/src/Tests/Module/ModuleTestBase.php
index cc5a7ef270..a0a4ed226a 100644
--- a/core/modules/system/src/Tests/Module/ModuleTestBase.php
+++ b/core/modules/system/src/Tests/Module/ModuleTestBase.php
@@ -90,10 +90,8 @@ public function assertModuleTablesDoNotExist($module) {
    * @param string $module
    *   The name of the module.
    *
-   * @return bool|null
-   *   TRUE if configuration has been installed, FALSE otherwise. Returns NULL
-   *   if the module configuration directory does not exist or does not contain
-   *   any configuration files.
+   * @return bool
+   *   TRUE if configuration has been installed, FALSE otherwise.
    */
   public function assertModuleConfig($module) {
     $module_config_dir = drupal_get_path('module', $module) . '/' . InstallStorage::CONFIG_INSTALL_DIRECTORY;
diff --git a/core/modules/system/src/Tests/Session/SessionTest.php b/core/modules/system/src/Tests/Session/SessionTest.php
index 1be9561b36..fcadd42b91 100644
--- a/core/modules/system/src/Tests/Session/SessionTest.php
+++ b/core/modules/system/src/Tests/Session/SessionTest.php
@@ -282,8 +282,7 @@ public function testEmptySessionID() {
   /**
    * Reset the cookie file so that it refers to the specified user.
    *
-   * @param $uid
-   *   User id to set as the active session.
+   * @param $uid User id to set as the active session.
    */
   public function sessionReset($uid = 0) {
     // Close the internal browser.
diff --git a/core/modules/system/src/Tests/System/CronRunTest.php b/core/modules/system/src/Tests/System/CronRunTest.php
index ec4e649bf7..111cc00870 100644
--- a/core/modules/system/src/Tests/System/CronRunTest.php
+++ b/core/modules/system/src/Tests/System/CronRunTest.php
@@ -105,19 +105,9 @@ public function testCronUI() {
     // the time will start at 1 January 1970.
     $this->assertNoText('years');
 
-    $cron_last = time() - 200;
-    \Drupal::state()->set('system.cron_last', $cron_last);
-
-    $this->drupalPostForm(NULL, [], 'Save configuration');
-    $this->assertText('The configuration options have been saved.');
+    $this->drupalPostForm(NULL, [], t('Save configuration'));
+    $this->assertText(t('The configuration options have been saved.'));
     $this->assertUrl('admin/config/system/cron');
-
-    // Check that cron does not run when saving the configuration form.
-    $this->assertEqual($cron_last, \Drupal::state()->get('system.cron_last'), 'Cron does not run when saving the configuration form.');
-
-    // Check that cron runs when triggered manually.
-    $this->drupalPostForm(NULL, [], 'Run cron');
-    $this->assertTrue($cron_last < \Drupal::state()->get('system.cron_last'), 'Cron runs when triggered manually.');
   }
 
   /**
diff --git a/core/modules/system/src/Tests/System/FloodTest.php b/core/modules/system/src/Tests/System/FloodTest.php
index bba3032446..a3a3368314 100644
--- a/core/modules/system/src/Tests/System/FloodTest.php
+++ b/core/modules/system/src/Tests/System/FloodTest.php
@@ -34,9 +34,8 @@ public function testCleanUp() {
     $window_expired = -1;
     $name = 'flood_test_cleanup';
 
-    $flood = \Drupal::flood();
-    $this->assertTrue($flood->isAllowed($name, $threshold));
     // Register expired event.
+    $flood = \Drupal::flood();
     $flood->register($name, $window_expired);
     // Verify event is not allowed.
     $this->assertFalse($flood->isAllowed($name, $threshold));
@@ -63,7 +62,6 @@ public function testMemoryBackend() {
 
     $request_stack = \Drupal::service('request_stack');
     $flood = new MemoryBackend($request_stack);
-    $this->assertTrue($flood->isAllowed($name, $threshold));
     // Register expired event.
     $flood->register($name, $window_expired);
     // Verify event is not allowed.
@@ -92,7 +90,6 @@ public function testDatabaseBackend() {
     $connection = \Drupal::service('database');
     $request_stack = \Drupal::service('request_stack');
     $flood = new DatabaseBackend($connection, $request_stack);
-    $this->assertTrue($flood->isAllowed($name, $threshold));
     // Register expired event.
     $flood->register($name, $window_expired);
     // Verify event is not allowed.
diff --git a/core/modules/system/src/Tests/System/FrontPageTest.php b/core/modules/system/src/Tests/System/FrontPageTest.php
index 312d0db9ce..f5782b708b 100644
--- a/core/modules/system/src/Tests/System/FrontPageTest.php
+++ b/core/modules/system/src/Tests/System/FrontPageTest.php
@@ -65,7 +65,7 @@ public function testDrupalFrontPage() {
     // Change the front page to an invalid path.
     $edit = ['site_frontpage' => '/kittens'];
     $this->drupalPostForm('admin/config/system/site-information', $edit, t('Save configuration'));
-    $this->assertText(t("Either the path '@path' is invalid or you do not have access to it.", ['@path' => $edit['site_frontpage']]));
+    $this->assertText(t("The path '@path' is either invalid or you do not have access to it.", ['@path' => $edit['site_frontpage']]));
 
     // Change the front page to a path without a starting slash.
     $edit = ['site_frontpage' => $this->nodePath];
diff --git a/core/modules/system/src/Tests/System/PageTitleTest.php b/core/modules/system/src/Tests/System/PageTitleTest.php
index 44e33cb6e4..3b4d38a500 100644
--- a/core/modules/system/src/Tests/System/PageTitleTest.php
+++ b/core/modules/system/src/Tests/System/PageTitleTest.php
@@ -113,9 +113,9 @@ public function testRoutingTitle() {
     $this->assertEqual('Test dynamic title', (string) $result[0]);
 
     // Set some custom translated strings.
-    $this->addCustomTranslations('en', [
-      '' => ['Static title' => 'Static title translated'],
-    ]);
+    $this->addCustomTranslations('en', ['' => [
+      'Static title' => 'Static title translated'
+    ]]);
     $this->writeCustomTranslations();
 
     // Ensure that the title got translated.
diff --git a/core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithAutomatedCronTest.php b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomatedCronTest.php
similarity index 77%
rename from core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithAutomatedCronTest.php
rename to core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomatedCronTest.php
index 50926c935c..a2f480ed51 100644
--- a/core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithAutomatedCronTest.php
+++ b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomatedCronTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Ensures that the automated cron module is installed on update.
@@ -16,7 +14,7 @@ class AutomatedCronUpdateWithAutomatedCronTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php
similarity index 69%
rename from core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php
rename to core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php
index d4ac71188e..9f76ebd9a4 100644
--- a/core/modules/system/tests/src/Functional/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php
+++ b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomatedCronTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Ensures that the automated cron module is not installed on update.
@@ -16,8 +14,8 @@ class AutomatedCronUpdateWithoutAutomatedCronTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.without_automated_cron.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.without_automated_cron.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/ConfigOverridesUpdateTest.php b/core/modules/system/src/Tests/Update/ConfigOverridesUpdateTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Update/ConfigOverridesUpdateTest.php
rename to core/modules/system/src/Tests/Update/ConfigOverridesUpdateTest.php
index bab7d49417..6efa3182d6 100644
--- a/core/modules/system/tests/src/Functional/Update/ConfigOverridesUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/ConfigOverridesUpdateTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests system_update_8200().
@@ -18,8 +16,8 @@ class ConfigOverridesUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.config-override-fix.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.config-override-fix.php',
     ];
   }
 
diff --git a/core/modules/system/src/Tests/Update/DbUpdatesTrait.php b/core/modules/system/src/Tests/Update/DbUpdatesTrait.php
index 8a8ae84680..2218568250 100644
--- a/core/modules/system/src/Tests/Update/DbUpdatesTrait.php
+++ b/core/modules/system/src/Tests/Update/DbUpdatesTrait.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\system\Tests\Update;
 
-@trigger_error(__NAMESPACE__ . '\DbUpdatesTrait is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Use \Drupal\FunctionalTests\Update\DbUpdatesTrait instead. See https://www.drupal.org/node/2896640.', E_USER_DEPRECATED);
-
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Url;
 
@@ -12,10 +10,6 @@
  * pending db updates through the Update UI.
  *
  * This should be used only by classes extending \Drupal\simpletest\WebTestBase.
- *
- * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\FunctionalTests\Update\DbUpdatesTrait.
- * @see https://www.drupal.org/node/2896640
  */
 trait DbUpdatesTrait {
 
diff --git a/core/modules/system/tests/src/Functional/Update/DependencyHookInvocationTest.php b/core/modules/system/src/Tests/Update/DependencyHookInvocationTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Update/DependencyHookInvocationTest.php
rename to core/modules/system/src/Tests/Update/DependencyHookInvocationTest.php
index 8ff7b883db..ef22f0e1b3 100644
--- a/core/modules/system/tests/src/Functional/Update/DependencyHookInvocationTest.php
+++ b/core/modules/system/src/Tests/Update/DependencyHookInvocationTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that the hook invocation for determining update dependencies works
@@ -10,7 +10,7 @@
  *
  * @group Update
  */
-class DependencyHookInvocationTest extends BrowserTestBase {
+class DependencyHookInvocationTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Update/DependencyMissingTest.php b/core/modules/system/src/Tests/Update/DependencyMissingTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Update/DependencyMissingTest.php
rename to core/modules/system/src/Tests/Update/DependencyMissingTest.php
index 6ae4dc40c8..407ef33608 100644
--- a/core/modules/system/tests/src/Functional/Update/DependencyMissingTest.php
+++ b/core/modules/system/src/Tests/Update/DependencyMissingTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that missing update dependencies are correctly flagged.
  *
  * @group Update
  */
-class DependencyMissingTest extends BrowserTestBase {
+class DependencyMissingTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Update/DependencyOrderingTest.php b/core/modules/system/src/Tests/Update/DependencyOrderingTest.php
similarity index 93%
rename from core/modules/system/tests/src/Functional/Update/DependencyOrderingTest.php
rename to core/modules/system/src/Tests/Update/DependencyOrderingTest.php
index 8cafaaddba..8616fb6ba9 100644
--- a/core/modules/system/tests/src/Functional/Update/DependencyOrderingTest.php
+++ b/core/modules/system/src/Tests/Update/DependencyOrderingTest.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that update functions are run in the proper order.
  *
  * @group Update
  */
-class DependencyOrderingTest extends BrowserTestBase {
+class DependencyOrderingTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Update/EntityUpdateAddRevisionTranslationAffectedTest.php b/core/modules/system/src/Tests/Update/EntityUpdateAddRevisionTranslationAffectedTest.php
similarity index 90%
rename from core/modules/system/tests/src/Functional/Update/EntityUpdateAddRevisionTranslationAffectedTest.php
rename to core/modules/system/src/Tests/Update/EntityUpdateAddRevisionTranslationAffectedTest.php
index f7dcd0c41b..190e1753e2 100644
--- a/core/modules/system/tests/src/Functional/Update/EntityUpdateAddRevisionTranslationAffectedTest.php
+++ b/core/modules/system/src/Tests/Update/EntityUpdateAddRevisionTranslationAffectedTest.php
@@ -1,8 +1,7 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\system\Tests\Entity\EntityDefinitionTestTrait;
 
 /**
@@ -54,14 +53,14 @@ protected function setUp() {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul_rev.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul_rev.php.gz',
     ];
   }
 
   /**
    * Tests the addition of the 'revision_translation_affected' base field.
    *
-   * @see system_update_8402()
+   * @covers system_update_8402
    */
   public function testAddingTheRevisionTranslationAffectedField() {
     // Make the entity type revisionable and translatable prior to running the
diff --git a/core/modules/system/tests/src/Functional/Update/EntityUpdateToRevisionableAndPublishableTest.php b/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
similarity index 95%
rename from core/modules/system/tests/src/Functional/Update/EntityUpdateToRevisionableAndPublishableTest.php
rename to core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
index eb4a01c99c..3edf6f7d6e 100644
--- a/core/modules/system/tests/src/Functional/Update/EntityUpdateToRevisionableAndPublishableTest.php
+++ b/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\system\Tests\Entity\EntityDefinitionTestTrait;
 
 /**
@@ -71,15 +70,15 @@ protected function setUp() {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.entity-test-schema-converter-enabled.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.entity-test-schema-converter-enabled.php',
     ];
   }
 
   /**
    * Tests the conversion of an entity type to revisionable and publishable.
    *
-   * @see entity_test_update_update_8400()
+   * @covers entity_test_update_update_8400
    */
   public function testConvertToRevisionableAndPublishable() {
     // Check that entity type is not revisionable nor publishable prior to
diff --git a/core/modules/system/tests/src/Functional/Update/FieldSchemaDataUninstallUpdateTest.php b/core/modules/system/src/Tests/Update/FieldSchemaDataUninstallUpdateTest.php
similarity index 77%
rename from core/modules/system/tests/src/Functional/Update/FieldSchemaDataUninstallUpdateTest.php
rename to core/modules/system/src/Tests/Update/FieldSchemaDataUninstallUpdateTest.php
index 782e3410f9..6c5d2f2448 100644
--- a/core/modules/system/tests/src/Functional/Update/FieldSchemaDataUninstallUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/FieldSchemaDataUninstallUpdateTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the upgrade path after fixing field schema data uninstallation.
@@ -18,9 +16,9 @@ class FieldSchemaDataUninstallUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.block-content-uninstall.php',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.field-schema-data-uninstall-2573667.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.block-content-uninstall.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.field-schema-data-uninstall-2573667.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/FilterHtmlUpdateTest.php b/core/modules/system/src/Tests/Update/FilterHtmlUpdateTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Update/FilterHtmlUpdateTest.php
rename to core/modules/system/src/Tests/Update/FilterHtmlUpdateTest.php
index 09e40aa983..892b279b70 100644
--- a/core/modules/system/tests/src/Functional/Update/FilterHtmlUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/FilterHtmlUpdateTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\filter\Entity\FilterFormat;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests that the allowed html configutations are updated with attributes.
@@ -17,7 +16,7 @@ class FilterHtmlUpdateTest extends UpdatePathTestBase {
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/InstallProfileSystemInstall8300Test.php b/core/modules/system/src/Tests/Update/InstallProfileSystemInstall8300Test.php
similarity index 87%
rename from core/modules/system/tests/src/Functional/Update/InstallProfileSystemInstall8300Test.php
rename to core/modules/system/src/Tests/Update/InstallProfileSystemInstall8300Test.php
index 623f88047e..f0eabd62ec 100644
--- a/core/modules/system/tests/src/Functional/Update/InstallProfileSystemInstall8300Test.php
+++ b/core/modules/system/src/Tests/Update/InstallProfileSystemInstall8300Test.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\Site\Settings;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests system_update_8300().
@@ -17,7 +16,7 @@ class InstallProfileSystemInstall8300Test extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/InvalidUpdateHookTest.php b/core/modules/system/src/Tests/Update/InvalidUpdateHookTest.php
similarity index 89%
rename from core/modules/system/tests/src/Functional/Update/InvalidUpdateHookTest.php
rename to core/modules/system/src/Tests/Update/InvalidUpdateHookTest.php
index 44d4832dd2..59c64f6240 100644
--- a/core/modules/system/tests/src/Functional/Update/InvalidUpdateHookTest.php
+++ b/core/modules/system/src/Tests/Update/InvalidUpdateHookTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that a module implementing hook_update_8000() causes an error to be
@@ -10,7 +10,7 @@
  *
  * @group Update
  */
-class InvalidUpdateHookTest extends BrowserTestBase {
+class InvalidUpdateHookTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/tests/src/Functional/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php b/core/modules/system/src/Tests/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php
similarity index 90%
rename from core/modules/system/tests/src/Functional/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php
rename to core/modules/system/src/Tests/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php
index a54bb6d1de..ee47a81d52 100644
--- a/core/modules/system/tests/src/Functional/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/LocalActionsAndTasksConvertedIntoBlocksUpdateTest.php
@@ -1,8 +1,7 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\node\Entity\Node;
 
 /**
@@ -19,8 +18,8 @@ class LocalActionsAndTasksConvertedIntoBlocksUpdateTest extends UpdatePathTestBa
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.local-actions-tasks-into-blocks-507488.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.local-actions-tasks-into-blocks-507488.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleFilledTest.php b/core/modules/system/src/Tests/Update/MenuTreeSerializationTitleFilledTest.php
similarity index 65%
rename from core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleFilledTest.php
rename to core/modules/system/src/Tests/Update/MenuTreeSerializationTitleFilledTest.php
index 5bf07d8492..35f1151cc7 100644
--- a/core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleFilledTest.php
+++ b/core/modules/system/src/Tests/Update/MenuTreeSerializationTitleFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Runs MenuTreeSerializationTitleTest with a dump filled with content.
@@ -14,7 +14,7 @@ class MenuTreeSerializationTitleFilledTest extends MenuTreeSerializationTitleTes
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleTest.php b/core/modules/system/src/Tests/Update/MenuTreeSerializationTitleTest.php
similarity index 90%
rename from core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleTest.php
rename to core/modules/system/src/Tests/Update/MenuTreeSerializationTitleTest.php
index 0df71482ba..cc019dc284 100644
--- a/core/modules/system/tests/src/Functional/Update/MenuTreeSerializationTitleTest.php
+++ b/core/modules/system/src/Tests/Update/MenuTreeSerializationTitleTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\StringTranslation\TranslatableMarkup;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests system_update_8001().
@@ -17,7 +16,7 @@ class MenuTreeSerializationTitleTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/PageTitleConvertedIntoBlockUpdateTest.php b/core/modules/system/src/Tests/Update/PageTitleConvertedIntoBlockUpdateTest.php
similarity index 87%
rename from core/modules/system/tests/src/Functional/Update/PageTitleConvertedIntoBlockUpdateTest.php
rename to core/modules/system/src/Tests/Update/PageTitleConvertedIntoBlockUpdateTest.php
index 2f7306a7c5..6a81566ea3 100644
--- a/core/modules/system/tests/src/Functional/Update/PageTitleConvertedIntoBlockUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/PageTitleConvertedIntoBlockUpdateTest.php
@@ -1,8 +1,7 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 use Drupal\node\Entity\Node;
 
 /**
@@ -19,8 +18,8 @@ class PageTitleConvertedIntoBlockUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.page-title-into-block-2476947.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.page-title-into-block-2476947.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/RecalculatedDependencyTest.php b/core/modules/system/src/Tests/Update/RecalculatedDependencyTest.php
similarity index 92%
rename from core/modules/system/tests/src/Functional/Update/RecalculatedDependencyTest.php
rename to core/modules/system/src/Tests/Update/RecalculatedDependencyTest.php
index 6eb51a2a51..56a010c020 100644
--- a/core/modules/system/tests/src/Functional/Update/RecalculatedDependencyTest.php
+++ b/core/modules/system/src/Tests/Update/RecalculatedDependencyTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests system_post_update_recalculate_dependencies_for_installed_config_entities().
@@ -16,7 +14,7 @@ class RecalculatedDependencyTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php b/core/modules/system/src/Tests/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php
similarity index 81%
rename from core/modules/system/tests/src/Functional/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php
rename to core/modules/system/src/Tests/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php
index b2ccfe6795..143b5c6ae4 100644
--- a/core/modules/system/tests/src/Functional/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php
+++ b/core/modules/system/src/Tests/Update/RemoveResponseGzipFromSystemPerformanceConfigurationTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Ensures that response.gzip is removed from system.performance configuration.
@@ -16,7 +14,7 @@ class RemoveResponseGzipFromSystemPerformanceConfigurationTest extends UpdatePat
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationFilledTest.php b/core/modules/system/src/Tests/Update/RouterIndexOptimizationFilledTest.php
similarity index 65%
rename from core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationFilledTest.php
rename to core/modules/system/src/Tests/Update/RouterIndexOptimizationFilledTest.php
index afb48108f5..264fa05430 100644
--- a/core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationFilledTest.php
+++ b/core/modules/system/src/Tests/Update/RouterIndexOptimizationFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Runs RouterIndexOptimizationTest with a dump filled with content.
@@ -14,7 +14,7 @@ class RouterIndexOptimizationFilledTest extends RouterIndexOptimizationTest {
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationTest.php b/core/modules/system/src/Tests/Update/RouterIndexOptimizationTest.php
similarity index 78%
rename from core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationTest.php
rename to core/modules/system/src/Tests/Update/RouterIndexOptimizationTest.php
index a3bfad2562..0bede3a2a4 100644
--- a/core/modules/system/tests/src/Functional/Update/RouterIndexOptimizationTest.php
+++ b/core/modules/system/src/Tests/Update/RouterIndexOptimizationTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests system_update_8002().
@@ -15,7 +13,7 @@ class RouterIndexOptimizationTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php b/core/modules/system/src/Tests/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php
similarity index 82%
rename from core/modules/system/tests/src/Functional/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php
rename to core/modules/system/src/Tests/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php
index 341b37be12..b61cf20d4b 100644
--- a/core/modules/system/tests/src/Functional/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the upgrade path for converting seven secondary local tasks into a block.
@@ -18,8 +16,8 @@ class SevenSecondaryLocalTasksConvertedIntoBlockUpdateTest extends UpdatePathTes
    */
   public function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.seven-secondary-local-tasks-block-2569529.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.seven-secondary-local-tasks-block-2569529.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/SiteBrandingConvertedIntoBlockUpdateTest.php b/core/modules/system/src/Tests/Update/SiteBrandingConvertedIntoBlockUpdateTest.php
similarity index 86%
rename from core/modules/system/tests/src/Functional/Update/SiteBrandingConvertedIntoBlockUpdateTest.php
rename to core/modules/system/src/Tests/Update/SiteBrandingConvertedIntoBlockUpdateTest.php
index d904e10ed1..c60c2b0dc8 100644
--- a/core/modules/system/tests/src/Functional/Update/SiteBrandingConvertedIntoBlockUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/SiteBrandingConvertedIntoBlockUpdateTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the upgrade path for page site variables being converted into a block.
@@ -16,8 +14,8 @@ class SiteBrandingConvertedIntoBlockUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.site-branding-into-block-2005546.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.site-branding-into-block-2005546.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/StableBaseThemeUpdateTest.php b/core/modules/system/src/Tests/Update/StableBaseThemeUpdateTest.php
similarity index 78%
rename from core/modules/system/tests/src/Functional/Update/StableBaseThemeUpdateTest.php
rename to core/modules/system/src/Tests/Update/StableBaseThemeUpdateTest.php
index 326bbbb9a6..b71d47bfc8 100644
--- a/core/modules/system/tests/src/Functional/Update/StableBaseThemeUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/StableBaseThemeUpdateTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the upgrade path for introducing the Stable base theme.
@@ -25,8 +23,8 @@ class StableBaseThemeUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.stable-base-theme-2575421.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.stable-base-theme-2575421.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/UpdateEntityDisplayTest.php b/core/modules/system/src/Tests/Update/UpdateEntityDisplayTest.php
similarity index 88%
rename from core/modules/system/tests/src/Functional/Update/UpdateEntityDisplayTest.php
rename to core/modules/system/src/Tests/Update/UpdateEntityDisplayTest.php
index 698d331099..0a2cbf45bb 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdateEntityDisplayTest.php
+++ b/core/modules/system/src/Tests/Update/UpdateEntityDisplayTest.php
@@ -1,10 +1,9 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests system_post_update_add_region_to_entity_displays().
@@ -18,7 +17,7 @@ class UpdateEntityDisplayTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseFilledTest.php b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
similarity index 98%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseFilledTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
index 7573fc4a92..9ee6d0cd4d 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseFilledTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
@@ -18,7 +18,7 @@ class UpdatePathRC1TestBaseFilledTest extends UpdatePathRC1TestBaseTest {
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz';
   }
 
   /**
@@ -89,7 +89,7 @@ public function testUpdatedSite() {
 
     // Log in as user 1.
     $account = User::load(1);
-    $account->passRaw = 'drupal';
+    $account->pass_raw = 'drupal';
     $this->drupalLogin($account);
 
     // Make sure we can see the access-restricted entity reference field
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseTest.php b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
similarity index 92%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
index 4077a07d2b..a4f99e685c 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathRC1TestBaseTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathRC1TestBaseTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Component\Render\FormattableMarkup;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests the update path base class with the RC1 database dump.
@@ -22,7 +21,7 @@ class UpdatePathRC1TestBaseTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
index 05719fb6d4..f7f88c6486 100644
--- a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\system\Tests\Update;
 
-@trigger_error(__NAMESPACE__ . '\UpdatePathTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Use \Drupal\FunctionalTests\Update\UpdatePathTestBase instead. See https://www.drupal.org/node/2896640.', E_USER_DEPRECATED);
-
 use Drupal\Component\Utility\Crypt;
 use Drupal\Tests\SchemaCheckTestTrait;
 use Drupal\Core\Database\Database;
@@ -36,10 +34,6 @@
  *
  * @ingroup update_api
  *
- * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.
- *   Use \Drupal\FunctionalTests\Update\UpdatePathTestBase.
- * @see https://www.drupal.org/node/2896640
- *
  * @see hook_update_N()
  */
 abstract class UpdatePathTestBase extends WebTestBase {
@@ -243,14 +237,10 @@ protected function runUpdates() {
     }
     // The site might be broken at the time so logging in using the UI might
     // not work, so we use the API itself.
-    drupal_rewrite_settings([
-      'settings' => [
-        'update_free_access' => (object) [
-          'value' => TRUE,
-          'required' => TRUE,
-        ],
-      ],
-    ]);
+    drupal_rewrite_settings(['settings' => ['update_free_access' => (object) [
+      'value' => TRUE,
+      'required' => TRUE,
+    ]]]);
 
     $this->drupalGet($this->updateUrl);
     $this->clickLink(t('Continue'));
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathTestBaseFilledTest.php b/core/modules/system/src/Tests/Update/UpdatePathTestBaseFilledTest.php
similarity index 98%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathTestBaseFilledTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathTestBaseFilledTest.php
index 2ed58fbabc..3c5aab057e 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathTestBaseFilledTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestBaseFilledTest.php
@@ -1,8 +1,7 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBaseTest;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
 use Drupal\user\Entity\User;
@@ -19,7 +18,7 @@ class UpdatePathTestBaseFilledTest extends UpdatePathTestBaseTest {
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
   /**
@@ -90,7 +89,7 @@ public function testUpdatedSite() {
 
     // Log in as user 1.
     $account = User::load(1);
-    $account->passRaw = 'drupal';
+    $account->pass_raw = 'drupal';
     $this->drupalLogin($account);
 
     // Make sure we can see the access-restricted entity reference field
diff --git a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php b/core/modules/system/src/Tests/Update/UpdatePathTestBaseTest.php
similarity index 92%
rename from core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathTestBaseTest.php
index 911d523a0e..efff986085 100644
--- a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestBaseTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\FunctionalTests\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\SafeMarkup;
@@ -22,8 +22,8 @@ class UpdatePathTestBaseTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../modules/system/tests/fixtures/update/drupal-8.update-test-schema-enabled.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.update-test-schema-enabled.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php b/core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php
similarity index 79%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php
index e30915e76e..90f3387a6c 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathTestJavaScriptTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestJavaScriptTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the presence of JavaScript at update.php.
@@ -16,7 +14,7 @@ class UpdatePathTestJavaScriptTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
     ];
   }
 
@@ -37,12 +35,12 @@ protected function doSelectionTest() {
     $scripts = $this->xpath('//script');
     $found = FALSE;
     foreach ($scripts as $script) {
-      if (!$script->getAttribute('src')) {
+      if (!isset($script['src'])) {
         continue;
       }
       // Source is a root-relative URL. Transform it to an absolute URL to allow
       // file_get_contents() to access the file.
-      $src = preg_replace('#^' . $GLOBALS['base_path'] . '(.*)#i', $GLOBALS['base_url'] . '/' . '${1}', $script->getAttribute('src'));
+      $src = preg_replace('#^' . $GLOBALS['base_path'] . '(.*)#i', $GLOBALS['base_url'] . '/' . '${1}', (string) $script['src']);
       $file_content = file_get_contents($src);
 
       if (strpos($file_content, 'window.drupalSettings =') !== FALSE) {
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php b/core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingFilledTest.php
similarity index 65%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingFilledTest.php
index 0e81ad479f..147c8c0482 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingFilledTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Runs UpdatePathWithBrokenRoutingTest with a dump filled with content.
@@ -14,7 +14,7 @@ class UpdatePathWithBrokenRoutingFilledTest extends UpdatePathWithBrokenRoutingT
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php b/core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingTest.php
similarity index 56%
rename from core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php
rename to core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingTest.php
index 1c8493d946..e710a4ecaf 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePathWithBrokenRoutingTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathWithBrokenRoutingTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests the update path with a broken router.
@@ -16,8 +14,8 @@ class UpdatePathWithBrokenRoutingTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.broken_routing.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.broken_routing.php',
     ];
   }
 
@@ -32,6 +30,16 @@ public function testWithBrokenRouting() {
     $this->drupalGet('<front>');
     $this->assertResponse(500);
 
+    // The exceptions are expected. Do not interpret them as a test failure.
+    // Not using File API; a potential error must trigger a PHP warning.
+    unlink(\Drupal::root() . '/' . $this->siteDirectory . '/error.log');
+    foreach ($this->assertions as $key => $assertion) {
+      if (strpos($assertion['message'], 'core/modules/system/tests/modules/update_script_test/src/PathProcessor/BrokenInboundPathProcessor.php') !== FALSE) {
+        unset($this->assertions[$key]);
+        $this->deleteAssert($assertion['message_id']);
+      }
+    }
+
     $this->runUpdates();
 
     // Remove the simulation of the broken router, and make sure we can get to
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php b/core/modules/system/src/Tests/Update/UpdatePostUpdateFailingTest.php
similarity index 74%
rename from core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php
rename to core/modules/system/src/Tests/Update/UpdatePostUpdateFailingTest.php
index 03b5d7b0ec..dba67eaaec 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateFailingTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePostUpdateFailingTest.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+namespace Drupal\system\Tests\Update;
 
 /**
  * Tests hook_post_update() when there are failing update hooks.
@@ -16,8 +14,8 @@ class UpdatePostUpdateFailingTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.update-test-postupdate-failing-enabled.php',
     ];
   }
 
@@ -34,7 +32,7 @@ public function testPostUpdate() {
     $this->assertIdentical([], \Drupal::state()->get('post_update_test_execution', []));
 
     $key_value = \Drupal::keyValue('update__post_update');
-    $this->assertEqual([], $key_value->get('existing_updates', []));
+    $this->assertEqual([], $key_value->get('existing_updates'));
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php b/core/modules/system/src/Tests/Update/UpdatePostUpdateTest.php
similarity index 90%
rename from core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php
rename to core/modules/system/src/Tests/Update/UpdatePostUpdateTest.php
index 1bba498d08..c50b1d45f4 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatePostUpdateTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatePostUpdateTest.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Component\Render\FormattableMarkup;
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
 
 /**
  * Tests hook_post_update().
@@ -17,8 +16,8 @@ class UpdatePostUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.update-test-postupdate-enabled.php',
     ];
   }
 
diff --git a/core/modules/system/tests/src/Functional/Update/UpdateSchemaTest.php b/core/modules/system/src/Tests/Update/UpdateSchemaTest.php
similarity index 91%
rename from core/modules/system/tests/src/Functional/Update/UpdateSchemaTest.php
rename to core/modules/system/src/Tests/Update/UpdateSchemaTest.php
index a42cbcb3c2..0e42c9d5e5 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdateSchemaTest.php
+++ b/core/modules/system/src/Tests/Update/UpdateSchemaTest.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\Url;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that update hooks are properly run.
  *
  * @group Update
  */
-class UpdateSchemaTest extends BrowserTestBase {
+class UpdateSchemaTest extends WebTestBase {
 
   /**
    * {@inheritdoc}
@@ -57,7 +57,6 @@ public function testUpdateHooks() {
     $this->assertRaw('Schema version 8001.');
     // Run the update hooks.
     $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
 
     // Ensure schema has changed.
     $this->assertEqual(drupal_get_installed_schema_version('update_test_schema', TRUE), 8001);
diff --git a/core/modules/system/tests/src/Functional/Update/UpdateScriptTest.php b/core/modules/system/src/Tests/Update/UpdateScriptTest.php
similarity index 94%
rename from core/modules/system/tests/src/Functional/Update/UpdateScriptTest.php
rename to core/modules/system/src/Tests/Update/UpdateScriptTest.php
index 29d4d08e23..ed076b8156 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdateScriptTest.php
+++ b/core/modules/system/src/Tests/Update/UpdateScriptTest.php
@@ -1,17 +1,17 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
 use Drupal\Core\Url;
 use Drupal\language\Entity\ConfigurableLanguage;
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests the update script access and functionality.
  *
  * @group Update
  */
-class UpdateScriptTest extends BrowserTestBase {
+class UpdateScriptTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -119,7 +119,6 @@ public function testRequirements() {
     $this->assertNoText('This is a requirements warning provided by the update_script_test module.');
     $this->clickLink(t('Continue'));
     $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
     $this->assertText(t('The update_script_test_update_8001() update was executed successfully.'), 'End of update process was reached.');
     // Confirm that all caches were cleared.
     $this->assertText(t('hook_cache_flush() invoked for update_script_test.module.'), 'Caches were cleared after resolving a requirements warning and applying updates.');
@@ -168,7 +167,7 @@ public function testNoUpdateFunctionality() {
     $this->clickLink(t('Continue'));
     $this->assertText(t('No pending updates.'));
     $this->assertNoLink('Administration pages');
-    $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
+    $this->assertNoLinkByHrefInMainRegion('update.php', 0);
     $this->clickLink('Front page');
     $this->assertResponse(200);
 
@@ -179,7 +178,7 @@ public function testNoUpdateFunctionality() {
     $this->clickLink(t('Continue'));
     $this->assertText(t('No pending updates.'));
     $this->assertLink('Administration pages');
-    $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
+    $this->assertNoLinkByHrefInMainRegion('update.php', 1);
     $this->clickLink('Administration pages');
     $this->assertResponse(200);
   }
@@ -190,7 +189,7 @@ public function testNoUpdateFunctionality() {
   public function testSuccessfulUpdateFunctionality() {
     $initial_maintenance_mode = $this->container->get('state')->get('system.maintenance_mode');
     $this->assertFalse($initial_maintenance_mode, 'Site is not in maintenance mode.');
-    $this->runUpdates($initial_maintenance_mode);
+    $this->updateScriptTest($initial_maintenance_mode);
     $final_maintenance_mode = $this->container->get('state')->get('system.maintenance_mode');
     $this->assertEqual($final_maintenance_mode, $initial_maintenance_mode, 'Maintenance mode should not have changed after database updates.');
 
@@ -210,11 +209,10 @@ public function testSuccessfulUpdateFunctionality() {
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->clickLink(t('Continue'));
     $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
     $this->assertText('Updates were attempted.');
     $this->assertLink('logged');
     $this->assertLink('Administration pages');
-    $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
+    $this->assertNoLinkByHrefInMainRegion('update.php', 1);
     $this->clickLink('Administration pages');
     $this->assertResponse(200);
   }
@@ -228,7 +226,7 @@ public function testMaintenanceModeUpdateFunctionality() {
     $initial_maintenance_mode = $this->container->get('state')
       ->get('system.maintenance_mode');
     $this->assertTrue($initial_maintenance_mode, 'Site is in maintenance mode.');
-    $this->runUpdates($initial_maintenance_mode);
+    $this->updateScriptTest($initial_maintenance_mode);
     $final_maintenance_mode = $this->container->get('state')
       ->get('system.maintenance_mode');
     $this->assertEqual($final_maintenance_mode, $initial_maintenance_mode, 'Maintenance mode should not have changed after database updates.');
@@ -277,11 +275,10 @@ public function testSuccessfulMultilingualUpdateFunctionality() {
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->clickLink(t('Continue'));
     $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
     $this->assertText('Updates were attempted.');
     $this->assertLink('logged');
     $this->assertLink('Administration pages');
-    $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
+    $this->assertNoLinkByHrefInMainRegion('update.php', 1);
     $this->clickLink('Administration pages');
     $this->assertResponse(200);
   }
@@ -289,7 +286,7 @@ public function testSuccessfulMultilingualUpdateFunctionality() {
   /**
    * Helper function to run updates via the browser.
    */
-  protected function runUpdates($maintenance_mode) {
+  protected function updateScriptTest($maintenance_mode) {
     $schema_version = drupal_get_installed_schema_version('update_script_test');
     $this->assertEqual($schema_version, 8001, 'update_script_test is initially installed with schema version 8001.');
 
@@ -309,7 +306,6 @@ protected function runUpdates($maintenance_mode) {
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->clickLink(t('Continue'));
     $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
 
     // Verify that updates were completed successfully.
     $this->assertText('Updates were attempted.');
@@ -322,7 +318,7 @@ protected function runUpdates($maintenance_mode) {
 
     // Verify that there are no links to different parts of the workflow.
     $this->assertNoLink('Administration pages');
-    $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
+    $this->assertNoLinkByHrefInMainRegion('update.php', 0);
     $this->assertNoLink('logged');
 
     // Verify the front page can be visited following the upgrade.
diff --git a/core/modules/system/tests/src/Functional/Update/UpdatesWith7xTest.php b/core/modules/system/src/Tests/Update/UpdatesWith7xTest.php
similarity index 91%
rename from core/modules/system/tests/src/Functional/Update/UpdatesWith7xTest.php
rename to core/modules/system/src/Tests/Update/UpdatesWith7xTest.php
index 2452264e37..c2035d1335 100644
--- a/core/modules/system/tests/src/Functional/Update/UpdatesWith7xTest.php
+++ b/core/modules/system/src/Tests/Update/UpdatesWith7xTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\system\Functional\Update;
+namespace Drupal\system\Tests\Update;
 
-use Drupal\Tests\BrowserTestBase;
+use Drupal\simpletest\WebTestBase;
 
 /**
  * Tests that the minimum schema version is correct even if only 7.x update
@@ -10,7 +10,7 @@
  *
  * @group Update
  */
-class UpdatesWith7xTest extends BrowserTestBase {
+class UpdatesWith7xTest extends WebTestBase {
 
   /**
    * Modules to enable.
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index db361f3971..3c8332e367 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -10,7 +10,6 @@
 use Drupal\Component\FileSystem\FileSystem;
 use Drupal\Component\Utility\OpCodeCache;
 use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Cache\Cache;
 use Drupal\Core\Path\AliasStorage;
 use Drupal\Core\Url;
 use Drupal\Core\Database\Database;
@@ -897,7 +896,7 @@ function system_requirements($phase) {
       $requirements['trusted_host_patterns'] = [
         'title' => t('Trusted Host Settings'),
         'value' => t('Enabled'),
-        'description' => t('The trusted_host_patterns setting is set to allow %trusted_host_patterns', ['%trusted_host_patterns' => implode(', ', $trusted_host_patterns)]),
+        'description' => t('The trusted_host_patterns setting is set to allow %trusted_host_patterns', ['%trusted_host_patterns' => join(', ', $trusted_host_patterns)]),
       ];
     }
   }
@@ -2026,19 +2025,3 @@ function system_update_8402() {
     }
   }
 }
-
-/**
- * Delete all cache_* tables. They are recreated on demand with the new schema.
- */
-function system_update_8403() {
-  foreach (Cache::getBins() as $bin => $cache_backend) {
-    // Try to delete the table regardless of which cache backend is handling it.
-    // This is to ensure the new schema is used if the configuration for the
-    // backend class is changed after the update hook runs.
-    $table_name = "cache_$bin";
-    $schema = Database::getConnection()->schema();
-    if ($schema->tableExists($table_name)) {
-      $schema->dropTable($table_name);
-    }
-  }
-}
diff --git a/core/modules/system/system.links.task.yml b/core/modules/system/system.links.task.yml
index db8f8564d8..a151835a40 100644
--- a/core/modules/system/system.links.task.yml
+++ b/core/modules/system/system.links.task.yml
@@ -68,8 +68,3 @@ system.admin_content:
   title: Content
   route_name: system.admin_content
   base_route: system.admin_content
-
-system.performance_settings:
-  title: 'Performance'
-  route_name: system.performance_settings
-  base_route: system.performance_settings
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index a9ca4c3dd8..d327d4e74b 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -250,7 +250,7 @@ function system_theme() {
       'file' => 'system.admin.inc',
     ],
     'admin_block' => [
-      'variables' => ['block' => NULL, 'attributes' => []],
+      'variables' => ['block' => NULL],
       'file' => 'system.admin.inc',
     ],
     'admin_block_content' => [
@@ -1383,7 +1383,7 @@ function system_time_zones($blank = NULL, $grouped = FALSE) {
       $city = array_pop($split);
       $region = array_shift($split);
       if (!empty($region)) {
-        $grouped_zones[$region][$key] = empty($split) ? $city : $city . ' (' . implode('/', $split) . ')';
+        $grouped_zones[$region][$key] = empty($split) ? $city : $city . ' (' . join('/', $split) . ')';
       }
       else {
         $grouped_zones[$key] = $value;
diff --git a/core/modules/system/templates/admin-block.html.twig b/core/modules/system/templates/admin-block.html.twig
index 6d1fa535db..c3dab0efc8 100644
--- a/core/modules/system/templates/admin-block.html.twig
+++ b/core/modules/system/templates/admin-block.html.twig
@@ -10,17 +10,11 @@
  *   - content: (optional) The content of the block.
  *   - description: (optional) A description of the block.
  *     (Description should only be output if content is not available).
- * - attributes: HTML attributes for the containing div element.
  *
  * @ingroup themeable
  */
 #}
-{%
-  set classes = [
-    'panel',
-  ]
-%}
-<div{{ attributes.addClass(classes) }}>
+<div class="panel">
   {% if block.title %}
     <h3 class="panel__title">{{ block.title }}</h3>
   {% endif %}
diff --git a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.routing.yml b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.routing.yml
index 57801a3e2d..6271408417 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.routing.yml
+++ b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.routing.yml
@@ -38,11 +38,3 @@ ajax_forms_test.image_button_form:
   requirements:
     _access: 'TRUE'
 
-ajax_forms_test.ajax_element_form:
-  path: '/ajax_forms_test_ajax_element_form'
-  defaults:
-    _title: 'AJAX forms elements test'
-    _form: '\Drupal\ajax_forms_test\Form\AjaxFormsTestAjaxElementsForm'
-  requirements:
-    _access: 'TRUE'
-
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php b/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
index 9b35ef7694..06c4b0bb0d 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
@@ -22,28 +22,6 @@ public function selectCallback($form, FormStateInterface $form_state) {
     return $response;
   }
 
-  /**
-   * Ajax callback triggered by date.
-   */
-  public function dateCallback($form, FormStateInterface $form_state) {
-    $response = new AjaxResponse();
-    $response->addCommand(new HtmlCommand('#ajax_date_value', $form_state->getValue('date')));
-    $response->addCommand(new DataCommand('#ajax_date_value', 'form_state_value_date', $form_state->getValue('date')));
-    return $response;
-  }
-
-  /**
-   * Ajax callback triggered by datetime.
-   */
-  public function datetimeCallback($form, FormStateInterface $form_state) {
-    $datetime = $form_state->getValue('datetime')['date'] . ' ' . $form_state->getValue('datetime')['time'];
-
-    $response = new AjaxResponse();
-    $response->addCommand(new HtmlCommand('#ajax_datetime_value', $datetime));
-    $response->addCommand(new DataCommand('#ajax_datetime_value', 'form_state_value_datetime', $datetime));
-    return $response;
-  }
-
   /**
    * Ajax callback triggered by checkbox.
    */
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php
deleted file mode 100644
index 0290f8195c..0000000000
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-namespace Drupal\ajax_forms_test\Form;
-
-use Drupal\Core\Form\FormBase;
-use Drupal\ajax_forms_test\Callbacks;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Form builder: Builds a form that has each FAPI elements triggering a simple
- * Ajax callback.
- */
-class AjaxFormsTestAjaxElementsForm extends FormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'ajax_forms_test_ajax_elements_form';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $callback_object = new Callbacks();
-
-    $form['date'] = [
-      '#type' => 'date',
-      '#ajax' => [
-        'callback' => [$callback_object, 'dateCallback'],
-      ],
-      '#suffix' => '<div id="ajax_date_value">No date yet selected</div>',
-    ];
-
-    $form['datetime'] = [
-      '#type' => 'datetime',
-      '#ajax' => [
-        'callback' => [$callback_object, 'datetimeCallback'],
-        'wrapper' => 'ajax_datetime_value',
-      ],
-    ];
-
-    $form['datetime_result'] = [
-      '#type' => 'markup',
-      '#markup' => '<div id="ajax_datetime_value">No datetime selected.</div>',
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
-
-}
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
index b8e9213e27..f69a123231 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
@@ -31,8 +31,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#options' => [
         'red' => 'red',
         'green' => 'green',
-        'blue' => 'blue',
-      ],
+        'blue' => 'blue'],
       '#ajax' => [
         'callback' => [$object, 'selectCallback'],
       ],
diff --git a/core/modules/system/tests/modules/common_test/common_test.module b/core/modules/system/tests/modules/common_test/common_test.module
index 040e40a4e4..97bba7b341 100644
--- a/core/modules/system/tests/modules/common_test/common_test.module
+++ b/core/modules/system/tests/modules/common_test/common_test.module
@@ -5,7 +5,7 @@
  * Helper module for the Common tests.
  */
 
-use Drupal\Core\Asset\AttachedAssetsInterface;
+use \Drupal\Core\Asset\AttachedAssetsInterface;
 
 /**
  * Applies #printed to an element to help test #pre_render.
diff --git a/core/modules/system/tests/modules/database_test/database_test.install b/core/modules/system/tests/modules/database_test/database_test.install
index b4e3ca5632..62cf38addd 100644
--- a/core/modules/system/tests/modules/database_test/database_test.install
+++ b/core/modules/system/tests/modules/database_test/database_test.install
@@ -207,8 +207,7 @@ function database_test_schema() {
         'type' => 'int',
         'unsigned' => TRUE,
         'not null' => FALSE,
-        'default' => 0,
-      ],
+        'default' => 0],
     ],
     'primary key' => ['id'],
     'unique keys' => [
diff --git a/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php b/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php
index 56ea9d140d..bd6dd9c7b2 100644
--- a/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php
+++ b/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php
@@ -91,7 +91,7 @@ public function testTablesort() {
       'tid' => ['data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'],
       'pid' => ['data' => t('Person ID'), 'field' => 'pid'],
       'task' => ['data' => t('Task'), 'field' => 'task'],
-      'priority' => ['data' => t('Priority'), 'field' => 'priority'],
+      'priority' => ['data' => t('Priority'), 'field' => 'priority', ],
     ];
 
     $query = db_select('test_task', 't');
@@ -123,7 +123,7 @@ public function testTablesortFirst() {
       'tid' => ['data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'],
       'pid' => ['data' => t('Person ID'), 'field' => 'pid'],
       'task' => ['data' => t('Task'), 'field' => 'task'],
-      'priority' => ['data' => t('Priority'), 'field' => 'priority'],
+      'priority' => ['data' => t('Priority'), 'field' => 'priority', ],
     ];
 
     $query = db_select('test_task', 't');
diff --git a/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php b/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
index 9ba11b7733..0b0cdf430b 100644
--- a/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
+++ b/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
@@ -62,8 +62,7 @@ public function renderArray() {
       '#pre_render' => [function () {
         $elements = $this->earlyRenderContent();
         return $elements;
-      }
-      ],
+      }],
     ];
   }
 
diff --git a/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php b/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php
index 27756d05df..b24f71f668 100644
--- a/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php
+++ b/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php
@@ -2,4 +2,4 @@
 
 namespace Drupal\early_rendering_controller_test;
 
-class TestDomainObject {}
+class TestDomainObject { }
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index bcf55f48b2..4d35275db8 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -737,16 +737,6 @@ function entity_test_entity_access(EntityInterface $entity, $operation, AccountI
     return AccessResult::allowed();
   }
 
-  // Create specific labels to allow or deny access based on certain test
-  // conditions.
-  // @see \Drupal\KernelTests\Core\Entity\EntityAccessControlHandlerTest
-  if ($entity->label() == 'Accessible') {
-    return AccessResult::allowed();
-  }
-  if ($entity->label() == 'Inaccessible') {
-    return AccessResult::forbidden();
-  }
-
   // Uncacheable because the access result depends on a State key-value pair and
   // might therefore change at any time.
   $condition = \Drupal::state()->get("entity_test_entity_access.{$operation}." . $entity->id(), FALSE);
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php
deleted file mode 100644
index c873ccc00e..0000000000
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestComputedField.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace Drupal\entity_test\Entity;
-
-use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\entity_test\Plugin\Field\ComputedTestFieldItemList;
-
-/**
- * An entity used for testing computed field values.
- *
- * @ContentEntityType(
- *   id = "entity_test_computed_field",
- *   label = @Translation("Entity Test computed field"),
- *   base_table = "entity_test_computed_field",
- *   handlers = {
- *     "views_data" = "Drupal\entity_test\EntityTestViewsData"
- *   },
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "name",
- *   },
- *   admin_permission = "administer entity_test content",
- *   links = {
- *     "add-form" = "/entity_test_computed_field/add",
- *   },
- * )
- */
-class EntityTestComputedField extends EntityTest {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
-    $fields = parent::baseFieldDefinitions($entity_type);
-
-    $fields['computed_string_field'] = BaseFieldDefinition::create('string')
-      ->setLabel('Computed Field Test')
-      ->setComputed(TRUE)
-      ->setClass(ComputedTestFieldItemList::class);
-
-    return $fields;
-  }
-
-}
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoUuid.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoUuid.php
deleted file mode 100644
index 8d0ddac482..0000000000
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoUuid.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\entity_test\Entity;
-
-/**
- * Test entity class with revisions but without UUIDs.
- *
- * @ContentEntityType(
- *   id = "entity_test_no_uuid",
- *   label = @Translation("Test entity without UUID"),
- *   handlers = {
- *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
- *   },
- *   base_table = "entity_test_no_uuid",
- *   revision_table = "entity_test_no_uuid_revision",
- *   admin_permission = "administer entity_test content",
- *   persistent_cache = FALSE,
- *   entity_keys = {
- *     "id" = "id",
- *     "revision" = "vid",
- *     "bundle" = "type",
- *     "label" = "name",
- *     "langcode" = "langcode",
- *   },
- * )
- */
-class EntityTestNoUuid extends EntityTest {
-
-}
diff --git a/core/modules/system/tests/modules/entity_test/src/EntityTestViewsData.php b/core/modules/system/tests/modules/entity_test/src/EntityTestViewsData.php
index 27a1186ada..3bb0d24c64 100644
--- a/core/modules/system/tests/modules/entity_test/src/EntityTestViewsData.php
+++ b/core/modules/system/tests/modules/entity_test/src/EntityTestViewsData.php
@@ -16,17 +16,6 @@ class EntityTestViewsData extends EntityViewsData {
   public function getViewsData() {
     $views_data = parent::getViewsData();
 
-    if ($this->entityType->id() === 'entity_test_computed_field') {
-      $views_data['entity_test_computed_field']['computed_string_field'] = [
-        'title' => $this->t('Computed String Field'),
-        'field' => [
-          'id' => 'field',
-          'default_formatter' => 'string',
-          'field_name' => 'computed_string_field',
-        ],
-      ];
-    }
-
     if ($this->entityType->id() != 'entity_test') {
       return $views_data;
     }
diff --git a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedTestFieldItemList.php b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedTestFieldItemList.php
deleted file mode 100644
index 864d33fe06..0000000000
--- a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/ComputedTestFieldItemList.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-namespace Drupal\entity_test\Plugin\Field;
-
-use Drupal\Core\Field\FieldItemList;
-
-/**
- * A computed field item list.
- */
-class ComputedTestFieldItemList extends FieldItemList {
-
-  /**
-   * Compute the list property from state.
-   */
-  protected function computedListProperty() {
-    foreach (\Drupal::state()->get('entity_test_computed_field_item_list_value', []) as $delta => $item) {
-      $this->list[$delta] = $this->createItem($delta, $item);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function get($index) {
-    $this->computedListProperty();
-    return isset($this->list[$index]) ? $this->list[$index] : NULL;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getIterator() {
-    $this->computedListProperty();
-    return parent::getIterator();
-  }
-
-}
diff --git a/core/modules/system/tests/modules/entity_test_schema_converter/entity_test_schema_converter.post_update.php b/core/modules/system/tests/modules/entity_test_schema_converter/entity_test_schema_converter.post_update.php
index ecddf31058..1de5790071 100644
--- a/core/modules/system/tests/modules/entity_test_schema_converter/entity_test_schema_converter.post_update.php
+++ b/core/modules/system/tests/modules/entity_test_schema_converter/entity_test_schema_converter.post_update.php
@@ -5,7 +5,7 @@
  * Post update functions for entity_test_schema_converter.
  */
 
-use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter;
+use \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter;
 
 /**
  * @addtogroup updates-8.4.x
diff --git a/core/modules/system/tests/modules/entity_test_update/entity_test_update.module b/core/modules/system/tests/modules/entity_test_update/entity_test_update.module
index bd674dd7a6..225c549f4c 100644
--- a/core/modules/system/tests/modules/entity_test_update/entity_test_update.module
+++ b/core/modules/system/tests/modules/entity_test_update/entity_test_update.module
@@ -103,15 +103,13 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
       'id' => $i,
       'name' => $i,
       'test_single_property' => $i . ' - test single property',
-      'test_multiple_properties' => [
-        [
-          'value1' => $i . ' - test multiple properties - value1',
-          'value2' => $i . ' - test multiple properties - value2',
-        ],
-      ],
+      'test_multiple_properties' => [[
+        'value1' => $i . ' - test multiple properties - value1',
+        'value2' => $i . ' - test multiple properties - value2',
+      ]],
       'test_single_property_multiple_values' => [
         ['value' => $i . ' - test single property multiple values 0'],
-        ['value' => $i . ' - test single property multiple values 1'],
+        ['value' => $i . ' - test single property multiple values 1']
       ],
       'test_multiple_properties_multiple_values' => [
         [
@@ -121,7 +119,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
         [
           'value1' => $i . ' - test multiple properties multiple values - value1 1',
           'value2' => $i . ' - test multiple properties multiple values - value2 1',
-        ],
+        ]
       ],
       'test_non_rev_field' => $i . ' - test non-revisionable field',
       'test_non_mul_field' => $i . ' - test non-translatable field',
@@ -134,7 +132,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
         [
           'value1' => $i . ' - field test configurable field - value1 1',
           'value2' => $i . ' - field test configurable field - value2 1',
-        ],
+        ]
       ],
       'test_entity_base_field_info' => $i . ' - test entity base field info',
     ]);
@@ -143,15 +141,13 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
       $entity->addTranslation('ro', [
         'name' => $i . ' - ro',
         'test_single_property' => $i . ' - test single property - ro',
-        'test_multiple_properties' => [
-          [
-            'value1' => $i . ' - test multiple properties - value1 - ro',
-            'value2' => $i . ' - test multiple properties - value2 - ro',
-          ],
-        ],
+        'test_multiple_properties' => [[
+          'value1' => $i . ' - test multiple properties - value1 - ro',
+          'value2' => $i . ' - test multiple properties - value2 - ro',
+        ]],
         'test_single_property_multiple_values' => [
           ['value' => $i . ' - test single property multiple values 0 - ro'],
-          ['value' => $i . ' - test single property multiple values 1 - ro'],
+          ['value' => $i . ' - test single property multiple values 1 - ro']
         ],
         'test_multiple_properties_multiple_values' => [
           [
@@ -161,7 +157,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
           [
             'value1' => $i . ' - test multiple properties multiple values - value1 1 - ro',
             'value2' => $i . ' - test multiple properties multiple values - value2 1 - ro',
-          ],
+          ]
         ],
         'test_non_rev_field' => $i . ' - test non-revisionable field - ro',
         'field_test_configurable_field' => [
@@ -172,7 +168,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr
           [
             'value1' => $i . ' - field test configurable field - value1 1 - ro',
             'value2' => $i . ' - field test configurable field - value2 1 - ro',
-          ],
+          ]
         ],
         'test_entity_base_field_info' => $i . ' - test entity base field info - ro',
       ]);
diff --git a/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.module b/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.module
index 1f5072085f..ec3ae7f207 100644
--- a/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.module
+++ b/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.module
@@ -5,7 +5,7 @@
  * Experimental Test module to test the Core (Experimental) package.
  */
 
-use Drupal\Core\Routing\RouteMatchInterface;
+use \Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/system/tests/modules/form_test/form_test.routing.yml b/core/modules/system/tests/modules/form_test/form_test.routing.yml
index 9e178cd51a..2250a0bb2f 100644
--- a/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -294,14 +294,6 @@ form_test.checkboxes_radios:
   requirements:
     _access: 'TRUE'
 
-form_test.radios_checked:
-  path: '/form-test/radios-checked'
-  defaults:
-    _form: '\Drupal\form_test\Form\FormTestRadiosCheckedForm'
-    _title: 'Radios checked defalt value'
-  requirements:
-    _access: 'TRUE'
-
 form_test.email:
   path: '/form-test/email'
   defaults:
@@ -497,11 +489,3 @@ form_test.get_form:
     _form: '\Drupal\form_test\Form\FormTestGetForm'
   requirements:
     _access: 'TRUE'
-
-form_test.optional_container:
-  path: '/form-test/optional-container'
-  defaults:
-    _form: '\Drupal\form_test\Form\FormTestOptionalContainerForm'
-    _title: 'Optional container testing'
-  requirements:
-    _access: 'TRUE'
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestInputForgeryForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestInputForgeryForm.php
index 8cdac632d0..c8a82c88b4 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestInputForgeryForm.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestInputForgeryForm.php
@@ -33,29 +33,10 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'submit',
       '#value' => t('Submit'),
     ];
-    $form['#post_render'][] = [static::class, 'postRender'];
 
     return $form;
   }
 
-  /**
-   * Alters the rendered form to simulate input forgery.
-   *
-   * It's necessary to alter the rendered form here because Mink does not
-   * support manipulating the DOM tree.
-   *
-   * @param string $rendered_form
-   *   The rendered form.
-   *
-   * @return string
-   *   The modified rendered form.
-   *
-   * @see \Drupal\Tests\system\Functional\Form\FormTest::testInputForgery()
-   */
-  public static function postRender($rendered_form) {
-    return str_replace('value="two"', 'value="FORGERY"', $rendered_form);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestOptionalContainerForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestOptionalContainerForm.php
deleted file mode 100644
index 7cacf2e20c..0000000000
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestOptionalContainerForm.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace Drupal\form_test\Form;
-
-use Drupal\Core\Form\FormBase;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Builds a simple form to test the #optional property on #type 'container'.
- */
-class FormTestOptionalContainerForm extends FormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'form_test_optional_container';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    // Empty containers.
-    $form['empty_optional'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['empty_optional']],
-      '#optional' => TRUE,
-    ];
-    $form['empty_nonoptional'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['empty_nonoptional']],
-      '#optional' => FALSE,
-    ];
-
-    // Non-empty containers
-    $form['nonempty_optional'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['nonempty_optional']],
-      '#optional' => TRUE,
-    ];
-    $form['nonempty_optional']['child_1'] = [];
-
-    $form['nonempty_nonoptional'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['nonempty_nonoptional']],
-      '#optional' => FALSE,
-    ];
-    $form['nonempty_nonoptional']['child_2'] = [];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-  }
-
-}
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php
deleted file mode 100644
index efb1d4d421..0000000000
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-namespace Drupal\form_test\Form;
-
-use Drupal\Core\Form\FormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Symfony\Component\HttpFoundation\JsonResponse;
-
-/**
- * Form constructor to test #default_value settings of radios.
- */
-class FormTestRadiosCheckedForm extends FormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'form_test_radios_checked';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form['radios'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        0 => 'Zero',
-        'foo' => 'Foo',
-        1 => 'One',
-        'bar' => '<em>Bar - radios</em>',
-        '>' => "<em>Special Char</em><script>alert('radios');</script>",
-      ],
-      '#default_value' => 0,
-    ];
-    $form['radios-string'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        0 => 'Zero',
-        'foo' => 'Foo',
-        1 => 'One',
-        'bar' => '<em>Bar - radios</em>',
-        '>' => "<em>Special Char</em><script>alert('radios');</script>",
-      ],
-      '#default_value' => 'bar',
-    ];
-    $form['radios-boolean-true'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        1 => 'True',
-        0 => 'False',
-      ],
-      '#default_value' => TRUE,
-    ];
-    $form['radios-boolean-false'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        1 => 'True',
-        0 => 'False',
-      ],
-      '#default_value' => FALSE,
-    ];
-    $form['radios-boolean-any'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        1 => 'True',
-        0 => 'False',
-      ],
-      '#default_value' => 'All',
-    ];
-    $form['radios-string-zero'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        '0' => 'Zero',
-        100 => 'One hundred',
-      ],
-      '#default_value' => 0,
-    ];
-    $form['radios-int-non-zero'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        0 => 'Zero',
-        10 => 'Ten',
-        100 => 'One hundred',
-      ],
-      '#default_value' => 10,
-    ];
-    $form['radios-int-non-zero-as-string'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        '0' => 'Zero',
-        '10' => 'Ten',
-        '100' => 'One hundred',
-      ],
-      '#default_value' => '100',
-    ];
-    $form['radios-empty-string'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        0 => 'None',
-      ],
-      '#default_value' => '',
-    ];
-    $form['radios-empty-array'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        0 => 'None',
-      ],
-      '#default_value' => [],
-    ];
-    $form['radios-key-FALSE'] = [
-      '#type' => 'radios',
-      '#title' => 'Radios',
-      '#options' => [
-        'All' => '- Any -',
-        FALSE => 'False',
-      ],
-      '#default_value' => '',
-    ];
-
-    $form['submit'] = ['#type' => 'submit', '#value' => 'Submit'];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $form_state->setResponse(new JsonResponse($form_state->getValues()));
-  }
-
-}
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php
index a922d2a86f..20242ec2eb 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php
@@ -115,14 +115,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#multiple' => TRUE,
     ];
 
-    $form['opt_groups'] = [
-      '#type' => 'select',
-      '#options' => [
-        'optgroup_one' => ['one' => 'one', 'two' => 'two', 'three' => 'three', 'four' => '<strong>four</strong>'],
-        'optgroup_two' => ['five' => 'five', 'six' => 'six'],
-      ],
-    ];
-
     $form['submit'] = ['#type' => 'submit', '#value' => 'Submit'];
     return $form;
   }
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php
index 55e86497ee..9245662e4d 100644
--- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php
@@ -10,4 +10,4 @@
  *   title = @Translation("A dummy toolkit, derivative of 'test'.")
  * )
  */
-class DerivedToolkit extends TestToolkit {}
+class DerivedToolkit extends TestToolkit { }
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php
index ecd4aaafde..eac11b8e46 100644
--- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php
@@ -13,4 +13,4 @@
  *   description = @Translation("Bar.")
  * )
  */
-class Bar extends OperationBase {}
+class Bar extends OperationBase { }
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php
index 3b067d5919..ff05f9b57b 100644
--- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php
@@ -13,4 +13,4 @@
  *   description = @Translation("Foo.")
  * )
  */
-class Foo extends OperationBase {}
+class Foo extends OperationBase { }
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php
index bf38dfddf5..818a414e37 100644
--- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php
@@ -13,4 +13,4 @@
  *   description = @Translation("Foo derived.")
  * )
  */
-class FooDerived extends OperationBase {}
+class FooDerived extends OperationBase { }
diff --git a/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module b/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module
index 4316719dd3..1e7da67fad 100644
--- a/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module
+++ b/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module
@@ -14,6 +14,5 @@ function keyvalue_test_entity_type_alter(array &$entity_types) {
     $entity_types['entity_test_label']->setStorageClass('Drupal\Core\Entity\KeyValueStore\KeyValueContentEntityStorage');
     $entity_keys = $entity_types['entity_test_label']->getKeys();
     $entity_types['entity_test_label']->set('entity_keys', $entity_keys + ['uuid' => 'uuid']);
-    $entity_types['entity_test_label']->set('provider', 'keyvalue_test');
   }
 }
diff --git a/core/modules/system/tests/modules/plugin_test/src/Plugin/MockBlockManager.php b/core/modules/system/tests/modules/plugin_test/src/Plugin/MockBlockManager.php
index 443ab5d040..8748a7b943 100644
--- a/core/modules/system/tests/modules/plugin_test/src/Plugin/MockBlockManager.php
+++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/MockBlockManager.php
@@ -127,7 +127,7 @@ public function __construct() {
    *
    * @param string $data_type
    *   The required data type.
-   * @param mixed|string|null $label
+   * @param mixed string|null $label
    *   The label of this context definition for the UI.
    * @param bool $required
    *   Whether the context definition is required.
diff --git a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php
index c6924974f6..a42a474ed5 100644
--- a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php
+++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php
@@ -11,4 +11,4 @@
  *   color = "pink",
  * )
  */
-class ExtendingNonInstalledClass extends YummyFruit {}
+class ExtendingNonInstalledClass extends YummyFruit { }
diff --git a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php
index cbd0f88baf..62e0c38aeb 100644
--- a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php
+++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php
@@ -5,4 +5,4 @@
 /**
  * Provides an interface for test plugins.
  */
-interface FruitInterface {}
+interface FruitInterface { }
diff --git a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
index e754eaf0c2..2de84e9593 100644
--- a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
+++ b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
@@ -1,9 +1,6 @@
 <?php
 
 namespace Drupal\test_page_test\Controller;
-
-use Drupal\Core\Url;
-use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 
 /**
@@ -111,16 +108,4 @@ public function renderPipeInLink() {
     return ['#markup' => '<a href="http://example.com">foo|bar|baz</a>'];
   }
 
-  /**
-   * Loads a page that does a redirect.
-   *
-   * Drupal uses Symfony's RedirectResponse for generating redirects. That class
-   * uses a lower-case 'http-equiv="refresh"'.
-   *
-   * @see \Symfony\Component\HttpFoundation\RedirectResponse
-   */
-  public function metaRefresh() {
-    return new RedirectResponse(Url::fromRoute('test_page_test.test_page', [], ['absolute' => TRUE])->toString(), 302);
-  }
-
 }
diff --git a/core/modules/system/tests/modules/test_page_test/src/Form/TestForm.php b/core/modules/system/tests/modules/test_page_test/src/Form/TestForm.php
index 55b1b18678..24a9bdb58b 100644
--- a/core/modules/system/tests/modules/test_page_test/src/Form/TestForm.php
+++ b/core/modules/system/tests/modules/test_page_test/src/Form/TestForm.php
@@ -64,24 +64,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#default_value' => 2,
     ];
 
-    $form['duplicate_button'] = [
-      '#type' => 'submit',
-      '#name' => 'duplicate_button',
-      '#value' => 'Duplicate button 1',
-    ];
-
-    $form['duplicate_button_2'] = [
-      '#type' => 'submit',
-      '#name' => 'duplicate_button',
-      '#value' => 'Duplicate button 2',
-    ];
-
-    $form['test_textarea_with_newline'] = [
-      '#type' => 'textarea',
-      '#title' => 'Textarea with newline',
-      '#default_value' => "Test text with\nnewline",
-    ];
-
     $form['save'] = [
       '#type' => 'submit',
       '#value' => $this->t('Save'),
diff --git a/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml b/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
index e64a88d003..5d84695f8b 100644
--- a/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
+++ b/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
@@ -82,11 +82,3 @@ test_page_test.field_xpath:
     _form: '\Drupal\test_page_test\Form\TestForm'
   requirements:
     _access: 'TRUE'
-
-test_page_test.meta_refresh:
-  path: '/test-meta-refresh'
-  defaults:
-    _title: 'Page with a redirect'
-    _controller: '\Drupal\test_page_test\Controller\Test::metaRefresh'
-  requirements:
-    _access: 'TRUE'
diff --git a/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php b/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
index 3772f3a97b..df33102811 100644
--- a/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
+++ b/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
@@ -74,7 +74,9 @@ public function testNodeHandler() {
     $selection_options = [
       'target_type' => 'node',
       'handler' => 'default',
-      'target_bundles' => NULL,
+      'handler_settings' => [
+        'target_bundles' => NULL,
+      ],
     ];
 
     // Build a set of test data.
@@ -198,8 +200,10 @@ public function testUserHandler() {
     $selection_options = [
       'target_type' => 'user',
       'handler' => 'default',
-      'target_bundles' => NULL,
-      'include_anonymous' => TRUE,
+      'handler_settings' => [
+        'target_bundles' => NULL,
+        'include_anonymous' => TRUE,
+      ],
     ];
 
     // Build a set of test data.
@@ -318,7 +322,7 @@ public function testUserHandler() {
     $this->assertReferenceable($selection_options, $referenceable_tests, 'User handler (admin)');
 
     // Test the 'include_anonymous' option.
-    $selection_options['include_anonymous'] = FALSE;
+    $selection_options['handler_settings']['include_anonymous'] = FALSE;
     $referenceable_tests = [
       [
         'arguments' => [
@@ -357,7 +361,9 @@ public function testCommentHandler() {
     $selection_options = [
       'target_type' => 'comment',
       'handler' => 'default',
-      'target_bundles' => NULL,
+      'handler_settings' => [
+        'target_bundles' => NULL,
+      ],
     ];
 
     // Build a set of test data.
diff --git a/core/modules/system/tests/src/Functional/FileTransfer/FileTransferTest.php b/core/modules/system/tests/src/Functional/FileTransfer/FileTransferTest.php
index 04b1f66361..76d8be8009 100644
--- a/core/modules/system/tests/src/Functional/FileTransfer/FileTransferTest.php
+++ b/core/modules/system/tests/src/Functional/FileTransfer/FileTransferTest.php
@@ -60,7 +60,7 @@ public function _writeDirectory($base, $files = []) {
         $this->_writeDirectory($base . DIRECTORY_SEPARATOR . $key, $file);
       }
       else {
-        // just write the filename into the file
+        //just write the filename into the file
         file_put_contents($base . DIRECTORY_SEPARATOR . $file, $file);
       }
     }
diff --git a/core/modules/system/tests/src/Functional/Form/ElementsContainerTest.php b/core/modules/system/tests/src/Functional/Form/ElementsContainerTest.php
deleted file mode 100644
index a7d404b86b..0000000000
--- a/core/modules/system/tests/src/Functional/Form/ElementsContainerTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\Functional\Form;
-
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * Tests the container form element for expected behavior.
- *
- * @group Form
- */
-class ElementsContainerTest extends BrowserTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['form_test'];
-
-  /**
-   * Tests the #optional container property.
-   */
-  public function testOptionalContainerElements() {
-    $this->drupalGet('form-test/optional-container');
-    $assertSession = $this->assertSession();
-    $assertSession->elementNotExists('css', 'div.empty_optional');
-    $assertSession->elementExists('css', 'div.empty_nonoptional');
-    $assertSession->elementExists('css', 'div.nonempty_optional');
-    $assertSession->elementExists('css', 'div.nonempty_nonoptional');
-  }
-
-}
diff --git a/core/modules/system/tests/src/Functional/Menu/AssertBreadcrumbTrait.php b/core/modules/system/tests/src/Functional/Menu/AssertBreadcrumbTrait.php
deleted file mode 100644
index fd0dc7cf56..0000000000
--- a/core/modules/system/tests/src/Functional/Menu/AssertBreadcrumbTrait.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\Functional\Menu;
-
-use Drupal\Component\Utility\Html;
-use Drupal\Core\Url;
-
-/**
- * Provides test assertions for verifying breadcrumbs.
- */
-trait AssertBreadcrumbTrait {
-
-  use AssertMenuActiveTrailTrait;
-
-  /**
-   * Assert that a given path shows certain breadcrumb links.
-   *
-   * @param \Drupal\Core\Url|string $goto
-   *   (optional) A path or URL to pass to
-   *   Drupal\simpletest\WebTestBase::drupalGet().
-   * @param array $trail
-   *   An associative array whose keys are expected breadcrumb link paths and
-   *   whose values are expected breadcrumb link texts (not sanitized).
-   * @param string $page_title
-   *   (optional) A page title to additionally assert via
-   *   Drupal\simpletest\WebTestBase::assertTitle(). Without site name suffix.
-   * @param array $tree
-   *   (optional) An associative array whose keys are link paths and whose
-   *   values are link titles (not sanitized) of an expected active trail in a
-   *   menu tree output on the page.
-   * @param $last_active
-   *   (optional) Whether the last link in $tree is expected to be active (TRUE)
-   *   or just to be in the active trail (FALSE).
-   */
-  protected function assertBreadcrumb($goto, array $trail, $page_title = NULL, array $tree = [], $last_active = TRUE) {
-    if (isset($goto)) {
-      $this->drupalGet($goto);
-    }
-    $this->assertBreadcrumbParts($trail);
-
-    // Additionally assert page title, if given.
-    if (isset($page_title)) {
-      $this->assertTitle(strtr('@title | Drupal', ['@title' => $page_title]));
-    }
-
-    // Additionally assert active trail in a menu tree output, if given.
-    if ($tree) {
-      $this->assertMenuActiveTrail($tree, $last_active);
-    }
-  }
-
-  /**
-   * Assert that a trail exists in the internal browser.
-   *
-   * @param array $trail
-   *   An associative array whose keys are expected breadcrumb link paths and
-   *   whose values are expected breadcrumb link texts (not sanitized).
-   */
-  protected function assertBreadcrumbParts($trail) {
-    // Compare paths with actual breadcrumb.
-    $parts = $this->getBreadcrumbParts();
-    $pass = TRUE;
-    // There may be more than one breadcrumb on the page. If $trail is empty
-    // this test would go into an infinite loop, so we need to check that too.
-    while ($trail && !empty($parts)) {
-      foreach ($trail as $path => $title) {
-        // If the path is empty, generate the path from the <front> route.  If
-        // the path does not start with a leading slash, then run it through
-        // Url::fromUri('base:')->toString() to get the correct base
-        // prepended.
-        if ($path == '') {
-          $url = Url::fromRoute('<front>')->toString();
-        }
-        elseif ($path[0] != '/') {
-          $url = Url::fromUri('base:' . $path)->toString();
-        }
-        else {
-          $url = $path;
-        }
-        $part = array_shift($parts);
-        $pass = ($pass && $part['href'] === $url && $part['text'] === Html::escape($title));
-      }
-    }
-    // No parts must be left, or an expected "Home" will always pass.
-    $pass = ($pass && empty($parts));
-
-    $this->assertTrue($pass, format_string('Breadcrumb %parts found on @path.', [
-      '%parts' => implode(' » ', $trail),
-      '@path' => $this->getUrl(),
-    ]));
-  }
-
-  /**
-   * Returns the breadcrumb contents of the current page in the internal browser.
-   */
-  protected function getBreadcrumbParts() {
-    $parts = [];
-    $elements = $this->xpath('//nav[@class="breadcrumb"]/ol/li/a');
-    if (!empty($elements)) {
-      foreach ($elements as $element) {
-        $parts[] = [
-          'text' => $element->getText(),
-          'href' => $element->getAttribute('href'),
-          'title' => $element->getAttribute('title'),
-        ];
-      }
-    }
-    return $parts;
-  }
-
-}
diff --git a/core/modules/system/tests/src/Functional/Menu/AssertMenuActiveTrailTrait.php b/core/modules/system/tests/src/Functional/Menu/AssertMenuActiveTrailTrait.php
deleted file mode 100644
index c5d60e5427..0000000000
--- a/core/modules/system/tests/src/Functional/Menu/AssertMenuActiveTrailTrait.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\Functional\Menu;
-
-use Drupal\Core\Url;
-
-/**
- * Provides test assertions for verifying the active menu trail.
- */
-trait AssertMenuActiveTrailTrait {
-
-  /**
-   * Assert that active trail exists in a menu tree output.
-   *
-   * @param array $tree
-   *   An associative array whose keys are link paths and whose
-   *   values are link titles (not sanitized) of an expected active trail in a
-   *   menu tree output on the page.
-   * @param bool $last_active
-   *   Whether the last link in $tree is expected to be active (TRUE)
-   *   or just to be in the active trail (FALSE).
-   */
-  protected function assertMenuActiveTrail($tree, $last_active) {
-    end($tree);
-    $active_link_path = key($tree);
-    $active_link_title = array_pop($tree);
-    $xpath = '';
-    if ($tree) {
-      $i = 0;
-      foreach ($tree as $link_path => $link_title) {
-        $part_xpath = (!$i ? '//' : '/following-sibling::ul/descendant::');
-        $part_xpath .= 'li[contains(@class, :class)]/a[contains(@href, :href) and contains(text(), :title)]';
-        $part_args = [
-          ':class' => 'menu-item--active-trail',
-          ':href' => Url::fromUri('base:' . $link_path)->toString(),
-          ':title' => $link_title,
-        ];
-        $xpath .= $this->buildXPathQuery($part_xpath, $part_args);
-        $i++;
-      }
-      $elements = $this->xpath($xpath);
-      $this->assertTrue(!empty($elements), 'Active trail to current page was found in menu tree.');
-
-      // Append prefix for active link asserted below.
-      $xpath .= '/following-sibling::ul/descendant::';
-    }
-    else {
-      $xpath .= '//';
-    }
-    $xpath_last_active = ($last_active ? 'and contains(@class, :class-active)' : '');
-    $xpath .= 'li[contains(@class, :class-trail)]/a[contains(@href, :href) ' . $xpath_last_active . 'and contains(text(), :title)]';
-    $args = [
-      ':class-trail' => 'menu-item--active-trail',
-      ':class-active' => 'is-active',
-      ':href' => Url::fromUri('base:' . $active_link_path)->toString(),
-      ':title' => $active_link_title,
-    ];
-    $elements = $this->xpath($xpath, $args);
-    $this->assertTrue(!empty($elements), format_string('Active link %title was found in menu tree, including active trail links %tree.', [
-      '%title' => $active_link_title,
-      '%tree' => implode(' » ', $tree),
-    ]));
-  }
-
-}
diff --git a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
index abdbe03916..392f2875e6 100644
--- a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
+++ b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
@@ -87,10 +87,8 @@ public function assertModuleTablesDoNotExist($module) {
    * @param string $module
    *   The name of the module.
    *
-   * @return bool|null
-   *   TRUE if configuration has been installed, FALSE otherwise. Returns NULL
-   *   if the module configuration directory does not exist or does not contain
-   *   any configuration files.
+   * @return bool
+   *   TRUE if configuration has been installed, FALSE otherwise.
    */
   public function assertModuleConfig($module) {
     $module_config_dir = drupal_get_path('module', $module) . '/' . InstallStorage::CONFIG_INSTALL_DIRECTORY;
diff --git a/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php b/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php
index e372bb262a..534f614980 100644
--- a/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php
@@ -66,11 +66,11 @@ public function testStylesheets() {
     // should work nevertheless.
     $this->drupalGet('theme-test/info/stylesheets');
 
-    $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$base/base-add.css"])), "$base/base-add.css found");
-    $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "base-remove.css"])), "base-remove.css not found");
+    $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href'  => "$base/base-add.css"])), "$base/base-add.css found");
+    $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href'  => "base-remove.css"])), "base-remove.css not found");
 
-    $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$sub/sub-add.css"])), "$sub/sub-add.css found");
-    $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "sub-remove.css"])), "sub-remove.css not found");
+    $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href'  => "$sub/sub-add.css"])), "$sub/sub-add.css found");
+    $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href'  => "sub-remove.css"])), "sub-remove.css not found");
     $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "base-add.sub-remove.css"])), "base-add.sub-remove.css not found");
 
     // Verify that CSS files with the same name are loaded from both the base theme and subtheme.
diff --git a/core/modules/system/tests/src/Functional/Update/DbUpdatesTrait.php b/core/modules/system/tests/src/Functional/Update/DbUpdatesTrait.php
deleted file mode 100644
index 55f3a04a5a..0000000000
--- a/core/modules/system/tests/src/Functional/Update/DbUpdatesTrait.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\Functional\Update;
-
-use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\Core\Url;
-
-/**
- * Provides methods to conditionally enable db update functions and apply
- * pending db updates through the Update UI.
- *
- * This should be used only by classes extending \Drupal\Tests\BrowserTestBase.
- */
-trait DbUpdatesTrait {
-
-  use StringTranslationTrait;
-
-  /**
-   * Enables db updates until the specified index.
-   *
-   * @param string $module
-   *   The name of the module defining the update functions.
-   * @param string $group
-   *   A name identifying the group of update functions to enable.
-   * @param $index
-   *   The index of the last update function to run.
-   */
-  protected function enableUpdates($module, $group, $index) {
-    $this->container->get('state')->set($module . '.db_updates.' . $group, $index);
-  }
-
-  /**
-   * Applies any pending DB updates through the Update UI.
-   */
-  protected function applyUpdates() {
-    $this->drupalGet(Url::fromRoute('system.db_update'));
-    $this->clickLink($this->t('Continue'));
-    $this->clickLink($this->t('Apply pending updates'));
-    $this->checkForMetaRefresh();
-  }
-
-  /**
-   * Conditionally load Update API functions for the specified group.
-   *
-   * @param string $module
-   *   The name of the module defining the update functions.
-   * @param string $group
-   *   A name identifying the group of update functions to enable.
-   */
-  public static function includeUpdates($module, $group) {
-    if ($index = \Drupal::state()->get($module . '.db_updates.' . $group)) {
-      module_load_include('inc', $module, 'update/' . $group . '_' . $index);
-    }
-  }
-
-}
diff --git a/core/modules/system/tests/src/FunctionalJavascript/ThemeFormSettingsTest.php b/core/modules/system/tests/src/FunctionalJavascript/ThemeFormSettingsTest.php
deleted file mode 100644
index 8e4729fe33..0000000000
--- a/core/modules/system/tests/src/FunctionalJavascript/ThemeFormSettingsTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\FunctionalJavascript;
-
-use Drupal\file\Entity\File;
-use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
-use Drupal\Tests\TestFileCreationTrait;
-
-/**
- * Tests that theme form settings works correctly.
- *
- * @group system
- */
-class ThemeFormSettingsTest extends JavascriptTestBase {
-
-  use TestFileCreationTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['file'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $admin = $this->drupalCreateUser(['administer themes']);
-    $this->drupalLogin($admin);
-  }
-
-  /**
-   * Tests that submission handler works correctly.
-   *
-   * @dataProvider providerTestFormSettingsSubmissionHandler
-   */
-  public function testFormSettingsSubmissionHandler($theme) {
-
-    \Drupal::service('theme_handler')->install([$theme]);
-
-    $page = $this->getSession()->getPage();
-    $assert_session = $this->assertSession();
-
-    $this->drupalGet("admin/appearance/settings/$theme");
-
-    // Add a new managed file.
-    $file = current($this->getTestFiles('image'));
-    $image_file_path = \Drupal::service('file_system')->realpath($file->uri);
-    $page->attachFileToField('files[custom_logo]', $image_file_path);
-    $assert_session->waitForButton('custom_logo_remove_button');
-
-    // Assert the new file is uploaded as temporary. This file should not be
-    // saved as permanent if settings are not submited.
-    $image_field = $this->xpath('//input[@name="custom_logo[fids]"]')[0];
-    $file = File::load($image_field->getValue());
-    $this->assertFalse($file->isPermanent());
-
-    $page->pressButton('Save configuration');
-    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
-
-    // Assert the uploaded file is saved as permanent.
-    $image_field = $this->xpath('//input[@name="custom_logo[fids]"]')[0];
-    $file = File::load($image_field->getValue());
-    $this->assertTrue($file->isPermanent());
-  }
-
-  /**
-   * Provides test data for ::testFormSettingsSubmissionHandler().
-   */
-  public function providerTestFormSettingsSubmissionHandler() {
-    return [
-      'test theme.theme' => ['test_theme_theme'],
-      'test theme-settings.php' => ['test_theme_settings'],
-    ];
-  }
-
-}
diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
index d7c2650353..5fc9d83732 100644
--- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
@@ -3,7 +3,7 @@
 namespace Drupal\Tests\system\Kernel\Extension;
 
 use Drupal\Core\Extension\MissingDependencyException;
-use Drupal\Core\Extension\ModuleUninstallValidatorException;
+use \Drupal\Core\Extension\ModuleUninstallValidatorException;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\KernelTests\KernelTestBase;
 
diff --git a/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php b/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php
deleted file mode 100644
index f3591538c8..0000000000
--- a/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace Drupal\Tests\system\Kernel\Installer;
-
-use Drupal\KernelTests\KernelTestBase;
-
-/**
- * Tests the uninstallation of modules.
- *
- * @group Module
- */
-class UninstallKernelTest extends KernelTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['system', 'user', 'field', 'file', 'image', 'media'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installSchema('user', ['users_data']);
-    $this->installEntitySchema('media');
-    $this->installEntitySchema('file');
-    $this->installConfig(['media']);
-  }
-
-  /**
-   * Tests uninstalling media and file modules.
-   */
-  public function testUninstallMedia() {
-    // Media creates a file field that is removed on uninstall, ensure that it
-    // is fully deleted (as it is empty) and that file then can be uninstalled
-    // as well.
-    \Drupal::service('module_installer')->uninstall(['media']);
-    \Drupal::service('module_installer')->uninstall(['file']);
-  }
-
-}
diff --git a/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php b/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php
index cfa51fa3b1..c632a3e553 100644
--- a/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php
+++ b/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php
@@ -61,13 +61,10 @@ public function testSystemAdminLocalTasks($route, $expected) {
   public function getSystemAdminRoutes() {
     return [
       ['system.admin_content', [['system.admin_content']]],
-      [
-        'system.theme_settings_theme',
-        [
-          ['system.themes_page', 'system.theme_settings'],
-          ['system.theme_settings_global', 'system.theme_settings_theme:bartik'],
-        ],
-      ],
+      ['system.theme_settings_theme', [
+        ['system.themes_page', 'system.theme_settings'],
+        ['system.theme_settings_global', 'system.theme_settings_theme:bartik'],
+      ]],
     ];
   }
 
diff --git a/core/modules/system/tests/themes/test_theme/src/ThemeClass.php b/core/modules/system/tests/themes/test_theme/src/ThemeClass.php
index f0f080381d..af5109a057 100644
--- a/core/modules/system/tests/themes/test_theme/src/ThemeClass.php
+++ b/core/modules/system/tests/themes/test_theme/src/ThemeClass.php
@@ -5,4 +5,4 @@
 /**
  * Represents a random class, used to test if themes can provide classes.
  */
-class ThemeClass {}
+class ThemeClass { }
diff --git a/core/modules/system/tests/themes/test_theme_settings/config/schema/test_theme_settings.schema.yml b/core/modules/system/tests/themes/test_theme_settings/config/schema/test_theme_settings.schema.yml
deleted file mode 100644
index a53e94a0c5..0000000000
--- a/core/modules/system/tests/themes/test_theme_settings/config/schema/test_theme_settings.schema.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Schema for the configuration files of the Test theme settings.
-
-test_theme_settings.settings:
-  type: theme_settings
-  label: 'Test theme settings'
-  mapping:
-    custom_logo:
-      type: sequence
-      label: 'Custom logo'
-      sequence:
-        type: integer
-        label: 'fids'
diff --git a/core/modules/system/tests/themes/test_theme_settings/test_theme_settings.info.yml b/core/modules/system/tests/themes/test_theme_settings/test_theme_settings.info.yml
deleted file mode 100644
index 38dd300e71..0000000000
--- a/core/modules/system/tests/themes/test_theme_settings/test_theme_settings.info.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: 'Theme test theme-settings.php'
-type: theme
-description: 'Test theme that extends theme settings options via theme-settings.php file'
-version: VERSION
-core: 8.x
-base theme: false
diff --git a/core/modules/system/tests/themes/test_theme_settings/theme-settings.php b/core/modules/system/tests/themes/test_theme_settings/theme-settings.php
deleted file mode 100644
index 7f3c1395f9..0000000000
--- a/core/modules/system/tests/themes/test_theme_settings/theme-settings.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Test to ensure theme compatibility with managed files.
- */
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\file\Entity\File;
-
-/**
- * Implements hook_form_system_theme_settings_alter().
- */
-function test_theme_settings_form_system_theme_settings_alter(&$form, FormStateInterface $form_state) {
-  $form['custom_logo'] = [
-    '#type' => 'managed_file',
-    '#title' => t('Secondary logo.'),
-    '#default_value' => theme_get_setting('custom_logo'),
-    '#progress_indicator' => 'bar',
-    '#progress_message'   => t('Please wait...'),
-    '#upload_location' => 'public://test',
-    '#upload_validators'  => [
-      'file_validate_extensions' => ['gif png jpg jpeg'],
-    ],
-  ];
-
-  $form['#submit'][] = 'test_theme_settings_form_system_theme_settings_submit';
-}
-
-/**
- * Test theme form settings submission handler.
- */
-function test_theme_settings_form_system_theme_settings_submit(&$form, FormStateInterface $form_state) {
-  if ($file_id = $form_state->getValue(['custom_logo', '0'])) {
-    $file = File::load($file_id);
-    $file->setPermanent();
-    $file->save();
-  }
-}
diff --git a/core/modules/system/tests/themes/test_theme_theme/config/schema/test_theme_theme.schema.yml b/core/modules/system/tests/themes/test_theme_theme/config/schema/test_theme_theme.schema.yml
deleted file mode 100644
index fcd044edd7..0000000000
--- a/core/modules/system/tests/themes/test_theme_theme/config/schema/test_theme_theme.schema.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Schema for the configuration files of the Test theme theme.
-
-test_theme_theme.settings:
-  type: theme_settings
-  label: 'Test theme settings'
-  mapping:
-    custom_logo:
-      type: sequence
-      label: 'Custom logo'
-      sequence:
-        type: integer
-        label: 'fids'
diff --git a/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.info.yml b/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.info.yml
deleted file mode 100644
index c67a4be2c5..0000000000
--- a/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.info.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: 'Theme test theme.theme file'
-type: theme
-description: 'Test theme that extends theme settings options via theme.theme file'
-version: VERSION
-core: 8.x
-base theme: false
diff --git a/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.theme b/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.theme
deleted file mode 100644
index 937494f101..0000000000
--- a/core/modules/system/tests/themes/test_theme_theme/test_theme_theme.theme
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * @file
- * Test to ensure theme compatibility with managed files.
- */
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\file\Entity\File;
-
-/**
- * Implements hook_form_system_theme_settings_alter().
- */
-function test_theme_theme_form_system_theme_settings_alter(&$form, FormStateInterface $form_state) {
-
-  $form['custom_logo'] = [
-    '#type' => 'managed_file',
-    '#title' => t('Secondary logo.'),
-    '#default_value' => theme_get_setting('custom_logo'),
-    '#progress_indicator' => 'bar',
-    '#progress_message'   => t('Please wait...'),
-    '#upload_location' => 'public://test',
-    '#upload_validators'  => [
-      'file_validate_extensions' => ['gif png jpg jpeg'],
-    ],
-  ];
-
-  $form['#submit'][] = 'test_theme_theme_form_system_theme_settings_submit';
-}
-
-/**
- * Test theme form settings submission handler.
- */
-function test_theme_theme_form_system_theme_settings_submit(&$form, FormStateInterface $form_state) {
-  if ($file_id = $form_state->getValue(['custom_logo', '0'])) {
-    $file = File::load($file_id);
-    $file->setPermanent();
-    $file->save();
-  }
-}
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
index 7f3fea8a91..e0f462531b 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
@@ -44,11 +44,6 @@ process:
     -
       plugin: substr
       length: 32
-    -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
-      plugin: forum_vocabulary
 destination:
   plugin: component_entity_display
 migration_dependencies:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
index 607e735be1..20bb0e40c9 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
@@ -48,11 +48,6 @@ process:
     -
       plugin: substr
       length: 32
-    -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
-      plugin: forum_vocabulary
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
index 264655555c..bb4a94223f 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
@@ -32,11 +32,6 @@ process:
     -
       plugin: substr
       length: 32
-    -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
-      plugin: forum_vocabulary
   'settings/target_type': 'constants/target_entity_type'
   cardinality: cardinality
 destination:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
index f49456d5fe..6d9ffa63f9 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
@@ -39,11 +39,6 @@ process:
     -
       plugin: substr
       length: 32
-    -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
-      plugin: forum_vocabulary
   label: name
   'settings/handler': 'constants/selection_handler'
   'settings/handler_settings/target_bundles/0': '@field_name'
diff --git a/core/modules/taxonomy/migration_templates/taxonomy_settings.yml b/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
index 28505db58a..c20372c690 100644
--- a/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
+++ b/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
@@ -8,7 +8,6 @@ source:
   variables:
     - taxonomy_override_selector
     - taxonomy_terms_per_page_admin
-  source_module: taxonomy
 process:
   override_selector: taxonomy_override_selector
   terms_per_page_admin: taxonomy_terms_per_page_admin
diff --git a/core/modules/taxonomy/src/Entity/Term.php b/core/modules/taxonomy/src/Entity/Term.php
index 2e70a1cf7d..03491ab962 100644
--- a/core/modules/taxonomy/src/Entity/Term.php
+++ b/core/modules/taxonomy/src/Entity/Term.php
@@ -20,7 +20,6 @@
  *     "storage" = "Drupal\taxonomy\TermStorage",
  *     "storage_schema" = "Drupal\taxonomy\TermStorageSchema",
  *     "view_builder" = "Drupal\taxonomy\TermViewBuilder",
- *     "list_builder" = "Drupal\Core\Entity\EntityListBuilder",
  *     "access" = "Drupal\taxonomy\TermAccessControlHandler",
  *     "views_data" = "Drupal\taxonomy\TermViewsData",
  *     "form" = {
diff --git a/core/modules/taxonomy/src/Entity/Vocabulary.php b/core/modules/taxonomy/src/Entity/Vocabulary.php
index d61294b4e3..b0d1ac13d2 100644
--- a/core/modules/taxonomy/src/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/src/Entity/Vocabulary.php
@@ -15,7 +15,6 @@
  *   handlers = {
  *     "storage" = "Drupal\taxonomy\VocabularyStorage",
  *     "list_builder" = "Drupal\taxonomy\VocabularyListBuilder",
- *     "access" = "Drupal\taxonomy\VocabularyAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\taxonomy\VocabularyForm",
  *       "reset" = "Drupal\taxonomy\Form\VocabularyResetForm",
diff --git a/core/modules/taxonomy/src/Form/OverviewTerms.php b/core/modules/taxonomy/src/Form/OverviewTerms.php
index d73598d672..3811ee5fd8 100644
--- a/core/modules/taxonomy/src/Form/OverviewTerms.php
+++ b/core/modules/taxonomy/src/Form/OverviewTerms.php
@@ -2,13 +2,10 @@
 
 namespace Drupal\taxonomy\Form;
 
-use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\RendererInterface;
-use Drupal\Core\Url;
 use Drupal\taxonomy\VocabularyInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -38,20 +35,6 @@ class OverviewTerms extends FormBase {
    */
   protected $storageController;
 
-  /**
-   * The term list builder.
-   *
-   * @var \Drupal\Core\Entity\EntityListBuilderInterface
-   */
-  protected $termListBuilder;
-
-  /**
-   * The renderer service.
-   *
-   * @var \Drupal\Core\Render\RendererInterface
-   */
-  protected $renderer;
-
   /**
    * Constructs an OverviewTerms object.
    *
@@ -59,15 +42,11 @@ class OverviewTerms extends FormBase {
    *   The module handler service.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
-   * @param \Drupal\Core\Render\RendererInterface $renderer
-   *   The renderer service.
    */
-  public function __construct(ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager, RendererInterface $renderer = NULL) {
+  public function __construct(ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager) {
     $this->moduleHandler = $module_handler;
     $this->entityManager = $entity_manager;
     $this->storageController = $entity_manager->getStorage('taxonomy_term');
-    $this->termListBuilder = $entity_manager->getListBuilder('taxonomy_term');
-    $this->renderer = $renderer ?: \Drupal::service('renderer');
   }
 
   /**
@@ -76,8 +55,7 @@ public function __construct(ModuleHandlerInterface $module_handler, EntityManage
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('module_handler'),
-      $container->get('entity.manager'),
-      $container->get('renderer')
+      $container->get('entity.manager')
     );
   }
 
@@ -226,28 +204,17 @@ public function buildForm(array $form, FormStateInterface $form_state, Vocabular
     }
 
     $errors = $form_state->getErrors();
+    $destination = $this->getDestinationArray();
     $row_position = 0;
     // Build the actual form.
-    $access_control_handler = $this->entityManager->getAccessControlHandler('taxonomy_term');
-    $create_access = $access_control_handler->createAccess($taxonomy_vocabulary->id(), NULL, [], TRUE);
-    if ($create_access->isAllowed()) {
-      $empty = $this->t('No terms available. <a href=":link">Add term</a>.', [':link' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $taxonomy_vocabulary->id()])->toString()]);
-    }
-    else {
-      $empty = $this->t('No terms available.');
-    }
     $form['terms'] = [
       '#type' => 'table',
-      '#empty' => $empty,
+      '#header' => [$this->t('Name'), $this->t('Weight'), $this->t('Operations')],
+      '#empty' => $this->t('No terms available. <a href=":link">Add term</a>.', [':link' => $this->url('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $taxonomy_vocabulary->id()])]),
       '#attributes' => [
         'id' => 'taxonomy',
       ],
     ];
-    $this->renderer->addCacheableDependency($form['terms'], $create_access);
-
-    // Only allow access to changing weights if the user has update access for
-    // all terms.
-    $change_weight_access = AccessResult::allowed();
     foreach ($current_page as $key => $term) {
       /** @var $term \Drupal\Core\Entity\EntityInterface */
       $term = $this->entityManager->getTranslationFromContext($term);
@@ -293,26 +260,39 @@ public function buildForm(array $form, FormStateInterface $form_state, Vocabular
           ],
         ];
       }
-      $update_access = $term->access('update', NULL, TRUE);
-      $change_weight_access = $change_weight_access->andIf($update_access);
-
-      if ($update_access->isAllowed()) {
-        $form['terms'][$key]['weight'] = [
-          '#type' => 'weight',
-          '#delta' => $delta,
-          '#title' => $this->t('Weight for added term'),
-          '#title_display' => 'invisible',
-          '#default_value' => $term->getWeight(),
-          '#attributes' => ['class' => ['term-weight']],
-        ];
-      }
-
-      if ($operations = $this->termListBuilder->getOperations($term)) {
-        $form['terms'][$key]['operations'] = [
-          '#type' => 'operations',
-          '#links' => $operations,
+      $form['terms'][$key]['weight'] = [
+        '#type' => 'weight',
+        '#delta' => $delta,
+        '#title' => $this->t('Weight for added term'),
+        '#title_display' => 'invisible',
+        '#default_value' => $term->getWeight(),
+        '#attributes' => [
+          'class' => ['term-weight'],
+        ],
+      ];
+      $operations = [
+        'edit' => [
+          'title' => $this->t('Edit'),
+          'query' => $destination,
+          'url' => $term->urlInfo('edit-form'),
+        ],
+        'delete' => [
+          'title' => $this->t('Delete'),
+          'query' => $destination,
+          'url' => $term->urlInfo('delete-form'),
+        ],
+      ];
+      if ($this->moduleHandler->moduleExists('content_translation') && content_translation_translate_access($term)->isAllowed()) {
+        $operations['translate'] = [
+          'title' => $this->t('Translate'),
+          'query' => $destination,
+          'url' => $term->urlInfo('drupal:content-translation-overview'),
         ];
       }
+      $form['terms'][$key]['operations'] = [
+        '#type' => 'operations',
+        '#links' => $operations,
+      ];
 
       $form['terms'][$key]['#attributes']['class'] = [];
       if ($parent_fields) {
@@ -342,42 +322,34 @@ public function buildForm(array $form, FormStateInterface $form_state, Vocabular
       $row_position++;
     }
 
-    $form['terms']['#header'] = [$this->t('Name')];
-
-    $this->renderer->addCacheableDependency($form['terms'], $change_weight_access);
-    if ($change_weight_access->isAllowed()) {
-      $form['terms']['#header'][] = $this->t('Weight');
-      if ($parent_fields) {
-        $form['terms']['#tabledrag'][] = [
-          'action' => 'match',
-          'relationship' => 'parent',
-          'group' => 'term-parent',
-          'subgroup' => 'term-parent',
-          'source' => 'term-id',
-          'hidden' => FALSE,
-        ];
-        $form['terms']['#tabledrag'][] = [
-          'action' => 'depth',
-          'relationship' => 'group',
-          'group' => 'term-depth',
-          'hidden' => FALSE,
-        ];
-        $form['terms']['#attached']['library'][] = 'taxonomy/drupal.taxonomy';
-        $form['terms']['#attached']['drupalSettings']['taxonomy'] = [
-          'backStep' => $back_step,
-          'forwardStep' => $forward_step,
-        ];
-      }
+    if ($parent_fields) {
+      $form['terms']['#tabledrag'][] = [
+        'action' => 'match',
+        'relationship' => 'parent',
+        'group' => 'term-parent',
+        'subgroup' => 'term-parent',
+        'source' => 'term-id',
+        'hidden' => FALSE,
+      ];
       $form['terms']['#tabledrag'][] = [
-        'action' => 'order',
-        'relationship' => 'sibling',
-        'group' => 'term-weight',
+        'action' => 'depth',
+        'relationship' => 'group',
+        'group' => 'term-depth',
+        'hidden' => FALSE,
+      ];
+      $form['terms']['#attached']['library'][] = 'taxonomy/drupal.taxonomy';
+      $form['terms']['#attached']['drupalSettings']['taxonomy'] = [
+        'backStep' => $back_step,
+        'forwardStep' => $forward_step,
       ];
     }
+    $form['terms']['#tabledrag'][] = [
+      'action' => 'order',
+      'relationship' => 'sibling',
+      'group' => 'term-weight',
+    ];
 
-    $form['terms']['#header'][] = $this->t('Operations');
-
-    if (($taxonomy_vocabulary->getHierarchy() !== VocabularyInterface::HIERARCHY_MULTIPLE && count($tree) > 1) && $change_weight_access->isAllowed()) {
+    if ($taxonomy_vocabulary->getHierarchy() != VocabularyInterface::HIERARCHY_MULTIPLE && count($tree) > 1) {
       $form['actions'] = ['#type' => 'actions', '#tree' => FALSE];
       $form['actions']['submit'] = [
         '#type' => 'submit',
diff --git a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
index a66eaf51c6..b8f4d14fbe 100644
--- a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
+++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
@@ -3,6 +3,7 @@
 namespace Drupal\taxonomy\Plugin\EntityReferenceSelection;
 
 use Drupal\Component\Utility\Html;
+use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\taxonomy\Entity\Vocabulary;
@@ -23,13 +24,8 @@ class TermSelection extends DefaultSelection {
   /**
    * {@inheritdoc}
    */
-  public function defaultConfiguration() {
-    return [
-      'sort' => [
-        'field' => 'name',
-        'direction' => 'asc',
-      ]
-    ] + parent::defaultConfiguration();
+  public function entityQueryAlter(SelectInterface $query) {
+    // @todo: How to set access, as vocabulary is now config?
   }
 
   /**
@@ -53,13 +49,15 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
    */
   public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
     if ($match || $limit) {
+      $this->configuration['handler_settings']['sort'] = ['field' => 'name', 'direction' => 'asc'];
       return parent::getReferenceableEntities($match, $match_operator, $limit);
     }
 
     $options = [];
 
     $bundles = $this->entityManager->getBundleInfo('taxonomy_term');
-    $bundle_names = $this->getConfiguration()['target_bundles'] ?: array_keys($bundles);
+    $handler_settings = $this->configuration['handler_settings'];
+    $bundle_names = !empty($handler_settings['target_bundles']) ? $handler_settings['target_bundles'] : array_keys($bundles);
 
     foreach ($bundle_names as $bundle) {
       if ($vocabulary = Vocabulary::load($bundle)) {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php b/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
index 27cb8d355f..2d4e719d36 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/cckfield/TaxonomyTermReference.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\taxonomy\Plugin\migrate\cckfield;
 
-@trigger_error('TaxonomyTermReference is deprecated in Drupal 8.4.x and will be removed before Drupal 9.0.x. Use \Drupal\taxonomy\Plugin\migrate\field\TaxonomyTermReference instead.', E_USER_DEPRECATED);
-
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
 
@@ -15,14 +13,16 @@
  *   },
  *   core = {6,7}
  * )
- *
- * @deprecated in Drupal 8.4.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\taxonomy\Plugin\migrate\field\TaxonomyTermReference instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class TaxonomyTermReference extends CckFieldPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldFormatterMap() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php b/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
deleted file mode 100644
index 56ec20ac27..0000000000
--- a/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace Drupal\taxonomy\Plugin\migrate\field;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "taxonomy_term_reference",
- *   type_map = {
- *     "taxonomy_term_reference" = "entity_reference"
- *   },
- *   core = {6,7}
- * )
- */
-class TaxonomyTermReference extends FieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $data) {
-    $process = [
-      'plugin' => 'iterator',
-      'source' => $field_name,
-      'process' => [
-        'target_id' => 'tid',
-      ],
-    ];
-    $migration->setProcessOfProperty($field_name, $process);
-  }
-
-}
diff --git a/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php
deleted file mode 100644
index be4b9cc0b0..0000000000
--- a/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Drupal\taxonomy\Plugin\migrate\process;
-
-use Drupal\migrate\MigrateExecutableInterface;
-use Drupal\migrate\ProcessPluginBase;
-use Drupal\migrate\Row;
-
-/**
- * Checks if the vocabulary being migrated is the one used for forums.
- *
- * The forum module is expecting 'taxonomy_forums' as the field name for the
- * forum nodes. The 'forum_vocabulary' source property is evaluated in
- * Drupal\taxonomy\Plugin\migrate\source\d6\Vocabulary and is set to true if
- * the vocabulary vid being migrated is the same as the one in the
- * 'forum_nav_vocabulary' variable on the source site.
- *
- * @MigrateProcessPlugin(
- *   id = "forum_vocabulary"
- * )
- */
-class ForumVocabulary extends ProcessPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    if ($row->getSourceProperty('forum_vocabulary')) {
-      $value = 'taxonomy_forums';
-    }
-    return $value;
-  }
-
-}
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/Term.php b/core/modules/taxonomy/src/Plugin/migrate/source/Term.php
index 9c7443b40f..53ca632c9c 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/Term.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/Term.php
@@ -12,7 +12,7 @@
  *
  * @MigrateSource(
  *   id = "taxonomy_term",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  *
  * @deprecated in Drupal 8.3.0, intended to be removed in Drupal 9.0.0.
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Term.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Term.php
index d43ed166d2..9170cd8ae3 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Term.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Term.php
@@ -12,7 +12,7 @@
  *
  * @MigrateSource(
  *   id = "d6_taxonomy_term",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class Term extends DrupalSqlBase {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNode.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNode.php
index 4171cceb4f..2b1c806f2b 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNode.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNode.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_term_node",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class TermNode extends DrupalSqlBase {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
index 96d30d48af..91c133bc6c 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
@@ -6,8 +6,7 @@
  * Source returning tids from the term_node table for the non-current revision.
  *
  * @MigrateSource(
- *   id = "d6_term_node_revision",
- *   source_module = "taxonomy"
+ *   id = "d6_term_node_revision"
  * )
  */
 class TermNodeRevision extends TermNode {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
index f8c601d8eb..714fa93310 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
@@ -11,7 +11,7 @@
  *
  * @MigrateSource(
  *   id = "d6_taxonomy_vocabulary",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class Vocabulary extends DrupalSqlBase {
@@ -69,14 +69,6 @@ public function prepareRow(Row $row) {
       ->fetchCol();
     $row->setSourceProperty('node_types', $node_types);
     $row->setSourceProperty('cardinality', ($row->getSourceProperty('tags') == 1 || $row->getSourceProperty('multiple') == 1) ? FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED : 1);
-
-    // If the vid of the vocabulary being migrated is equal to the vid in the
-    // 'forum_nav_vocabulary' variable, set the 'forum_vocabulary' source
-    // property to true so we can know this is the vocabulary used for forums.
-    if ($this->variableGet('forum_nav_vocabulary', 0) == $row->getSourceProperty('vid')) {
-      $row->setSourceProperty('forum_vocabulary', TRUE);
-    }
-
     return parent::prepareRow($row);
   }
 
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyPerType.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyPerType.php
index ba736ea8ac..40a0094afe 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyPerType.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyPerType.php
@@ -7,7 +7,7 @@
  *
  * @MigrateSource(
  *   id = "d6_taxonomy_vocabulary_per_type",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class VocabularyPerType extends Vocabulary {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyTranslation.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyTranslation.php
index c8f4ef85de..a6edd05e94 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyTranslation.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/VocabularyTranslation.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d6_taxonomy_vocabulary_translation",
- *   source_module = "i18ntaxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class VocabularyTranslation extends DrupalSqlBase {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Term.php b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Term.php
index a9711a1b66..518b9f7a41 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Term.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Term.php
@@ -12,7 +12,7 @@
  *
  * @MigrateSource(
  *   id = "d7_taxonomy_term",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class Term extends FieldableEntity {
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
index cc1afa9035..31103a8be1 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_taxonomy_vocabulary",
- *   source_module = "taxonomy"
+ *   source_provider = "taxonomy"
  * )
  */
 class Vocabulary extends DrupalSqlBase {
diff --git a/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php b/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
index b1822dedda..0415a7a632 100644
--- a/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
+++ b/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
@@ -17,9 +17,9 @@
  */
 class IndexTidDepthModifier extends ArgumentPluginBase {
 
-  public function buildOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) { }
 
-  public function query($group_by = FALSE) {}
+  public function query($group_by = FALSE) { }
 
   public function preQuery() {
     // We don't know our argument yet, but it's based upon our position:
diff --git a/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php b/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php
index ee5a2602d8..fa1865474a 100644
--- a/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php
+++ b/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php
@@ -116,7 +116,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     ];
     $form['node'] = [
       '#type' => 'checkbox',
-      '#title' => $this->t("Load default filter from node page, that's good for related taxonomy blocks"),
+      '#title' => $this->t('Load default filter from node page, that\'s good for related taxonomy blocks'),
       '#default_value' => $this->options['node'],
     ];
 
diff --git a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php
index efadf83126..a68c3c8c6c 100644
--- a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php
+++ b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php
@@ -82,9 +82,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
     }
   }
 
-  public function hasExtraOptions() {
-    return TRUE;
-  }
+  public function hasExtraOptions() { return TRUE; }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/taxonomy/src/TaxonomyPermissions.php b/core/modules/taxonomy/src/TaxonomyPermissions.php
index 1772a34f97..196c5a5258 100644
--- a/core/modules/taxonomy/src/TaxonomyPermissions.php
+++ b/core/modules/taxonomy/src/TaxonomyPermissions.php
@@ -5,7 +5,6 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\taxonomy\Entity\Vocabulary;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -49,30 +48,19 @@ public static function create(ContainerInterface $container) {
    */
   public function permissions() {
     $permissions = [];
-    foreach (Vocabulary::loadMultiple() as $vocabulary) {
-      $permissions += $this->buildPermissions($vocabulary);
+    foreach ($this->entityManager->getStorage('taxonomy_vocabulary')->loadMultiple() as $vocabulary) {
+      $permissions += [
+        'edit terms in ' . $vocabulary->id() => [
+          'title' => $this->t('Edit terms in %vocabulary', ['%vocabulary' => $vocabulary->label()]),
+        ],
+      ];
+      $permissions += [
+        'delete terms in ' . $vocabulary->id() => [
+          'title' => $this->t('Delete terms from %vocabulary', ['%vocabulary' => $vocabulary->label()]),
+        ],
+      ];
     }
     return $permissions;
   }
 
-  /**
-   * Builds a standard list of taxonomy term permissions for a given vocabulary.
-   *
-   * @param \Drupal\taxonomy\VocabularyInterface $vocabulary
-   *   The vocabulary.
-   *
-   * @return array
-   *   An array of permission names and descriptions.
-   */
-  protected function buildPermissions(VocabularyInterface $vocabulary) {
-    $id = $vocabulary->id();
-    $args = ['%vocabulary' => $vocabulary->label()];
-
-    return [
-      "create terms in $id" => ['title' => $this->t('%vocabulary: Create terms', $args)],
-      "delete terms in $id" => ['title' => $this->t('%vocabulary: Delete terms', $args)],
-      "edit terms in $id" => ['title' => $this->t('%vocabulary: Edit terms', $args)],
-    ];
-  }
-
 }
diff --git a/core/modules/taxonomy/src/TermAccessControlHandler.php b/core/modules/taxonomy/src/TermAccessControlHandler.php
index 1d48463666..04c2c4f3fb 100644
--- a/core/modules/taxonomy/src/TermAccessControlHandler.php
+++ b/core/modules/taxonomy/src/TermAccessControlHandler.php
@@ -38,7 +38,7 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
    * {@inheritdoc}
    */
   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
-    return AccessResult::allowedIfHasPermissions($account, ["create terms in $entity_bundle", 'administer taxonomy'], 'OR');
+    return AccessResult::allowedIfHasPermission($account, 'administer taxonomy');
   }
 
 }
diff --git a/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php b/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
index 9b952ebbe3..644211714a 100644
--- a/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
+++ b/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
@@ -78,6 +78,10 @@ protected function enableTranslation() {
 
   /**
    * Adds term reference field for the article content type.
+   *
+   * @param bool $translatable
+   *   (optional) If TRUE, create a translatable term reference field. Defaults
+   *   to FALSE.
    */
   protected function setUpTermReferenceField() {
     $handler_settings = [
diff --git a/core/modules/taxonomy/src/VocabularyAccessControlHandler.php b/core/modules/taxonomy/src/VocabularyAccessControlHandler.php
deleted file mode 100644
index befc8a5fdf..0000000000
--- a/core/modules/taxonomy/src/VocabularyAccessControlHandler.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace Drupal\taxonomy;
-
-use Drupal\Core\Access\AccessResult;
-use Drupal\Core\Entity\EntityAccessControlHandler;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Session\AccountInterface;
-
-/**
- * Defines the access control handler for the taxonomy vocabulary entity type.
- *
- * @see \Drupal\taxonomy\Entity\Vocabulary
- */
-class VocabularyAccessControlHandler extends EntityAccessControlHandler {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
-    switch ($operation) {
-      case 'access taxonomy overview':
-        return AccessResult::allowedIfHasPermissions($account, ['access taxonomy overview', 'administer taxonomy'], 'OR');
-
-      default:
-        return parent::checkAccess($entity, $operation, $account);
-    }
-  }
-
-}
diff --git a/core/modules/taxonomy/src/VocabularyListBuilder.php b/core/modules/taxonomy/src/VocabularyListBuilder.php
index e7c021b4d7..8503c288a9 100644
--- a/core/modules/taxonomy/src/VocabularyListBuilder.php
+++ b/core/modules/taxonomy/src/VocabularyListBuilder.php
@@ -4,13 +4,8 @@
 
 use Drupal\Core\Config\Entity\DraggableListBuilder;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\RendererInterface;
-use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Defines a class to build a listing of taxonomy vocabulary entities.
@@ -24,59 +19,6 @@ class VocabularyListBuilder extends DraggableListBuilder {
    */
   protected $entitiesKey = 'vocabularies';
 
-  /**
-   * The current user.
-   *
-   * @var \Drupal\Core\Session\AccountInterface
-   */
-  protected $currentUser;
-
-  /**
-   * The entity manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * The renderer service.
-   *
-   * @var \Drupal\Core\Render\RendererInterface
-   */
-  protected $renderer;
-
-  /**
-   * Constructs a new VocabularyListBuilder object.
-   *
-   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
-   *   The entity type definition.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
-   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   The entity manager service.
-   * @param \Drupal\Core\Render\RendererInterface $renderer
-   *   The renderer service.
-   */
-  public function __construct(EntityTypeInterface $entity_type, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager, RendererInterface $renderer = NULL) {
-    parent::__construct($entity_type, $entity_type_manager->getStorage($entity_type->id()));
-
-    $this->currentUser = $current_user;
-    $this->entityTypeManager = $entity_type_manager;
-    $this->renderer = $renderer;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
-    return new static(
-      $entity_type,
-      $container->get('current_user'),
-      $container->get('entity_type.manager'),
-      $container->get('renderer')
-    );
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -94,23 +36,16 @@ public function getDefaultOperations(EntityInterface $entity) {
       $operations['edit']['title'] = t('Edit vocabulary');
     }
 
-    if ($entity->access('access taxonomy overview')) {
-      $operations['list'] = [
-        'title' => t('List terms'),
-        'weight' => 0,
-        'url' => $entity->toUrl('overview-form'),
-      ];
-    }
-
-    $taxonomy_term_access_control_handler = $this->entityTypeManager->getAccessControlHandler('taxonomy_term');
-    if ($taxonomy_term_access_control_handler->createAccess($entity->id())) {
-      $operations['add'] = [
-        'title' => t('Add terms'),
-        'weight' => 10,
-        'url' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $entity->id()]),
-      ];
-    }
-
+    $operations['list'] = [
+      'title' => t('List terms'),
+      'weight' => 0,
+      'url' => $entity->urlInfo('overview-form'),
+    ];
+    $operations['add'] = [
+      'title' => t('Add terms'),
+      'weight' => 10,
+      'url' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $entity->id()]),
+    ];
     unset($operations['delete']);
 
     return $operations;
@@ -122,11 +57,6 @@ public function getDefaultOperations(EntityInterface $entity) {
   public function buildHeader() {
     $header['label'] = t('Vocabulary name');
     $header['description'] = t('Description');
-
-    if ($this->currentUser->hasPermission('administer vocabularies')) {
-      $header['weight'] = t('Weight');
-    }
-
     return $header + parent::buildHeader();
   }
 
@@ -150,25 +80,7 @@ public function render() {
       unset($this->weightKey);
     }
     $build = parent::render();
-
-    // If the weight key was unset then the table is in the 'table' key,
-    // otherwise in vocabularies. The empty message is only needed if the table
-    // is possibly empty, so there is no need to support the vocabularies key
-    // here.
-    if (isset($build['table'])) {
-      $access_control_handler = $this->entityTypeManager->getAccessControlHandler('taxonomy_vocabulary');
-      $create_access = $access_control_handler->createAccess(NULL, NULL, [], TRUE);
-      $this->renderer->addCacheableDependency($build['table'], $create_access);
-      if ($create_access->isAllowed()) {
-        $build['table']['#empty'] = t('No vocabularies available. <a href=":link">Add vocabulary</a>.', [
-          ':link' => Url::fromRoute('entity.taxonomy_vocabulary.add_form')->toString()
-        ]);
-      }
-      else {
-        $build['table']['#empty'] = t('No vocabularies available.');
-      }
-    }
-
+    $build['table']['#empty'] = t('No vocabularies available. <a href=":link">Add vocabulary</a>.', [':link' => \Drupal::url('entity.taxonomy_vocabulary.add_form')]);
     return $build;
   }
 
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index c6dd721aa7..4a93989ad5 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -61,7 +61,7 @@ function taxonomy_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dt>' . t('Classifying entity content') . '</dt>';
       $output .= '<dd>' . t('A user with the <em>Administer fields</em> permission for a certain entity type may add <em>Taxonomy term</em> reference fields to the entity type, which will allow entities to be classified using taxonomy terms. See the <a href=":entity_reference">Entity Reference help</a> for more information about reference fields. See the <a href=":field">Field module help</a> and the <a href=":field_ui">Field UI help</a> pages for general information on fields and how to create and manage them.', [':field_ui' => $field_ui_url, ':field' => \Drupal::url('help.page', ['name' => 'field']), ':entity_reference' => \Drupal::url('help.page', ['name' => 'entity_reference'])]) . '</dd>';
       $output .= '<dt>' . t('Adding new terms during content creation') . '</dt>';
-      $output .= '<dd>' . t("Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if either of the two <em>Autocomplete</em> widgets is chosen for the Taxonomy term reference field in the <em>Manage form display</em> page for the field. You will also need to enable the <em>Create referenced entities if they don't already exist</em> option, and restrict the field to one vocabulary.") . '</dd>';
+      $output .= '<dd>' . t('Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if either of the two <em>Autocomplete</em> widgets is chosen for the Taxonomy term reference field in the <em>Manage form display</em> page for the field. You will also need to enable the <em>Create referenced entities if they don\'t already exist</em> option, and restrict the field to one vocabulary.') . '</dd>';
       $output .= '<dt>' . t('Configuring displays and form displays') . '</dt>';
       $output .= '<dd>' . t('See the <a href=":entity_reference">Entity Reference help</a> page for the field widgets and formatters that can be configured for any reference field on the <em>Manage display</em> and <em>Manage form display</em> pages. Taxonomy additionally provides an <em>RSS category</em> formatter that displays nothing when the entity item is displayed as HTML, but displays an RSS category instead of a list when the entity item is displayed in an RSS feed.', [':entity_reference' => \Drupal::url('help.page', ['name' => 'entity_reference'])]) . '</li>';
       $output .= '</ul>';
@@ -75,25 +75,13 @@ function taxonomy_help($route_name, RouteMatchInterface $route_match) {
 
     case 'entity.taxonomy_vocabulary.overview_form':
       $vocabulary = $route_match->getParameter('taxonomy_vocabulary');
-      if (\Drupal::currentUser()->hasPermission('administer taxonomy') || \Drupal::currentUser()->hasPermission('edit terms in ' . $vocabulary->id())) {
-        switch ($vocabulary->getHierarchy()) {
-          case VocabularyInterface::HIERARCHY_DISABLED:
-            return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', ['%capital_name' => Unicode::ucfirst($vocabulary->label()), '%name' => $vocabulary->label()]) . '</p>';
-          case VocabularyInterface::HIERARCHY_SINGLE:
-            return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', ['%capital_name' => Unicode::ucfirst($vocabulary->label()), '%name' => $vocabulary->label()]) . '</p>';
-          case VocabularyInterface::HIERARCHY_MULTIPLE:
-            return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', ['%capital_name' => Unicode::ucfirst($vocabulary->label())]) . '</p>';
-        }
-      }
-      else {
-        switch ($vocabulary->getHierarchy()) {
-          case VocabularyInterface::HIERARCHY_DISABLED:
-            return '<p>' . t('%capital_name contains the following terms.', ['%capital_name' => Unicode::ucfirst($vocabulary->label())]) . '</p>';
-          case VocabularyInterface::HIERARCHY_SINGLE:
-            return '<p>' . t('%capital_name contains terms grouped under parent terms', ['%capital_name' => Unicode::ucfirst($vocabulary->label())]) . '</p>';
-          case VocabularyInterface::HIERARCHY_MULTIPLE:
-            return '<p>' . t('%capital_name contains terms with multiple parents.', ['%capital_name' => Unicode::ucfirst($vocabulary->label())]) . '</p>';
-        }
+      switch ($vocabulary->getHierarchy()) {
+        case VocabularyInterface::HIERARCHY_DISABLED:
+          return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', ['%capital_name' => Unicode::ucfirst($vocabulary->label()), '%name' => $vocabulary->label()]) . '</p>';
+        case VocabularyInterface::HIERARCHY_SINGLE:
+          return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', ['%capital_name' => Unicode::ucfirst($vocabulary->label()), '%name' => $vocabulary->label()]) . '</p>';
+        case VocabularyInterface::HIERARCHY_MULTIPLE:
+          return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', ['%capital_name' => Unicode::ucfirst($vocabulary->label())]) . '</p>';
       }
   }
 }
diff --git a/core/modules/taxonomy/taxonomy.permissions.yml b/core/modules/taxonomy/taxonomy.permissions.yml
index bb71e93c12..d4859492af 100644
--- a/core/modules/taxonomy/taxonomy.permissions.yml
+++ b/core/modules/taxonomy/taxonomy.permissions.yml
@@ -1,9 +1,5 @@
 administer taxonomy:
   title: 'Administer vocabularies and terms'
 
-access taxonomy overview:
-  title: 'Access the taxonomy vocabulary overview page'
-  description: 'Get an overview of all taxonomy vocabularies.'
-
 permission_callbacks:
   - Drupal\taxonomy\TaxonomyPermissions::permissions
diff --git a/core/modules/taxonomy/taxonomy.routing.yml b/core/modules/taxonomy/taxonomy.routing.yml
index 19989241e4..8a3bd1a58d 100644
--- a/core/modules/taxonomy/taxonomy.routing.yml
+++ b/core/modules/taxonomy/taxonomy.routing.yml
@@ -4,7 +4,7 @@ entity.taxonomy_vocabulary.collection:
     _entity_list: 'taxonomy_vocabulary'
     _title: 'Taxonomy'
   requirements:
-    _permission: 'access taxonomy overview+administer taxonomy'
+    _permission: 'administer taxonomy'
 
 entity.taxonomy_term.add_form:
   path: '/admin/structure/taxonomy/manage/{taxonomy_vocabulary}/add'
@@ -74,7 +74,7 @@ entity.taxonomy_vocabulary.overview_form:
     _form: 'Drupal\taxonomy\Form\OverviewTerms'
     _title_callback: 'Drupal\taxonomy\Controller\TaxonomyController::vocabularyTitle'
   requirements:
-    _entity_access: 'taxonomy_vocabulary.access taxonomy overview'
+    _entity_access: 'taxonomy_vocabulary.view'
 
 entity.taxonomy_term.canonical:
   path: '/taxonomy/term/{taxonomy_term}'
diff --git a/core/modules/taxonomy/tests/src/Functional/LegacyTest.php b/core/modules/taxonomy/tests/src/Functional/LegacyTest.php
index 667ed5542f..ac8e82dd66 100644
--- a/core/modules/taxonomy/tests/src/Functional/LegacyTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/LegacyTest.php
@@ -4,7 +4,7 @@
 
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\taxonomy\Entity\Vocabulary;
+use \Drupal\taxonomy\Entity\Vocabulary;
 
 /**
  * Posts an article with a taxonomy term and a date prior to 1970.
diff --git a/core/modules/taxonomy/tests/src/Functional/TaxonomyTranslationTestTrait.php b/core/modules/taxonomy/tests/src/Functional/TaxonomyTranslationTestTrait.php
index a7fd54b020..fc3cea75ec 100644
--- a/core/modules/taxonomy/tests/src/Functional/TaxonomyTranslationTestTrait.php
+++ b/core/modules/taxonomy/tests/src/Functional/TaxonomyTranslationTestTrait.php
@@ -73,6 +73,10 @@ protected function enableTranslation() {
 
   /**
    * Adds term reference field for the article content type.
+   *
+   * @param bool $translatable
+   *   (optional) If TRUE, create a translatable term reference field. Defaults
+   *   to FALSE.
    */
   protected function setUpTermReferenceField() {
     $handler_settings = [
diff --git a/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php b/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php
index 236ac70553..dfd5e51f0b 100644
--- a/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php
@@ -74,12 +74,10 @@ protected function setUpNode() {
     $node = Node::create([
       'title' => $this->randomMachineName(),
       'type' => 'article',
-      'description' => [
-        [
-          'value' => $this->randomMachineName(),
-          'format' => 'basic_html',
-        ],
-      ],
+      'description' => [[
+        'value' => $this->randomMachineName(),
+        'format' => 'basic_html'
+      ]],
       $this->termFieldName => [['target_id' => $this->term->id()]],
       'langcode' => $this->baseLangcode,
     ]);
diff --git a/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php b/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
index 989398e62f..3ba8868f54 100644
--- a/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\Tests\taxonomy\Functional;
 
-use Drupal\Component\Utility\Unicode;
-
 /**
  * Tests the taxonomy vocabulary permissions.
  *
@@ -11,204 +9,10 @@
  */
 class VocabularyPermissionsTest extends TaxonomyTestBase {
 
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['help'];
-
   protected function setUp() {
     parent::setUp();
 
     $this->drupalPlaceBlock('page_title_block');
-    $this->drupalPlaceBlock('local_actions_block');
-    $this->drupalPlaceBlock('help_block');
-  }
-
-  /**
-   * Create, edit and delete a vocabulary via the user interface.
-   */
-  public function testVocabularyPermissionsVocabulary() {
-    // VocabularyTest.php already tests for user with "administer taxonomy"
-    // permission.
-
-    // Test as user without proper permissions.
-    $authenticated_user = $this->drupalCreateUser([]);
-    $this->drupalLogin($authenticated_user);
-
-    $assert_session = $this->assertSession();
-
-    // Visit the main taxonomy administration page.
-    $this->drupalGet('admin/structure/taxonomy');
-    $assert_session->statusCodeEquals(403);
-
-    // Test as user with "access taxonomy overview" permissions.
-    $proper_user = $this->drupalCreateUser(['access taxonomy overview']);
-    $this->drupalLogin($proper_user);
-
-    // Visit the main taxonomy administration page.
-    $this->drupalGet('admin/structure/taxonomy');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('Vocabulary name');
-    $assert_session->linkNotExists('Add vocabulary');
-  }
-
-  /**
-   * Test the vocabulary overview permission.
-   */
-  public function testTaxonomyVocabularyOverviewPermissions() {
-    // Create two vocabularies, one with two terms, the other without any term.
-    /** @var \Drupal\taxonomy\Entity\Vocabulary $vocabulary1 , $vocabulary2 */
-    $vocabulary1 = $this->createVocabulary();
-    $vocabulary2 = $this->createVocabulary();
-    $vocabulary1_id = $vocabulary1->id();
-    $vocabulary2_id = $vocabulary2->id();
-    $this->createTerm($vocabulary1);
-    $this->createTerm($vocabulary1);
-
-    // Assert expected help texts on first vocabulary.
-    $edit_help_text = t('You can reorganize the terms in @capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', ['@capital_name' => Unicode::ucfirst($vocabulary1->label())]);
-    $no_edit_help_text = t('@capital_name contains the following terms.', ['@capital_name' => Unicode::ucfirst($vocabulary1->label())]);
-
-    $assert_session = $this->assertSession();
-
-    // Logged in as admin user with 'administer taxonomy' permission.
-    $admin_user = $this->drupalCreateUser(['administer taxonomy']);
-    $this->drupalLogin($admin_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkExists('Edit');
-    $assert_session->linkExists('Delete');
-    $assert_session->linkExists('Add term');
-    $assert_session->buttonExists('Save');
-    $assert_session->pageTextContains('Weight');
-    $assert_session->pageTextContains($edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkExists('Add term');
-
-    // Login as a user without any of the required permissions.
-    $no_permission_user = $this->drupalCreateUser();
-    $this->drupalLogin($no_permission_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(403);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(403);
-
-    // Log in as a user with only the overview permission, neither edit nor
-    // delete operations must be available and no Save button.
-    $overview_only_user = $this->drupalCreateUser(['access taxonomy overview']);
-    $this->drupalLogin($overview_only_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkNotExists('Edit');
-    $assert_session->linkNotExists('Delete');
-    $assert_session->buttonNotExists('Save');
-    $assert_session->pageTextNotContains('Weight');
-    $assert_session->linkNotExists('Add term');
-    $assert_session->pageTextContains($no_edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should not be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkNotExists('Add term');
-
-    // Login as a user with permission to edit terms, only edit link should be
-    // visible.
-    $edit_user = $this->createUser([
-      'access taxonomy overview',
-      'edit terms in ' . $vocabulary1_id,
-      'edit terms in ' . $vocabulary2_id,
-    ]);
-    $this->drupalLogin($edit_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkExists('Edit');
-    $assert_session->linkNotExists('Delete');
-    $assert_session->buttonExists('Save');
-    $assert_session->pageTextContains('Weight');
-    $assert_session->linkNotExists('Add term');
-    $assert_session->pageTextContains($edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should not be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkNotExists('Add term');
-
-    // Login as a user with permission only to delete terms.
-    $edit_delete_user = $this->createUser([
-      'access taxonomy overview',
-      'delete terms in ' . $vocabulary1_id,
-      'delete terms in ' . $vocabulary2_id,
-    ]);
-    $this->drupalLogin($edit_delete_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkNotExists('Edit');
-    $assert_session->linkExists('Delete');
-    $assert_session->linkNotExists('Add term');
-    $assert_session->buttonNotExists('Save');
-    $assert_session->pageTextNotContains('Weight');
-    $assert_session->pageTextContains($no_edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should not be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkNotExists('Add term');
-
-    // Login as a user with permission to edit and delete terms.
-    $edit_delete_user = $this->createUser([
-      'access taxonomy overview',
-      'edit terms in ' . $vocabulary1_id,
-      'delete terms in ' . $vocabulary1_id,
-      'edit terms in ' . $vocabulary2_id,
-      'delete terms in ' . $vocabulary2_id,
-    ]);
-    $this->drupalLogin($edit_delete_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkExists('Edit');
-    $assert_session->linkExists('Delete');
-    $assert_session->linkNotExists('Add term');
-    $assert_session->buttonExists('Save');
-    $assert_session->pageTextContains('Weight');
-    $assert_session->pageTextContains($edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should not be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkNotExists('Add term');
-
-    // Login as a user with permission to create new terms, only add new term
-    // link should be visible.
-    $edit_user = $this->createUser([
-      'access taxonomy overview',
-      'create terms in ' . $vocabulary1_id,
-      'create terms in ' . $vocabulary2_id,
-    ]);
-    $this->drupalLogin($edit_user);
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary1_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->linkNotExists('Edit');
-    $assert_session->linkNotExists('Delete');
-    $assert_session->linkExists('Add term');
-    $assert_session->buttonNotExists('Save');
-    $assert_session->pageTextNotContains('Weight');
-    $assert_session->pageTextContains($no_edit_help_text);
-
-    // Visit vocabulary overview without terms. 'Add term' should not be shown.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary2_id . '/overview');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->pageTextContains('No terms available');
-    $assert_session->linkExists('Add term');
   }
 
   /**
@@ -238,9 +42,7 @@ public function testVocabularyPermissionsTaxonomyTerm() {
     $view_link = $this->xpath('//div[@class="messages"]//a[contains(@href, :href)]', [':href' => 'term/']);
     $this->assert(isset($view_link), 'The message area contains a link to a term');
 
-    $terms = \Drupal::entityTypeManager()
-      ->getStorage('taxonomy_term')
-      ->loadByProperties(['name' => $edit['name[0][value]']]);
+    $terms = taxonomy_term_load_multiple_by_name($edit['name[0][value]']);
     $term = reset($terms);
 
     // Edit the term.
@@ -260,35 +62,6 @@ public function testVocabularyPermissionsTaxonomyTerm() {
     $this->drupalPostForm(NULL, NULL, t('Delete'));
     $this->assertRaw(t('Deleted term %name.', ['%name' => $edit['name[0][value]']]), 'Term deleted.');
 
-    // Test as user with "create" permissions.
-    $user = $this->drupalCreateUser(["create terms in {$vocabulary->id()}"]);
-    $this->drupalLogin($user);
-
-    $assert_session = $this->assertSession();
-
-    // Create a new term.
-    $this->drupalGet('admin/structure/taxonomy/manage/' . $vocabulary->id() . '/add');
-    $assert_session->statusCodeEquals(200);
-    $assert_session->fieldExists('name[0][value]');
-
-    // Submit the term.
-    $edit = [];
-    $edit['name[0][value]'] = $this->randomMachineName();
-
-    $this->drupalPostForm(NULL, $edit, t('Save'));
-    $assert_session->pageTextContains(t('Created new term @name.', ['@name' => $edit['name[0][value]']]));
-
-    $terms = \Drupal::entityTypeManager()
-      ->getStorage('taxonomy_term')
-      ->loadByProperties(['name' => $edit['name[0][value]']]);
-    $term = reset($terms);
-
-    // Ensure that edit and delete access is denied.
-    $this->drupalGet('taxonomy/term/' . $term->id() . '/edit');
-    $assert_session->statusCodeEquals(403);
-    $this->drupalGet('taxonomy/term/' . $term->id() . '/delete');
-    $assert_session->statusCodeEquals(403);
-
     // Test as user with "edit" permissions.
     $user = $this->drupalCreateUser(["edit terms in {$vocabulary->id()}"]);
     $this->drupalLogin($user);
diff --git a/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php b/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php
index 9d477105bf..80ea2d7585 100644
--- a/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php
@@ -77,7 +77,7 @@ public function testVocabularyInterface() {
     $this->drupalPostForm('admin/structure/taxonomy/add', $edit, t('Save'));
 
     $site_name = $this->config('system.site')->get('name');
-    $this->assertTitle(t("Don't Panic | @site-name", ['@site-name' => $site_name]), 'The page title contains the escaped character.');
+    $this->assertTitle(t('Don\'t Panic | @site-name', ['@site-name' => $site_name]), 'The page title contains the escaped character.');
   }
 
   /**
diff --git a/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php b/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php
index 4c861ad6ae..832e5111bf 100644
--- a/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php
@@ -18,7 +18,7 @@ class TermKernelTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['filter', 'taxonomy', 'text', 'user' ];
+  public static $modules = [ 'filter', 'taxonomy', 'text', 'user' ];
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/cckfield/TaxonomyTermReferenceCckTest.php b/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/cckfield/TaxonomyTermReferenceCckTest.php
deleted file mode 100644
index 5e646e0625..0000000000
--- a/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/cckfield/TaxonomyTermReferenceCckTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace Drupal\Tests\taxonomy\Unit\Plugin\migrate\cckfield;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\taxonomy\Plugin\migrate\cckfield\TaxonomyTermReference;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\taxonomy\Plugin\migrate\cckfield\TaxonomyTermReference
- * @group taxonomy
- * @group legacy
- */
-class TaxonomyTermReferenceCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new TaxonomyTermReference([], 'taxonomy', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processCckFieldValues() method will call
-    // setProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to setProcessOfProperty().
-    $migration->setProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessCckFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'tid',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/field/TaxonomyTermReferenceFieldTest.php b/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/field/TaxonomyTermReferenceFieldTest.php
deleted file mode 100644
index de88d7d91f..0000000000
--- a/core/modules/taxonomy/tests/src/Unit/Plugin/migrate/field/TaxonomyTermReferenceFieldTest.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-namespace Drupal\Tests\taxonomy\Unit\Plugin\migrate\field;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\Tests\UnitTestCase;
-use Drupal\taxonomy\Plugin\migrate\field\TaxonomyTermReference;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\taxonomy\Plugin\migrate\field\TaxonomyTermReference
- * @group taxonomy
- */
-class TaxonomyTermReferenceFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new TaxonomyTermReference([], 'taxonomy', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // setProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to setProcessOfProperty().
-    $migration->setProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFieldValues() {
-    $this->plugin->processFieldValues($this->migration, 'somefieldname', []);
-
-    $expected = [
-      'plugin' => 'iterator',
-      'source' => 'somefieldname',
-      'process' => [
-        'target_id' => 'tid',
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess());
-  }
-
-}
diff --git a/core/modules/telephone/src/Plugin/migrate/field/d7/PhoneField.php b/core/modules/telephone/src/Plugin/migrate/field/d7/PhoneField.php
deleted file mode 100644
index 3164cecdca..0000000000
--- a/core/modules/telephone/src/Plugin/migrate/field/d7/PhoneField.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-namespace Drupal\telephone\Plugin\migrate\field\d7;
-
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "phone",
- *   type_map = {
- *     "phone" = "telephone",
- *   },
- *   core = {7}
- * )
- */
-class PhoneField extends FieldPluginBase {}
diff --git a/core/modules/text/migration_templates/text_settings.yml b/core/modules/text/migration_templates/text_settings.yml
index a38de856d7..45d426da35 100644
--- a/core/modules/text/migration_templates/text_settings.yml
+++ b/core/modules/text/migration_templates/text_settings.yml
@@ -7,7 +7,6 @@ source:
   plugin: variable
   variables:
     - teaser_length
-  source_module: text
 process:
   default_summary_length: teaser_length
 destination:
diff --git a/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php b/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php
index 5086a31d4d..6d61faf1aa 100644
--- a/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php
+++ b/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php
@@ -16,4 +16,4 @@
  *   }
  * )
  */
-class TextSummaryOrTrimmedFormatter extends TextTrimmedFormatter {}
+class TextSummaryOrTrimmedFormatter extends TextTrimmedFormatter { }
diff --git a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
index e2511de836..99619bb499 100644
--- a/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
+++ b/core/modules/text/src/Plugin/migrate/cckfield/TextField.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\text\Plugin\migrate\cckfield;
 
-@trigger_error('TextField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\text\Plugin\migrate\field\d6\TextField or \Drupal\text\Plugin\migrate\field\d7\TextField instead.', E_USER_DEPRECATED);
-
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\cckfield\CckFieldPluginBase;
@@ -18,12 +16,6 @@
  *   },
  *   core = {6,7}
  * )
- *
- * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use
- * \Drupal\text\Plugin\migrate\field\d6\TextField or
- * \Drupal\text\Plugin\migrate\field\d7\TextField instead.
- *
- * @see https://www.drupal.org/node/2751897
  */
 class TextField extends CckFieldPluginBase {
 
diff --git a/core/modules/text/src/Plugin/migrate/field/d6/TextField.php b/core/modules/text/src/Plugin/migrate/field/d6/TextField.php
deleted file mode 100644
index 62deeee10c..0000000000
--- a/core/modules/text/src/Plugin/migrate/field/d6/TextField.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-namespace Drupal\text\Plugin\migrate\field\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "d6_text",
- *   type_map = {
- *     "text" = "text",
- *     "text_long" = "text_long",
- *     "text_with_summary" = "text_with_summary"
- *   },
- *   core = {6}
- * )
- */
-class TextField extends FieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldWidgetMap() {
-    return [
-      'text_textfield' => 'text_textfield',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterMap() {
-    return [
-      'default' => 'text_default',
-      'trimmed' => 'text_trimmed',
-      'plain' => 'basic_string',
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processFieldValues(MigrationInterface $migration, $field_name, $field_info) {
-    $widget_type = isset($field_info['widget_type']) ? $field_info['widget_type'] : $field_info['widget']['type'];
-
-    if ($widget_type == 'optionwidgets_onoff') {
-      $process = [
-        'value' => [
-          'plugin' => 'static_map',
-          'source' => 'value',
-          'default_value' => 0,
-        ],
-      ];
-
-      $checked_value = explode("\n", $field_info['global_settings']['allowed_values'])[1];
-      if (strpos($checked_value, '|') !== FALSE) {
-        $checked_value = substr($checked_value, 0, strpos($checked_value, '|'));
-      }
-      $process['value']['map'][$checked_value] = 1;
-    }
-    else {
-      // See \Drupal\migrate_drupal\Plugin\migrate\source\d6\User::baseFields(),
-      // signature_format for an example of the YAML that represents this
-      // process array.
-      $process = [
-        'value' => 'value',
-        'format' => [
-          [
-            'plugin' => 'static_map',
-            'bypass' => TRUE,
-            'source' => 'format',
-            'map' => [0 => NULL],
-          ],
-          [
-            'plugin' => 'skip_on_empty',
-            'method' => 'process',
-          ],
-          [
-            'plugin' => 'migration',
-            'migration' => [
-              'd6_filter_format',
-              'd7_filter_format',
-            ],
-            'source' => 'format',
-          ],
-        ],
-      ];
-    }
-
-    $process = [
-      'plugin' => 'iterator',
-      'source' => $field_name,
-      'process' => $process,
-    ];
-    $migration->setProcessOfProperty($field_name, $process);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldType(Row $row) {
-    $widget_type = $row->getSourceProperty('widget_type');
-    $settings = $row->getSourceProperty('global_settings');
-
-    if ($widget_type == 'text_textfield') {
-      $field_type = $settings['text_processing'] ? 'text' : 'string';
-      if (empty($settings['max_length']) || $settings['max_length'] > 255) {
-        $field_type .= '_long';
-      }
-      return $field_type;
-    }
-
-    if ($widget_type == 'text_textarea') {
-      $field_type = $settings['text_processing'] ? 'text_long' : 'string_long';
-      return $field_type;
-    }
-
-    switch ($widget_type) {
-      case 'optionwidgets_buttons':
-      case 'optionwidgets_select':
-        return 'list_string';
-      case 'optionwidgets_onoff':
-        return 'boolean';
-      default:
-        return parent::getFieldType($row);
-    }
-  }
-
-}
diff --git a/core/modules/text/src/Plugin/migrate/field/d7/TextField.php b/core/modules/text/src/Plugin/migrate/field/d7/TextField.php
deleted file mode 100644
index ccdedd427a..0000000000
--- a/core/modules/text/src/Plugin/migrate/field/d7/TextField.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-namespace Drupal\text\Plugin\migrate\field\d7;
-
-use Drupal\migrate\Row;
-use Drupal\migrate\MigrateSkipRowException;
-use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
-
-/**
- * @MigrateField(
- *   id = "d7_text",
- *   type_map = {
- *     "text" = "text",
- *     "text_long" = "text_long",
- *     "text_with_summary" = "text_with_summary"
- *   },
- *   core = {7}
- * )
- */
-class TextField extends FieldPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldFormatterType(Row $row) {
-    $field_type = $this->getFieldType($row);
-    $formatter_type = $row->getSourceProperty('formatter/type');
-
-    switch ($field_type) {
-      case 'string':
-        $formatter_type = str_replace('text_default', 'string', $formatter_type);
-        break;
-      case 'string_long':
-        $formatter_type = str_replace('text_default', 'basic_string', $formatter_type);
-        break;
-    }
-
-    return $formatter_type;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldWidgetType(Row $row) {
-    $field_type = $this->getFieldType($row);
-    $widget_type = $row->getSourceProperty('widget/type');
-
-    switch ($field_type) {
-      case 'string':
-        $widget_type = str_replace('text_textfield', 'string_textfield', $widget_type);
-        break;
-      case 'string_long':
-        $widget_type = str_replace('text_textarea', 'string_textarea', $widget_type);
-        break;
-    }
-
-    return $widget_type;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFieldType(Row $row) {
-    $type = $row->getSourceProperty('type');
-    $plain_text = FALSE;
-    $filtered_text = FALSE;
-
-    foreach ($row->getSourceProperty('instances') as $instance) {
-      // Check if this field has plain text instances, filtered text instances,
-      // or both.
-      $data = unserialize($instance['data']);
-      switch ($data['settings']['text_processing']) {
-        case '0':
-          $plain_text = TRUE;
-          break;
-        case '1':
-          $filtered_text = TRUE;
-          break;
-      }
-    }
-
-    if (in_array($type, ['text', 'text_long'])) {
-      // If a text or text_long field has only plain text instances, migrate it
-      // to a string or string_long field.
-      if ($plain_text && !$filtered_text) {
-        $type = str_replace(['text', 'text_long'], ['string', 'string_long'], $type);
-      }
-      // If a text or text_long field has both plain text and filtered text
-      // instances, skip the row.
-      elseif ($plain_text && $filtered_text) {
-        $field_name = $row->getSourceProperty('field_name');
-        throw new MigrateSkipRowException("Can't migrate source field $field_name configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text");
-      }
-    }
-    elseif ($type == 'text_with_summary' && $plain_text) {
-      // If a text_with_summary field has plain text instances, skip the row
-      // since there's no such thing as a string_with_summary field.
-      $field_name = $row->getSourceProperty('field_name');
-      throw new MigrateSkipRowException("Can't migrate source field $field_name of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text");
-    }
-
-    return $type;
-  }
-
-}
diff --git a/core/modules/text/tests/src/Unit/Migrate/TextCckTest.php b/core/modules/text/tests/src/Unit/Migrate/TextFieldTest.php
similarity index 84%
rename from core/modules/text/tests/src/Unit/Migrate/TextCckTest.php
rename to core/modules/text/tests/src/Unit/Migrate/TextFieldTest.php
index 73d7e2e623..7f703b799b 100644
--- a/core/modules/text/tests/src/Unit/Migrate/TextCckTest.php
+++ b/core/modules/text/tests/src/Unit/Migrate/TextFieldTest.php
@@ -13,7 +13,7 @@
  * @group text
  * @group legacy
  */
-class TextCckTest extends UnitTestCase {
+class TextFieldTest extends UnitTestCase {
 
   /**
    * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
@@ -123,33 +123,37 @@ public function testProcessBooleanTextExplicitValues() {
    */
   public function getFieldTypeProvider() {
     return [
-      ['string_long', 'text_textfield', ['text_processing' => FALSE]],
+      ['string_long', 'text_textfield', [
+        'text_processing' => FALSE,
+      ]],
       ['string', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 128,
-        ],
-      ],
+        'text_processing' => FALSE,
+        'max_length' => 128,
+      ]],
       ['string_long', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['text_long', 'text_textfield', ['text_processing' => TRUE]],
+        'text_processing' => FALSE,
+        'max_length' => 4096,
+      ]],
+      ['text_long', 'text_textfield', [
+        'text_processing' => TRUE,
+      ]],
       ['text', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 128,
-        ],
-      ],
+        'text_processing' => TRUE,
+        'max_length' => 128,
+      ]],
       ['text_long', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 4096,
-        ],
-      ],
+        'text_processing' => TRUE,
+        'max_length' => 4096,
+      ]],
       ['list_string', 'optionwidgets_buttons'],
       ['list_string', 'optionwidgets_select'],
       ['boolean', 'optionwidgets_onoff'],
-      ['text_long', 'text_textarea', ['text_processing' => TRUE]],
-      ['string_long', 'text_textarea', ['text_processing' => FALSE]],
+      ['text_long', 'text_textarea', [
+        'text_processing' => TRUE,
+      ]],
+      ['string_long', 'text_textarea', [
+        'text_processing' => FALSE,
+      ]],
       [NULL, 'undefined'],
     ];
   }
@@ -159,7 +163,8 @@ public function getFieldTypeProvider() {
    * @dataProvider getFieldTypeProvider
    */
   public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row(['widget_type' => $widget_type], ['widget_type' => []]);
+    $row = new Row();
+    $row->setSourceProperty('widget_type', $widget_type);
     $row->setSourceProperty('global_settings', $settings);
     $this->assertSame($expected_type, $this->plugin->getFieldType($row));
   }
diff --git a/core/modules/text/tests/src/Unit/Migrate/d6/TextFieldTest.php b/core/modules/text/tests/src/Unit/Migrate/d6/TextFieldTest.php
deleted file mode 100644
index 44fb04e71b..0000000000
--- a/core/modules/text/tests/src/Unit/Migrate/d6/TextFieldTest.php
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-namespace Drupal\Tests\text\Unit\Migrate\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\text\Plugin\migrate\field\d6\TextField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\text\Plugin\migrate\field\d6\TextField
- * @group text
- * @group legacy
- */
-class TextFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new TextField([], 'text', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // setProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to setProcessOfProperty().
-    $migration->setProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFilteredTextFieldValues() {
-    $field_info = [
-      'widget_type' => 'text_textfield',
-    ];
-    $this->plugin->processFieldValues($this->migration, 'body', $field_info);
-
-    $process = $this->migration->getProcess();
-    $this->assertSame('iterator', $process['plugin']);
-    $this->assertSame('body', $process['source']);
-    $this->assertSame('value', $process['process']['value']);
-
-    // Ensure that filter format IDs will be looked up in the filter format
-    // migrations.
-    $lookup = $process['process']['format'][2];
-    $this->assertSame('migration', $lookup['plugin']);
-    $this->assertContains('d6_filter_format', $lookup['migration']);
-    $this->assertContains('d7_filter_format', $lookup['migration']);
-    $this->assertSame('format', $lookup['source']);
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessBooleanTextImplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo\nbar",
-      ]
-    ];
-    $this->plugin->processFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'bar' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessBooleanTextExplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo|Foo\nbaz|Baz",
-      ]
-    ];
-    $this->plugin->processFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'baz' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['string_long', 'text_textfield', ['text_processing' => FALSE]],
-      ['string', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 128,
-        ],
-      ],
-      ['string_long', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['text_long', 'text_textfield', ['text_processing' => TRUE]],
-      ['text', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 128,
-        ],
-      ],
-      ['text_long', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['list_string', 'optionwidgets_buttons'],
-      ['list_string', 'optionwidgets_select'],
-      ['boolean', 'optionwidgets_onoff'],
-      ['text_long', 'text_textarea', ['text_processing' => TRUE]],
-      ['string_long', 'text_textarea', ['text_processing' => FALSE]],
-      [NULL, 'undefined'],
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/text/tests/src/Unit/Migrate/d7/TextFieldTest.php b/core/modules/text/tests/src/Unit/Migrate/d7/TextFieldTest.php
deleted file mode 100644
index 5f7622faef..0000000000
--- a/core/modules/text/tests/src/Unit/Migrate/d7/TextFieldTest.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-namespace Drupal\Tests\text\Unit\Migrate\d7;
-
-use Drupal\Tests\text\Unit\Migrate\d6\TextFieldTest as D6TextFieldTest;
-
-/**
- * @coversDefaultClass \Drupal\text\Plugin\migrate\field\d7\TextField
- * @group text
- * @group legacy
- */
-class TextFieldTest extends D6TextFieldTest {}
diff --git a/core/modules/text/tests/src/Unit/Plugin/migrate/cckfield/TextCckTest.php b/core/modules/text/tests/src/Unit/Plugin/migrate/cckfield/TextCckTest.php
deleted file mode 100644
index 6f2d967029..0000000000
--- a/core/modules/text/tests/src/Unit/Plugin/migrate/cckfield/TextCckTest.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace Drupal\Tests\text\Unit\Plugin\migrate\cckfield;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\text\Plugin\migrate\cckfield\TextField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\text\Plugin\migrate\cckfield\TextField
- * @group text
- * @group legacy
- */
-class TextCckTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new TextField([], 'text', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processCckFieldValues() method will call
-    // setProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to setProcessOfProperty().
-    $migration->setProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessFilteredTextFieldValues() {
-    $field_info = [
-      'widget_type' => 'text_textfield',
-    ];
-    $this->plugin->processCckFieldValues($this->migration, 'body', $field_info);
-
-    $process = $this->migration->getProcess();
-    $this->assertSame('iterator', $process['plugin']);
-    $this->assertSame('body', $process['source']);
-    $this->assertSame('value', $process['process']['value']);
-
-    // Ensure that filter format IDs will be looked up in the filter format
-    // migrations.
-    $lookup = $process['process']['format'][2];
-    $this->assertSame('migration', $lookup['plugin']);
-    $this->assertContains('d6_filter_format', $lookup['migration']);
-    $this->assertContains('d7_filter_format', $lookup['migration']);
-    $this->assertSame('format', $lookup['source']);
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessBooleanTextImplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo\nbar",
-      ]
-    ];
-    $this->plugin->processCckFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'bar' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * @covers ::processCckFieldValues
-   */
-  public function testProcessBooleanTextExplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo|Foo\nbaz|Baz",
-      ]
-    ];
-    $this->plugin->processCckFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'baz' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['string_long', 'text_textfield', ['text_processing' => FALSE]],
-      ['string', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 128,
-        ],
-      ],
-      ['string_long', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['text_long', 'text_textfield', ['text_processing' => TRUE]],
-      ['text', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 128,
-        ],
-      ],
-      ['text_long', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['list_string', 'optionwidgets_buttons'],
-      ['list_string', 'optionwidgets_select'],
-      ['boolean', 'optionwidgets_onoff'],
-      ['text_long', 'text_textarea', ['text_processing' => TRUE]],
-      ['string_long', 'text_textarea', ['text_processing' => FALSE]],
-      [NULL, 'undefined'],
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row(['widget_type' => $widget_type], ['widget_type' => []]);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/text/tests/src/Unit/Plugin/migrate/field/d6/TextFieldTest.php b/core/modules/text/tests/src/Unit/Plugin/migrate/field/d6/TextFieldTest.php
deleted file mode 100644
index 52418fe371..0000000000
--- a/core/modules/text/tests/src/Unit/Plugin/migrate/field/d6/TextFieldTest.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace Drupal\Tests\text\Unit\Plugin\migrate\field\d6;
-
-use Drupal\migrate\Plugin\MigrationInterface;
-use Drupal\migrate\Row;
-use Drupal\Tests\UnitTestCase;
-use Drupal\text\Plugin\migrate\field\d6\TextField;
-use Prophecy\Argument;
-
-/**
- * @coversDefaultClass \Drupal\text\Plugin\migrate\field\d6\TextField
- * @group text
- */
-class TextFieldTest extends UnitTestCase {
-
-  /**
-   * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface
-   */
-  protected $plugin;
-
-  /**
-   * @var \Drupal\migrate\Plugin\MigrationInterface
-   */
-  protected $migration;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    $this->plugin = new TextField([], 'text', []);
-
-    $migration = $this->prophesize(MigrationInterface::class);
-
-    // The plugin's processFieldValues() method will call
-    // setProcessOfProperty() and return nothing. So, in order to examine the
-    // process pipeline created by the plugin, we need to ensure that
-    // getProcess() always returns the last input to setProcessOfProperty().
-    $migration->setProcessOfProperty(Argument::type('string'), Argument::type('array'))
-      ->will(function($arguments) use ($migration) {
-        $migration->getProcess()->willReturn($arguments[1]);
-      });
-
-    $this->migration = $migration->reveal();
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessFilteredTextFieldValues() {
-    $field_info = [
-      'widget_type' => 'text_textfield',
-    ];
-    $this->plugin->processFieldValues($this->migration, 'body', $field_info);
-
-    $process = $this->migration->getProcess();
-    $this->assertSame('iterator', $process['plugin']);
-    $this->assertSame('body', $process['source']);
-    $this->assertSame('value', $process['process']['value']);
-
-    // Ensure that filter format IDs will be looked up in the filter format
-    // migrations.
-    $lookup = $process['process']['format'][2];
-    $this->assertSame('migration', $lookup['plugin']);
-    $this->assertContains('d6_filter_format', $lookup['migration']);
-    $this->assertContains('d7_filter_format', $lookup['migration']);
-    $this->assertSame('format', $lookup['source']);
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessBooleanTextImplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo\nbar",
-      ]
-    ];
-    $this->plugin->processFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'bar' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * @covers ::processFieldValues
-   */
-  public function testProcessBooleanTextExplicitValues() {
-    $info = [
-      'widget_type' => 'optionwidgets_onoff',
-      'global_settings' => [
-        'allowed_values' => "foo|Foo\nbaz|Baz",
-      ]
-    ];
-    $this->plugin->processFieldValues($this->migration, 'field', $info);
-
-    $expected = [
-      'value' => [
-        'plugin' => 'static_map',
-        'source' => 'value',
-        'default_value' => 0,
-        'map' => [
-          'baz' => 1,
-        ],
-      ],
-    ];
-    $this->assertSame($expected, $this->migration->getProcess()['process']);
-  }
-
-  /**
-   * Data provider for testGetFieldType().
-   */
-  public function getFieldTypeProvider() {
-    return [
-      ['string_long', 'text_textfield', ['text_processing' => FALSE]],
-      ['string', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 128,
-        ],
-      ],
-      ['string_long', 'text_textfield', [
-          'text_processing' => FALSE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['text_long', 'text_textfield', ['text_processing' => TRUE]],
-      ['text', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 128,
-        ],
-      ],
-      ['text_long', 'text_textfield', [
-          'text_processing' => TRUE,
-          'max_length' => 4096,
-        ],
-      ],
-      ['list_string', 'optionwidgets_buttons'],
-      ['list_string', 'optionwidgets_select'],
-      ['boolean', 'optionwidgets_onoff'],
-      ['text_long', 'text_textarea', ['text_processing' => TRUE]],
-      ['string_long', 'text_textarea', ['text_processing' => FALSE]],
-      [NULL, 'undefined'],
-    ];
-  }
-
-  /**
-   * @covers ::getFieldType
-   * @dataProvider getFieldTypeProvider
-   */
-  public function testGetFieldType($expected_type, $widget_type, array $settings = []) {
-    $row = new Row();
-    $row->setSourceProperty('widget_type', $widget_type);
-    $row->setSourceProperty('global_settings', $settings);
-    $this->assertSame($expected_type, $this->plugin->getFieldType($row));
-  }
-
-}
diff --git a/core/modules/text/tests/src/Unit/Plugin/migrate/field/d7/TextFieldTest.php b/core/modules/text/tests/src/Unit/Plugin/migrate/field/d7/TextFieldTest.php
deleted file mode 100644
index f1b217280c..0000000000
--- a/core/modules/text/tests/src/Unit/Plugin/migrate/field/d7/TextFieldTest.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-namespace Drupal\Tests\text\Unit\Plugin\migrate\field\d7;
-
-use Drupal\Tests\text\Unit\Plugin\migrate\field\d6\TextFieldTest as D6TextFieldTest;
-
-/**
- * @coversDefaultClass \Drupal\text\Plugin\migrate\field\d7\TextField
- * @group text
- */
-class TextFieldTest extends D6TextFieldTest {}
diff --git a/core/modules/toolbar/toolbar.api.php b/core/modules/toolbar/toolbar.api.php
index 2ae71fb937..b623082744 100644
--- a/core/modules/toolbar/toolbar.api.php
+++ b/core/modules/toolbar/toolbar.api.php
@@ -109,7 +109,7 @@ function hook_toolbar() {
       '#heading' => t('Shopping cart actions'),
       'shopping_cart' => [
         '#theme' => 'item_list',
-        '#items' => [/* An item list renderable array */ ],
+        '#items' => [ /* An item list renderable array */ ],
       ],
     ],
     '#weight' => 150,
diff --git a/core/modules/tracker/migration_templates/d7_tracker_settings.yml b/core/modules/tracker/migration_templates/d7_tracker_settings.yml
index ac61d7dbe2..ce06cbd84a 100644
--- a/core/modules/tracker/migration_templates/d7_tracker_settings.yml
+++ b/core/modules/tracker/migration_templates/d7_tracker_settings.yml
@@ -6,7 +6,6 @@ source:
   plugin: variable
   variables:
     - tracker_batch_size
-  source_module: tracker
 process:
   cron_index_limit: tracker_batch_size
 destination:
diff --git a/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerNode.php b/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerNode.php
index 2805b7d754..ffdc5cd332 100644
--- a/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerNode.php
+++ b/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerNode.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_tracker_node",
- *   source_module = "tracker"
+ *   source_provider = "tracker"
  * )
  */
 class TrackerNode extends DrupalSqlBase {
diff --git a/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerUser.php b/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerUser.php
index 4991dbe221..9ce3ff3166 100644
--- a/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerUser.php
+++ b/core/modules/tracker/src/Plugin/migrate/source/d7/TrackerUser.php
@@ -9,7 +9,7 @@
  *
  * @MigrateSource(
  *   id = "d7_tracker_user",
- *   source_module = "tracker"
+ *   source_provider = "tracker"
  * )
  */
 class TrackerUser extends DrupalSqlBase {
diff --git a/core/modules/update/migration_templates/update_settings.yml b/core/modules/update/migration_templates/update_settings.yml
index a7adfd7dc6..ad22472355 100644
--- a/core/modules/update/migration_templates/update_settings.yml
+++ b/core/modules/update/migration_templates/update_settings.yml
@@ -11,7 +11,6 @@ source:
     - update_notification_threshold
     - update_notify_emails
     - update_check_frequency
-  source_module: update
 process:
   'fetch/max_attempts': update_max_fetch_attempts
   'fetch/url': update_fetch_url
diff --git a/core/modules/update/src/Form/UpdateManagerUpdate.php b/core/modules/update/src/Form/UpdateManagerUpdate.php
index 0b3196865c..60f506af04 100644
--- a/core/modules/update/src/Form/UpdateManagerUpdate.php
+++ b/core/modules/update/src/Form/UpdateManagerUpdate.php
@@ -181,12 +181,10 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       }
 
       // Use the project title for the tableselect checkboxes.
-      $entry['title'] = [
-        'data' => [
-          '#title' => $entry['title'],
-          '#markup' => $entry['title'],
-        ],
-      ];
+      $entry['title'] = ['data' => [
+        '#title' => $entry['title'],
+        '#markup' => $entry['title'],
+      ]];
       $entry['#attributes'] = ['class' => ['update-' . $type]];
 
       // Drupal core needs to be upgraded manually.
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index 385434a230..32b5b8cc87 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -349,7 +349,7 @@ function update_get_available($refresh = FALSE) {
   foreach ($projects as $key => $project) {
     // If there's no data at all, we clearly need to fetch some.
     if (empty($available[$key])) {
-      // update_create_fetch_task($project);
+      //update_create_fetch_task($project);
       \Drupal::service('update.processor')->createFetchTask($project);
       $needs_refresh = TRUE;
       continue;
diff --git a/core/modules/user/config/schema/user.schema.yml b/core/modules/user/config/schema/user.schema.yml
index 2f9bda44f2..627d8a6960 100644
--- a/core/modules/user/config/schema/user.schema.yml
+++ b/core/modules/user/config/schema/user.schema.yml
@@ -166,10 +166,8 @@ condition.plugin.user_role:
       sequence:
         type: string
 
-# Schema for the entity reference 'default:user' selection handler settings.
 entity_reference_selection.default:user:
-  type: entity_reference_selection.default
-  label: 'User selection handler settings'
+  type: entity_reference_selection
   mapping:
     filter:
       type: mapping
diff --git a/core/modules/user/migration_templates/d6_user_mail.yml b/core/modules/user/migration_templates/d6_user_mail.yml
index 9b25b943f7..b06b6ea214 100644
--- a/core/modules/user/migration_templates/d6_user_mail.yml
+++ b/core/modules/user/migration_templates/d6_user_mail.yml
@@ -19,7 +19,6 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
-  source_module: user
 process:
   'status_activated/subject':
     plugin: convert_tokens
diff --git a/core/modules/user/migration_templates/d6_user_settings.yml b/core/modules/user/migration_templates/d6_user_settings.yml
index 2dfa946fcb..6e25ece376 100644
--- a/core/modules/user/migration_templates/d6_user_settings.yml
+++ b/core/modules/user/migration_templates/d6_user_settings.yml
@@ -10,7 +10,6 @@ source:
     - user_email_verification
     - user_register
     - anonymous
-  source_module: user
 process:
   'notify/status_blocked': user_mail_status_blocked_notify
   'notify/status_activated': user_mail_status_activated_notify
diff --git a/core/modules/user/migration_templates/d7_user.yml b/core/modules/user/migration_templates/d7_user.yml
index 54c8805875..ae523844b1 100644
--- a/core/modules/user/migration_templates/d7_user.yml
+++ b/core/modules/user/migration_templates/d7_user.yml
@@ -55,3 +55,4 @@ migration_dependencies:
     - user_picture_field_instance
     - user_picture_entity_display
     - user_picture_entity_form_display
+    - d7_field_instance
diff --git a/core/modules/user/migration_templates/d7_user_flood.yml b/core/modules/user/migration_templates/d7_user_flood.yml
index db08753451..ae00ce08cf 100644
--- a/core/modules/user/migration_templates/d7_user_flood.yml
+++ b/core/modules/user/migration_templates/d7_user_flood.yml
@@ -10,7 +10,6 @@ source:
     - user_failed_login_ip_window
     - user_failed_login_user_window
     - user_failed_login_user_limit
-  source_module: user
 process:
   uid_only: user_failed_login_identifier_uid_only
   ip_limit: user_failed_login_ip_limit
diff --git a/core/modules/user/migration_templates/d7_user_mail.yml b/core/modules/user/migration_templates/d7_user_mail.yml
index 81051ef47f..0c5e74c32b 100644
--- a/core/modules/user/migration_templates/d7_user_mail.yml
+++ b/core/modules/user/migration_templates/d7_user_mail.yml
@@ -19,7 +19,6 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
-  source_module: user
 process:
    'status_activated/subject': user_mail_status_activated_subject
    'status_activated/body': user_mail_status_activated_body
diff --git a/core/modules/user/migration_templates/user_picture_field.yml b/core/modules/user/migration_templates/user_picture_field.yml
index 7f7134de92..ff8bd82749 100644
--- a/core/modules/user/migration_templates/user_picture_field.yml
+++ b/core/modules/user/migration_templates/user_picture_field.yml
@@ -12,7 +12,6 @@ source:
     type: image
     name: user_picture
     cardinality: 1
-  source_module: user
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/name'
diff --git a/core/modules/user/src/Access/LoginStatusCheck.php b/core/modules/user/src/Access/LoginStatusCheck.php
index c3784206ae..3212c0a71d 100644
--- a/core/modules/user/src/Access/LoginStatusCheck.php
+++ b/core/modules/user/src/Access/LoginStatusCheck.php
@@ -26,11 +26,7 @@ class LoginStatusCheck implements AccessInterface {
   public function access(AccountInterface $account, Route $route) {
     $required_status = filter_var($route->getRequirement('_user_is_logged_in'), FILTER_VALIDATE_BOOLEAN);
     $actual_status = $account->isAuthenticated();
-    $access_result = AccessResult::allowedIf($required_status === $actual_status)->addCacheContexts(['user.roles:authenticated']);
-    if (!$access_result->isAllowed()) {
-      $access_result->setReason($required_status === TRUE ? 'This route can only be accessed by authenticated users.' : 'This route can only be accessed by anonymous users.');
-    }
-    return $access_result;
+    return AccessResult::allowedIf($required_status === $actual_status)->addCacheContexts(['user.roles:authenticated']);
   }
 
 }
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index f254ccff93..7529532581 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -9,7 +9,6 @@
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\user\RoleInterface;
-use Drupal\user\TimeZoneItem;
 use Drupal\user\UserInterface;
 
 /**
@@ -499,7 +498,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->addPropertyConstraints('value', [
         'AllowedValues' => ['callback' => __CLASS__ . '::getAllowedTimezones'],
       ]);
-    $fields['timezone']->getItemDefinition()->setClass(TimeZoneItem::class);
 
     $fields['status'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('User status'))
diff --git a/core/modules/user/src/Form/UserPasswordForm.php b/core/modules/user/src/Form/UserPasswordForm.php
index 972f8250b3..ea224fe439 100644
--- a/core/modules/user/src/Form/UserPasswordForm.php
+++ b/core/modules/user/src/Form/UserPasswordForm.php
@@ -60,6 +60,9 @@ public function getFormId() {
 
   /**
    * {@inheritdoc}
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     $form['name'] = [
diff --git a/core/modules/user/src/Form/UserPermissionsForm.php b/core/modules/user/src/Form/UserPermissionsForm.php
index 26f26c9263..3c5e46b0db 100644
--- a/core/modules/user/src/Form/UserPermissionsForm.php
+++ b/core/modules/user/src/Form/UserPermissionsForm.php
@@ -129,16 +129,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     foreach ($permissions_by_provider as $provider => $permissions) {
       // Module name.
-      $form['permissions'][$provider] = [
-        [
-          '#wrapper_attributes' => [
-            'colspan' => count($role_names) + 1,
-            'class' => ['module'],
-            'id' => 'module-' . $provider,
-          ],
-          '#markup' => $this->moduleHandler->getName($provider),
+      $form['permissions'][$provider] = [[
+        '#wrapper_attributes' => [
+          'colspan' => count($role_names) + 1,
+          'class' => ['module'],
+          'id' => 'module-' . $provider,
         ],
-      ];
+        '#markup' => $this->moduleHandler->getName($provider),
+      ]];
       foreach ($permissions as $perm => $perm_item) {
         // Fill in default values for the permission.
         $perm_item += [
diff --git a/core/modules/user/src/Form/UserPermissionsRoleSpecificForm.php b/core/modules/user/src/Form/UserPermissionsRoleSpecificForm.php
index b8caf7bbf4..4281a44b97 100644
--- a/core/modules/user/src/Form/UserPermissionsRoleSpecificForm.php
+++ b/core/modules/user/src/Form/UserPermissionsRoleSpecificForm.php
@@ -25,14 +25,10 @@ protected function getRoles() {
   }
 
   /**
-   * Builds the user permissions administration form for a specific role.
+   * {@inheritdoc}
    *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The current state of the form.
-   * @param \Drupal\user\RoleInterface|null $user_role
-   *   (optional) The user role used for this form. Defaults to NULL.
+   * @param string $role_id
+   *   The user role ID used for this form.
    */
   public function buildForm(array $form, FormStateInterface $form_state, RoleInterface $user_role = NULL) {
     $this->userRole = $user_role;
diff --git a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php
index d06a81c41e..feec81b468 100644
--- a/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php
+++ b/core/modules/user/src/Plugin/EntityReferenceSelection/UserSelection.php
@@ -83,26 +83,21 @@ public static function create(ContainerInterface $container, array $configuratio
   /**
    * {@inheritdoc}
    */
-  public function defaultConfiguration() {
-    return [
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $selection_handler_settings = $this->configuration['handler_settings'];
+
+    // Merge in default values.
+    $selection_handler_settings += [
       'filter' => [
         'type' => '_none',
-        'role' => NULL,
       ],
       'include_anonymous' => TRUE,
-    ] + parent::defaultConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $configuration = $this->getConfiguration();
+    ];
 
     $form['include_anonymous'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Include the anonymous user.'),
-      '#default_value' => $configuration['include_anonymous'],
+      '#default_value' => $selection_handler_settings['include_anonymous'],
     ];
 
     // Add user specific filter options.
@@ -115,7 +110,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       ],
       '#ajax' => TRUE,
       '#limit_validation_errors' => [],
-      '#default_value' => $configuration['filter']['type'],
+      '#default_value' => $selection_handler_settings['filter']['type'],
     ];
 
     $form['filter']['settings'] = [
@@ -124,13 +119,18 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#process' => [['\Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem', 'formProcessMergeParent']],
     ];
 
-    if ($configuration['filter']['type'] == 'role') {
+    if ($selection_handler_settings['filter']['type'] == 'role') {
+      // Merge in default values.
+      $selection_handler_settings['filter'] += [
+        'role' => NULL,
+      ];
+
       $form['filter']['settings']['role'] = [
         '#type' => 'checkboxes',
         '#title' => $this->t('Restrict to the selected roles'),
         '#required' => TRUE,
         '#options' => array_diff_key(user_role_names(TRUE), [RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID]),
-        '#default_value' => $configuration['filter']['role'],
+        '#default_value' => $selection_handler_settings['filter']['role'],
       ];
     }
 
@@ -144,12 +144,11 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
    */
   protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
     $query = parent::buildEntityQuery($match, $match_operator);
-
-    $configuration = $this->getConfiguration();
+    $handler_settings = $this->configuration['handler_settings'];
 
     // Filter out the Anonymous user if the selection handler is configured to
     // exclude it.
-    if (!$configuration['include_anonymous']) {
+    if (isset($handler_settings['include_anonymous']) && !$handler_settings['include_anonymous']) {
       $query->condition('uid', 0, '<>');
     }
 
@@ -159,8 +158,8 @@ protected function buildEntityQuery($match = NULL, $match_operator = 'CONTAINS')
     }
 
     // Filter by role.
-    if (!empty($configuration['filter']['role'])) {
-      $query->condition('roles', $configuration['filter']['role'], 'IN');
+    if (!empty($handler_settings['filter']['role'])) {
+      $query->condition('roles', $handler_settings['filter']['role'], 'IN');
     }
 
     // Adding the permission check is sadly insufficient for users: core
@@ -192,10 +191,10 @@ public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
   public function validateReferenceableNewEntities(array $entities) {
     $entities = parent::validateReferenceableNewEntities($entities);
     // Mirror the conditions checked in buildEntityQuery().
-    if ($role = $this->getConfiguration()['filter']['role']) {
-      $entities = array_filter($entities, function ($user) use ($role) {
+    if (!empty($this->configuration['handler_settings']['filter']['role'])) {
+      $entities = array_filter($entities, function ($user) {
         /** @var \Drupal\user\UserInterface $user */
-        return !empty(array_intersect($user->getRoles(), $role));
+        return !empty(array_intersect($user->getRoles(), $this->configuration['handler_settings']['filter']['role']));
       });
     }
     if (!$this->currentUser->hasPermission('administer users')) {
@@ -211,10 +210,9 @@ public function validateReferenceableNewEntities(array $entities) {
    * {@inheritdoc}
    */
   public function entityQueryAlter(SelectInterface $query) {
-    parent::entityQueryAlter($query);
-
     // Bail out early if we do not need to match the Anonymous user.
-    if (!$this->getConfiguration()['include_anonymous']) {
+    $handler_settings = $this->configuration['handler_settings'];
+    if (isset($handler_settings['include_anonymous']) && !$handler_settings['include_anonymous']) {
       return;
     }
 
diff --git a/core/modules/user/src/Plugin/Search/UserSearch.php b/core/modules/user/src/Plugin/Search/UserSearch.php
index ca4820ca1e..063d3ef112 100644
--- a/core/modules/user/src/Plugin/Search/UserSearch.php
+++ b/core/modules/user/src/Plugin/Search/UserSearch.php
@@ -52,7 +52,7 @@ class UserSearch extends SearchPluginBase implements AccessibleInterface {
   /**
    * {@inheritdoc}
    */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+  static public function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static(
       $container->get('database'),
       $container->get('entity.manager'),
@@ -162,15 +162,13 @@ public function execute() {
    * {@inheritdoc}
    */
   public function getHelp() {
-    $help = [
-      'list' => [
-        '#theme' => 'item_list',
-        '#items' => [
-          $this->t('User search looks for user names and partial user names. Example: mar would match usernames mar, delmar, and maryjane.'),
-          $this->t('You can use * as a wildcard within your keyword. Example: m*r would match user names mar, delmar, and elementary.'),
-        ],
+    $help = ['list' => [
+      '#theme' => 'item_list',
+      '#items' => [
+        $this->t('User search looks for user names and partial user names. Example: mar would match usernames mar, delmar, and maryjane.'),
+        $this->t('You can use * as a wildcard within your keyword. Example: m*r would match user names mar, delmar, and elementary.'),
       ],
-    ];
+    ]];
 
     return $help;
   }
diff --git a/core/modules/user/src/Plugin/migrate/source/ProfileField.php b/core/modules/user/src/Plugin/migrate/source/ProfileField.php
index 93a0430d68..151d5017de 100644
--- a/core/modules/user/src/Plugin/migrate/source/ProfileField.php
+++ b/core/modules/user/src/Plugin/migrate/source/ProfileField.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "profile_field",
- *   source_module = "profile"
+ *   source_provider = "profile"
  * )
  */
 class ProfileField extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php b/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php
index b7013bae08..441fdc78c7 100644
--- a/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php
+++ b/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php
@@ -11,8 +11,7 @@
  * @todo Support default picture?
  *
  * @MigrateSource(
- *   id = "user_picture_instance",
- *   source_module = "user"
+ *   id = "user_picture_instance"
  * )
  */
 class UserPictureInstance extends DrupalSqlBase {
@@ -29,8 +28,7 @@ public function initializeIterator() {
         'file_directory' => $this->variableGet('user_picture_path', 'pictures'),
         'max_filesize' => $this->variableGet('user_picture_file_size', '30') . 'KB',
         'max_resolution' => $this->variableGet('user_picture_dimensions', '85x85'),
-      ],
-    ]);
+      ]]);
   }
 
   /**
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/ProfileFieldValues.php b/core/modules/user/src/Plugin/migrate/source/d6/ProfileFieldValues.php
index ac4929092d..80db9df969 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/ProfileFieldValues.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/ProfileFieldValues.php
@@ -10,7 +10,7 @@
  *
  * @MigrateSource(
  *   id = "d6_profile_field_values",
- *   source_module = "profile"
+ *   source_provider = "profile"
  * )
  */
 class ProfileFieldValues extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/Role.php b/core/modules/user/src/Plugin/migrate/source/d6/Role.php
index a809b07dc0..82ad3e9932 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/Role.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/Role.php
@@ -9,8 +9,7 @@
  * Drupal 6 role source from database.
  *
  * @MigrateSource(
- *   id = "d6_user_role",
- *   source_module = "user"
+ *   id = "d6_user_role"
  * )
  */
 class Role extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/User.php b/core/modules/user/src/Plugin/migrate/source/d6/User.php
index 5213534b42..c8e9d19a70 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/User.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/User.php
@@ -9,8 +9,7 @@
  * Drupal 6 user source from database.
  *
  * @MigrateSource(
- *   id = "d6_user",
- *   source_module = "user"
+ *   id = "d6_user"
  * )
  */
 class User extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php b/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
index 0d5bd6bcb3..6b16ad4009 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
@@ -10,8 +10,7 @@
  * @todo Support default picture?
  *
  * @MigrateSource(
- *   id = "d6_user_picture",
- *   source_module = "user"
+ *   id = "d6_user_picture"
  * )
  */
 class UserPicture extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
index 72d18fd08f..8952ffdf82 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
@@ -9,8 +9,7 @@
  * Drupal 6 user picture source from database.
  *
  * @MigrateSource(
- *   id = "d6_user_picture_file",
- *   source_module = "user"
+ *   id = "d6_user_picture_file"
  * )
  */
 class UserPictureFile extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d7/Role.php b/core/modules/user/src/Plugin/migrate/source/d7/Role.php
index 7950991a8f..9245aab969 100644
--- a/core/modules/user/src/Plugin/migrate/source/d7/Role.php
+++ b/core/modules/user/src/Plugin/migrate/source/d7/Role.php
@@ -9,8 +9,7 @@
  * Drupal 7 role source from database.
  *
  * @MigrateSource(
- *   id = "d7_user_role",
- *   source_module = "user"
+ *   id = "d7_user_role"
  * )
  */
 class Role extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d7/User.php b/core/modules/user/src/Plugin/migrate/source/d7/User.php
index 41f9ab4d6e..408d998803 100644
--- a/core/modules/user/src/Plugin/migrate/source/d7/User.php
+++ b/core/modules/user/src/Plugin/migrate/source/d7/User.php
@@ -9,8 +9,7 @@
  * Drupal 7 user source from database.
  *
  * @MigrateSource(
- *   id = "d7_user",
- *   source_module = "user"
+ *   id = "d7_user"
  * )
  */
 class User extends FieldableEntity {
diff --git a/core/modules/user/src/Plugin/views/argument/Uid.php b/core/modules/user/src/Plugin/views/argument/Uid.php
index b2a022a2ac..77fac07322 100644
--- a/core/modules/user/src/Plugin/views/argument/Uid.php
+++ b/core/modules/user/src/Plugin/views/argument/Uid.php
@@ -51,7 +51,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * Override the behavior of title(). Get the name of the user.
    *
    * @return array
-   *   A list of usernames.
+   *    A list of usernames.
    */
   public function titleQuery() {
     return array_map(function($account) {
diff --git a/core/modules/user/src/Tests/RestRegisterUserTest.php b/core/modules/user/src/Tests/RestRegisterUserTest.php
index 450c552919..62e6bbc687 100644
--- a/core/modules/user/src/Tests/RestRegisterUserTest.php
+++ b/core/modules/user/src/Tests/RestRegisterUserTest.php
@@ -117,7 +117,7 @@ public function testRegisterUser() {
    * @param bool $include_password
    *   Whether to include a password in the user values.
    *
-   * @return string
+   * @return string Serialized user values.
    *   Serialized user values.
    */
   protected function createSerializedUser($name, $include_password = TRUE) {
diff --git a/core/modules/user/tests/src/Functional/Update/UserUpdateEmailToken.php b/core/modules/user/src/Tests/Update/UserUpdateEmailToken.php
similarity index 70%
rename from core/modules/user/tests/src/Functional/Update/UserUpdateEmailToken.php
rename to core/modules/user/src/Tests/Update/UserUpdateEmailToken.php
index a01c8a57fb..d321ee04f5 100644
--- a/core/modules/user/tests/src/Functional/Update/UserUpdateEmailToken.php
+++ b/core/modules/user/src/Tests/Update/UserUpdateEmailToken.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\user\Functional\Update;
+namespace Drupal\user\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 
 /**
  * Tests user email token upgrade path.
@@ -16,8 +16,8 @@ class UserUpdateEmailToken extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/drupal-8.user-email-token-2587275.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.user-email-token-2587275.php',
     ];
   }
 
diff --git a/core/modules/user/tests/src/Functional/Update/UserUpdateOrderPermissionsTest.php b/core/modules/user/src/Tests/Update/UserUpdateOrderPermissionsTest.php
similarity index 79%
rename from core/modules/user/tests/src/Functional/Update/UserUpdateOrderPermissionsTest.php
rename to core/modules/user/src/Tests/Update/UserUpdateOrderPermissionsTest.php
index 4d6e7f9600..344cb576e7 100644
--- a/core/modules/user/tests/src/Functional/Update/UserUpdateOrderPermissionsTest.php
+++ b/core/modules/user/src/Tests/Update/UserUpdateOrderPermissionsTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\user\Functional\Update;
+namespace Drupal\user\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\user\Entity\Role;
 
 /**
@@ -17,7 +17,7 @@ class UserUpdateOrderPermissionsTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
     ];
   }
 
diff --git a/core/modules/user/src/Tests/UserPasswordResetTest.php b/core/modules/user/src/Tests/UserPasswordResetTest.php
index 88fe72c698..528d38bc96 100644
--- a/core/modules/user/src/Tests/UserPasswordResetTest.php
+++ b/core/modules/user/src/Tests/UserPasswordResetTest.php
@@ -130,7 +130,7 @@ public function testUserPasswordReset() {
 
     // Verify that the password reset session has been destroyed.
     $this->drupalPostForm(NULL, $edit, t('Save'));
-    $this->assertText(t("Your current password is missing or incorrect; it's required to change the Password."), 'Password needed to make profile changes.');
+    $this->assertText(t('Your current password is missing or incorrect; it\'s required to change the Password.'), 'Password needed to make profile changes.');
 
     // Log out, and try to log in again using the same one-time link.
     $this->drupalLogout();
@@ -144,7 +144,7 @@ public function testUserPasswordReset() {
     $before = count($this->drupalGetMails(['id' => 'user_password_reset']));
     $edit = ['name' => $this->account->getEmail()];
     $this->drupalPostForm(NULL, $edit, t('Submit'));
-    $this->assertTrue(count($this->drupalGetMails(['id' => 'user_password_reset'])) === $before + 1, 'Email sent when requesting password reset using email address.');
+    $this->assertTrue( count($this->drupalGetMails(['id' => 'user_password_reset'])) === $before + 1, 'Email sent when requesting password reset using email address.');
 
     // Visit the user edit page without pass-reset-token and make sure it does
     // not cause an error.
diff --git a/core/modules/user/src/Tests/Views/AccessRoleTest.php b/core/modules/user/src/Tests/Views/AccessRoleTest.php
index addda24f27..57055572d2 100644
--- a/core/modules/user/src/Tests/Views/AccessRoleTest.php
+++ b/core/modules/user/src/Tests/Views/AccessRoleTest.php
@@ -128,8 +128,8 @@ public function testRenderCaching() {
     // @todo Fix this in https://www.drupal.org/node/2551037,
     // DisplayPluginBase::applyDisplayCacheabilityMetadata() is not invoked when
     // using buildBasicRenderable() and a Views access plugin returns FALSE.
-    // $this->assertTrue(in_array('user.roles', $build['#cache']['contexts']));
-    // $this->assertEqual([], $build['#cache']['tags']);
+    //$this->assertTrue(in_array('user.roles', $build['#cache']['contexts']));
+    //$this->assertEqual([], $build['#cache']['tags']);
     $this->assertEqual(Cache::PERMANENT, $build['#cache']['max-age']);
     $this->assertEqual($result, '');
   }
diff --git a/core/modules/user/src/TimeZoneItem.php b/core/modules/user/src/TimeZoneItem.php
deleted file mode 100644
index f109691575..0000000000
--- a/core/modules/user/src/TimeZoneItem.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Drupal\user;
-
-use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Field\Plugin\Field\FieldType\StringItem;
-use Drupal\user\Entity\User;
-
-/**
- * Defines a custom field item class for the 'timezone' user entity field.
- */
-class TimeZoneItem extends StringItem {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
-    $timezones = User::getAllowedTimezones();
-    // We need to vary the selected timezones since we're generating a sample.
-    $key = rand(0, count($timezones) - 1);
-    return $timezones[$key];
-  }
-
-}
diff --git a/core/modules/user/src/UserNameItem.php b/core/modules/user/src/UserNameItem.php
index e6a0f2d420..6a53eb5d06 100644
--- a/core/modules/user/src/UserNameItem.php
+++ b/core/modules/user/src/UserNameItem.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\user;
 
-use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\Plugin\Field\FieldType\StringItem;
 
 /**
@@ -24,14 +23,4 @@ public function isEmpty() {
     return $value === NULL || $value === '';
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
-    $values = parent::generateSampleValue($field_definition);
-    // User names larger than 60 characters won't pass validation.
-    $values['value'] = substr($values['value'], 0, UserInterface::USERNAME_MAX_LENGTH);
-    return $values;
-  }
-
 }
diff --git a/core/modules/user/tests/src/Functional/UserEditedOwnAccountTest.php b/core/modules/user/tests/src/Functional/UserEditedOwnAccountTest.php
index 0f574d7806..a6f4bede59 100644
--- a/core/modules/user/tests/src/Functional/UserEditedOwnAccountTest.php
+++ b/core/modules/user/tests/src/Functional/UserEditedOwnAccountTest.php
@@ -11,6 +11,13 @@
  */
 class UserEditedOwnAccountTest extends BrowserTestBase {
 
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['user_form_test'];
+
   public function testUserEditedOwnAccount() {
     // Change account setting 'Who can register accounts?' to Administrators
     // only.
diff --git a/core/modules/user/tests/src/Functional/UserLoginHttpTest.php b/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
index b12a72b58e..09dfebcecb 100644
--- a/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
+++ b/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
@@ -64,7 +64,7 @@ protected function setUp() {
    * @param string $format
    *   The format to use to make the request.
    *
-   * @return \Psr\Http\Message\ResponseInterface
+   * @return \Psr\Http\Message\ResponseInterface The HTTP response.
    *   The HTTP response.
    */
   protected function loginRequest($name, $pass, $format = 'json') {
@@ -181,11 +181,6 @@ protected function doTestLogin($format) {
     $this->assertEquals($account->getRoles(), $result_data['current_user']['roles']);
     $logout_token = $result_data['logout_token'];
 
-    // Logging in while already logged in results in a 403 with helpful message.
-    $response = $this->loginRequest($name, $pass, $format);
-    $this->assertSame(403, $response->getStatusCode());
-    $this->assertSame(['message' => 'This route can only be accessed by anonymous users.'], $this->serializer->decode($response->getBody(), $format));
-
     $response = $client->get($login_status_url, ['cookies' => $this->cookies]);
     $this->assertHttpResponse($response, 200, UserAuthenticationController::LOGGED_IN);
 
@@ -400,7 +395,7 @@ public function testPerUserLoginFloodControl() {
    * @param string $logout_token
    *   The csrf token for user logout.
    *
-   * @return \Psr\Http\Message\ResponseInterface
+   * @return \Psr\Http\Message\ResponseInterface The HTTP response.
    *   The HTTP response.
    */
   protected function logoutRequest($format = 'json', $logout_token = '') {
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
index bbfc41d77d..7d73dafecd 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
@@ -2,9 +2,10 @@
 
 namespace Drupal\Tests\user\Kernel\Migrate\d7;
 
+use Drupal\comment\Entity\CommentType;
 use Drupal\Core\Database\Database;
+use Drupal\node\Entity\NodeType;
 use Drupal\taxonomy\Entity\Vocabulary;
-use Drupal\Tests\migrate\Kernel\NodeCommentCombinationTrait;
 use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
 use Drupal\user\Entity\User;
 use Drupal\user\RoleInterface;
@@ -17,8 +18,6 @@
  */
 class MigrateUserTest extends MigrateDrupal7TestBase {
 
-  use NodeCommentCombinationTrait;
-
   /**
    * {@inheritdoc}
    */
@@ -44,12 +43,12 @@ protected function setUp() {
 
     // Prepare to migrate user pictures as well.
     $this->installEntitySchema('file');
-    $this->createNodeCommentCombination('page');
-    $this->createNodeCommentCombination('article');
-    $this->createNodeCommentCombination('blog');
-    $this->createNodeCommentCombination('book');
-    $this->createNodeCommentCombination('forum', 'comment_forum');
-    $this->createNodeCommentCombination('test_content_type');
+    $this->createType('page');
+    $this->createType('article');
+    $this->createType('blog');
+    $this->createType('book');
+    $this->createType('forum');
+    $this->createType('test_content_type');
     Vocabulary::create(['vid' => 'test_vocabulary'])->save();
     $this->executeMigrations([
       'language',
@@ -62,6 +61,25 @@ protected function setUp() {
     ]);
   }
 
+  /**
+   * Creates a node type with a corresponding comment type.
+   *
+   * @param string $id
+   *   The node type ID.
+   */
+  protected function createType($id) {
+    NodeType::create([
+      'type' => $id,
+      'label' => $this->randomString(),
+    ])->save();
+
+    CommentType::create([
+      'id' => 'comment_node_' . $id,
+      'label' => $this->randomString(),
+      'target_entity_type_id' => 'node',
+    ])->save();
+  }
+
   /**
    * Asserts various aspects of a user account.
    *
diff --git a/core/modules/user/tests/src/Kernel/UserEntityTest.php b/core/modules/user/tests/src/Kernel/UserEntityTest.php
index 73fe869ec3..1c501f049e 100644
--- a/core/modules/user/tests/src/Kernel/UserEntityTest.php
+++ b/core/modules/user/tests/src/Kernel/UserEntityTest.php
@@ -21,14 +21,6 @@ class UserEntityTest extends KernelTestBase {
    */
   public static $modules = ['system', 'user', 'field'];
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-    $this->installEntitySchema('user');
-  }
-
   /**
    * Tests some of the methods.
    *
@@ -73,22 +65,4 @@ public function testUserMethods() {
     $this->assertEqual([RoleInterface::AUTHENTICATED_ID, 'test_role_two'], $user->getRoles());
   }
 
-  /**
-   * Tests that all user fields validate properly.
-   *
-   * @see \Drupal\Core\Field\FieldItemListInterface::generateSampleItems
-   * @see \Drupal\Core\Field\FieldItemInterface::generateSampleValue()
-   * @see \Drupal\Core\Entity\FieldableEntityInterface::validate()
-   */
-  public function testUserValidation() {
-    $user = User::create([]);
-    foreach ($user as $field_name => $field) {
-      if (!in_array($field_name, ['uid'])) {
-        $user->$field_name->generateSampleItems();
-      }
-    }
-    $violations = $user->validate();
-    $this->assertFalse((bool) $violations->count());
-  }
-
 }
diff --git a/core/modules/user/tests/src/Kernel/UserValidationTest.php b/core/modules/user/tests/src/Kernel/UserValidationTest.php
index ef3a6f5cbd..f8be028f0e 100644
--- a/core/modules/user/tests/src/Kernel/UserValidationTest.php
+++ b/core/modules/user/tests/src/Kernel/UserValidationTest.php
@@ -40,7 +40,7 @@ protected function setUp() {
    * Tests user name validation.
    */
   public function testUsernames() {
-    $test_cases = [// '<username>' => array('<description>', 'assert<testName>'),
+    $test_cases = [ // '<username>' => array('<description>', 'assert<testName>'),
       'foo'                    => ['Valid username', 'assertNull'],
       'FOO'                    => ['Valid username', 'assertNull'],
       'Foo O\'Bar'             => ['Valid username', 'assertNull'],
diff --git a/core/modules/user/tests/src/Traits/UserCreationTrait.php b/core/modules/user/tests/src/Traits/UserCreationTrait.php
deleted file mode 100644
index ccccfa77ff..0000000000
--- a/core/modules/user/tests/src/Traits/UserCreationTrait.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-
-namespace Drupal\Tests\user\Traits;
-
-use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\user\Entity\Role;
-use Drupal\user\Entity\User;
-use Drupal\user\RoleInterface;
-
-/**
- * Provides methods to create additional test users and switch the currently
- * logged in one.
- *
- * This trait is meant to be used only by test classes.
- */
-trait UserCreationTrait {
-
-  /**
-   * Switch the current logged in user.
-   *
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The user account object.
-   */
-  protected function setCurrentUser(AccountInterface $account) {
-    \Drupal::currentUser()->setAccount($account);
-  }
-
-  /**
-   * Create a user with a given set of permissions.
-   *
-   * @param array $permissions
-   *   Array of permission names to assign to user. Note that the user always
-   *   has the default permissions derived from the "authenticated users" role.
-   * @param string $name
-   *   The user name.
-   * @param bool $admin
-   *   (optional) Whether the user should be an administrator
-   *   with all the available permissions.
-   *
-   * @return \Drupal\user\Entity\User|false
-   *   A fully loaded user object with pass_raw property, or FALSE if account
-   *   creation fails.
-   */
-  protected function createUser(array $permissions = [], $name = NULL, $admin = FALSE) {
-    // Create a role with the given permission set, if any.
-    $rid = FALSE;
-    if ($permissions) {
-      $rid = $this->createRole($permissions);
-      if (!$rid) {
-        return FALSE;
-      }
-    }
-
-    // Create a user assigned to that role.
-    $edit = [];
-    $edit['name'] = !empty($name) ? $name : $this->randomMachineName();
-    $edit['mail'] = $edit['name'] . '@example.com';
-    $edit['pass'] = user_password();
-    $edit['status'] = 1;
-    if ($rid) {
-      $edit['roles'] = [$rid];
-    }
-
-    if ($admin) {
-      $edit['roles'][] = $this->createAdminRole();
-    }
-
-    $account = User::create($edit);
-    $account->save();
-
-    $this->assertTrue($account->id(), SafeMarkup::format('User created with name %name and pass %pass', ['%name' => $edit['name'], '%pass' => $edit['pass']]), 'User login');
-    if (!$account->id()) {
-      return FALSE;
-    }
-
-    // Add the raw password so that we can log in as this user.
-    $account->pass_raw = $edit['pass'];
-    // Support BrowserTestBase as well.
-    $account->passRaw = $account->pass_raw;
-    return $account;
-  }
-
-  /**
-   * Creates an administrative role.
-   *
-   * @param string $rid
-   *   (optional) The role ID (machine name). Defaults to a random name.
-   * @param string $name
-   *   (optional) The label for the role. Defaults to a random string.
-   * @param int $weight
-   *   (optional) The weight for the role. Defaults NULL so that entity_create()
-   *   sets the weight to maximum + 1.
-   *
-   * @return string
-   *   Role ID of newly created role, or FALSE if role creation failed.
-   */
-  protected function createAdminRole($rid = NULL, $name = NULL, $weight = NULL) {
-    $rid = $this->createRole([], $rid, $name, $weight);
-    if ($rid) {
-      /** @var \Drupal\user\RoleInterface $role */
-      $role = Role::load($rid);
-      $role->setIsAdmin(TRUE);
-      $role->save();
-    }
-    return $rid;
-  }
-
-  /**
-   * Creates a role with specified permissions.
-   *
-   * @param array $permissions
-   *   Array of permission names to assign to role.
-   * @param string $rid
-   *   (optional) The role ID (machine name). Defaults to a random name.
-   * @param string $name
-   *   (optional) The label for the role. Defaults to a random string.
-   * @param int $weight
-   *   (optional) The weight for the role. Defaults NULL so that entity_create()
-   *   sets the weight to maximum + 1.
-   *
-   * @return string
-   *   Role ID of newly created role, or FALSE if role creation failed.
-   */
-  protected function createRole(array $permissions, $rid = NULL, $name = NULL, $weight = NULL) {
-    // Generate a random, lowercase machine name if none was passed.
-    if (!isset($rid)) {
-      $rid = strtolower($this->randomMachineName(8));
-    }
-    // Generate a random label.
-    if (!isset($name)) {
-      // In the role UI role names are trimmed and random string can start or
-      // end with a space.
-      $name = trim($this->randomString(8));
-    }
-
-    // Check the all the permissions strings are valid.
-    if (!$this->checkPermissions($permissions)) {
-      return FALSE;
-    }
-
-    // Create new role.
-    $role = Role::create([
-      'id' => $rid,
-      'label' => $name,
-    ]);
-    if (isset($weight)) {
-      $role->set('weight', $weight);
-    }
-    $result = $role->save();
-
-    $this->assertIdentical($result, SAVED_NEW, SafeMarkup::format('Created role ID @rid with name @name.', [
-      '@name' => var_export($role->label(), TRUE),
-      '@rid' => var_export($role->id(), TRUE),
-    ]), 'Role');
-
-    if ($result === SAVED_NEW) {
-      // Grant the specified permissions to the role, if any.
-      if (!empty($permissions)) {
-        $this->grantPermissions($role, $permissions);
-        $assigned_permissions = Role::load($role->id())->getPermissions();
-        $missing_permissions = array_diff($permissions, $assigned_permissions);
-        if (!$missing_permissions) {
-          $this->pass(SafeMarkup::format('Created permissions: @perms', ['@perms' => implode(', ', $permissions)]), 'Role');
-        }
-        else {
-          $this->fail(SafeMarkup::format('Failed to create permissions: @perms', ['@perms' => implode(', ', $missing_permissions)]), 'Role');
-        }
-      }
-      return $role->id();
-    }
-    else {
-      return FALSE;
-    }
-  }
-
-  /**
-   * Checks whether a given list of permission names is valid.
-   *
-   * @param array $permissions
-   *   The permission names to check.
-   *
-   * @return bool
-   *   TRUE if the permissions are valid, FALSE otherwise.
-   */
-  protected function checkPermissions(array $permissions) {
-    $available = array_keys(\Drupal::service('user.permissions')->getPermissions());
-    $valid = TRUE;
-    foreach ($permissions as $permission) {
-      if (!in_array($permission, $available)) {
-        $this->fail(SafeMarkup::format('Invalid permission %permission.', ['%permission' => $permission]), 'Role');
-        $valid = FALSE;
-      }
-    }
-    return $valid;
-  }
-
-  /**
-   * Grant permissions to a user role.
-   *
-   * @param \Drupal\user\RoleInterface $role
-   *   The ID of a user role to alter.
-   * @param array $permissions
-   *   (optional) A list of permission names to grant.
-   */
-  protected function grantPermissions(RoleInterface $role, array $permissions) {
-    foreach ($permissions as $permission) {
-      $role->grantPermission($permission);
-    }
-    $role->trustData()->save();
-  }
-
-}
diff --git a/core/modules/user/tests/src/Unit/Views/Argument/RolesRidTest.php b/core/modules/user/tests/src/Unit/Views/Argument/RolesRidTest.php
index 4e48fba030..b8f2888426 100644
--- a/core/modules/user/tests/src/Unit/Views/Argument/RolesRidTest.php
+++ b/core/modules/user/tests/src/Unit/Views/Argument/RolesRidTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\user\Unit\Views\Argument;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Tests\UnitTestCase;
 use Drupal\user\Entity\Role;
 use Drupal\user\Plugin\views\argument\RolesRid;
@@ -46,27 +44,23 @@ public function testTitleQuery() {
       ->with('label')
       ->will($this->returnValue('label'));
 
-    $entity_manager = new EntityManager();
-    $entity_type_manager = $this->getMock(EntityTypeManagerInterface::class);
-    $entity_type_manager->expects($this->any())
+    $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
+    $entity_manager->expects($this->any())
       ->method('getDefinition')
       ->with($this->equalTo('user_role'))
       ->will($this->returnValue($entity_type));
 
-    $entity_type_manager
+    $entity_manager
       ->expects($this->once())
       ->method('getStorage')
       ->with($this->equalTo('user_role'))
       ->will($this->returnValue($role_storage));
 
-    // Set up a minimal container to satisfy Drupal\Core\Entity\Entity's
-    // dependency on it.
+    // @todo \Drupal\Core\Entity\Entity::entityType() uses a global call to
+    //   entity_get_info(), which in turn wraps \Drupal::entityManager(). Set
+    //   the entity manager until this is fixed.
     $container = new ContainerBuilder();
     $container->set('entity.manager', $entity_manager);
-    $container->set('entity_type.manager', $entity_type_manager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager.
-    $entity_manager->setContainer($container);
     \Drupal::setContainer($container);
 
     $roles_rid_argument = new RolesRid([], 'user__roles_rid', [], $entity_manager);
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 19b9527a21..61faa3b4f0 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -78,7 +78,7 @@ function user_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dt>' . t('Setting permissions') . '</dt>';
       $output .= '<dd>' . t('After creating roles, you can set permissions for each role on the <a href=":permissions_user">Permissions page</a>. Granting a permission allows users who have been assigned a particular role to perform an action on the site, such as viewing content, editing or creating  a particular type of content, administering settings for a particular module, or using a particular function of the site (such as search).', [':permissions_user' => \Drupal::url('user.admin_permissions')]) . '</dd>';
       $output .= '<dt>' . t('Managing account settings') . '</dt>';
-      $output .= '<dd>' . t('The <a href=":accounts">Account settings page</a> allows you to manage settings for the displayed name of the Anonymous user role, personal contact forms, user registration settings, and account cancellation settings. On this page you can also manage settings for account personalization, and adapt the text for the email messages that users receive when they register or request a password recovery. You may also set which role is automatically assigned new permissions whenever a module is enabled (the Administrator role).', [':accounts' => \Drupal::url('entity.user.admin_form')]) . '</dd>';
+      $output .= '<dd>' . t('The <a href=":accounts">Account settings page</a> allows you to manage settings for the displayed name of the Anonymous user role, personal contact forms, user registration settings, and account cancellation settings. On this page you can also manage settings for account personalization, and adapt the text for the email messages that users receive when they register or request a password recovery. You may also set which role is automatically assigned new permissions whenever a module is enabled (the Administrator role).', [':accounts'  => \Drupal::url('entity.user.admin_form')]) . '</dd>';
       $output .= '<dt>' . t('Managing user account fields') . '</dt>';
       $output .= '<dd>' . t('Because User accounts are an entity type, you can extend them by adding fields through the Manage fields tab on the <a href=":accounts">Account settings page</a>. By adding fields for e.g., a picture, a biography, or address, you can a create a custom profile for the users of the website. For background information on entities and fields, see the <a href=":field_help">Field module help page</a>.', [':field_help' => (\Drupal::moduleHandler()->moduleExists('field')) ? \Drupal::url('help.page', ['name' => 'field']) : '#', ':accounts' => \Drupal::url('entity.user.admin_form')]) . '</dd>';
       $output .= '</dl>';
@@ -169,7 +169,7 @@ function user_entity_extra_field_info() {
 
   $fields['user']['user']['display']['member_for'] = [
     'label' => t('Member for'),
-    'description' => t("User module 'member for' view element."),
+    'description' => t('User module \'member for\' view element.'),
     'weight' => 5,
   ];
 
diff --git a/core/modules/views/config/schema/views.entity_reference.schema.yml b/core/modules/views/config/schema/views.entity_reference.schema.yml
index f13645ab43..027c62fa46 100644
--- a/core/modules/views/config/schema/views.entity_reference.schema.yml
+++ b/core/modules/views/config/schema/views.entity_reference.schema.yml
@@ -1,8 +1,8 @@
-# Schema for the entity reference 'views' selection handler settings.
+# Schema for the views entity reference selection plugins.
 
 entity_reference_selection.views:
-  type: entity_reference_selection
-  label: 'Views selection handler settings'
+  type: mapping
+  label: 'View handler settings'
   mapping:
     view:
       type: mapping
diff --git a/core/modules/views/config/schema/views.field.schema.yml b/core/modules/views/config/schema/views.field.schema.yml
index 48b6ef8907..562e8ca4d1 100644
--- a/core/modules/views/config/schema/views.field.schema.yml
+++ b/core/modules/views/config/schema/views.field.schema.yml
@@ -191,12 +191,6 @@ views.field.entity_link:
     text:
       type: label
       label: 'Text to display'
-    output_url_as_text:
-      type: boolean
-      label: 'Output the URL as text'
-    absolute:
-      type: boolean
-      label: 'Output an absolute link'
 
 views.field.entity_link_delete:
   type: views.field.entity_link
diff --git a/core/modules/views/config/schema/views.filter.schema.yml b/core/modules/views/config/schema/views.filter.schema.yml
index 18c13b687d..00eb11a976 100644
--- a/core/modules/views/config/schema/views.filter.schema.yml
+++ b/core/modules/views/config/schema/views.filter.schema.yml
@@ -142,10 +142,6 @@ views.filter.language:
   type: views.filter.in_operator
   label: 'Language'
 
-views.filter.latest_revision:
-  type: views_filter
-  label: 'Latest revision'
-
 views.filter_value.date:
   type: views.filter_value.numeric
   label: 'Date'
diff --git a/core/modules/views/src/Controller/ViewAjaxController.php b/core/modules/views/src/Controller/ViewAjaxController.php
index 2e0ea1841f..c40cf85766 100644
--- a/core/modules/views/src/Controller/ViewAjaxController.php
+++ b/core/modules/views/src/Controller/ViewAjaxController.php
@@ -142,7 +142,7 @@ public function ajaxView(Request $request) {
         throw new NotFoundHttpException();
       }
       $view = $this->executableFactory->get($entity);
-      if ($view && $view->access($display_id) && $view->setDisplay($display_id) && $view->display_handler->ajaxEnabled()) {
+      if ($view && $view->access($display_id)) {
         $response->setView($view);
         // Fix the current path for paging.
         if (!empty($path)) {
diff --git a/core/modules/views/src/EntityViewsData.php b/core/modules/views/src/EntityViewsData.php
index 49b0af80f8..2ba2086ac1 100644
--- a/core/modules/views/src/EntityViewsData.php
+++ b/core/modules/views/src/EntityViewsData.php
@@ -236,13 +236,6 @@ public function getViewsData() {
           'type' => 'INNER',
         ];
       }
-
-      // Add a filter for showing only the latest revisions of an entity.
-      $data[$revision_table]['latest_revision'] = [
-        'title' => $this->t('Is Latest Revision'),
-        'help' => $this->t('Restrict the view to only revisions that are the latest revision of their entity.'),
-        'filter' => ['id' => 'latest_revision'],
-      ];
     }
 
     $this->addEntityLinks($data[$base_table]);
diff --git a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
index 9911f61a0c..05ac9b99f1 100644
--- a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
+++ b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
@@ -2,12 +2,17 @@
 
 namespace Drupal\views\Plugin\EntityReferenceSelection;
 
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase;
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionTrait;
+use Drupal\Core\Database\Query\SelectInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 use Drupal\views\Views;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Plugin implementation of the 'selection' entity_reference.
@@ -19,37 +24,80 @@
  *   weight = 0
  * )
  */
-class ViewsSelection extends SelectionPluginBase implements ContainerFactoryPluginInterface {
+class ViewsSelection extends PluginBase implements SelectionInterface, ContainerFactoryPluginInterface {
 
-  use SelectionTrait;
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
 
   /**
-   * The loaded View object.
+   * The module handler service.
    *
-   * @var \Drupal\views\ViewExecutable;
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
    */
-  protected $view;
+  protected $moduleHandler;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * Constructs a new SelectionBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager service.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->entityManager = $entity_manager;
+    $this->moduleHandler = $module_handler;
+    $this->currentUser = $current_user;
+  }
 
   /**
    * {@inheritdoc}
    */
-  public function defaultConfiguration() {
-    return [
-      'view' => [
-        'view_name' => NULL,
-        'display_name' => NULL,
-        'arguments' => [],
-      ],
-    ] + parent::defaultConfiguration();
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity.manager'),
+      $container->get('module_handler'),
+      $container->get('current_user')
+    );
   }
 
+  /**
+   * The loaded View object.
+   *
+   * @var \Drupal\views\ViewExecutable;
+   */
+  protected $view;
+
   /**
    * {@inheritdoc}
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    $view_settings = $this->getConfiguration()['view'];
+    $selection_handler_settings = $this->configuration['handler_settings'];
+    $view_settings = !empty($selection_handler_settings['view']) ? $selection_handler_settings['view'] : [];
     $displays = Views::getApplicableViews('entity_reference_display');
     // Filter views that list the entity type we want, and group the separate
     // displays by view.
@@ -108,6 +156,16 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     return $form;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { }
+
   /**
    * Initializes a view.
    *
@@ -126,8 +184,9 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
    *   Return TRUE if the view was initialized, FALSE otherwise.
    */
   protected function initializeView($match = NULL, $match_operator = 'CONTAINS', $limit = 0, $ids = NULL) {
-    $view_name = $this->getConfiguration()['view']['view_name'];
-    $display_name = $this->getConfiguration()['view']['display_name'];
+    $handler_settings = $this->configuration['handler_settings'];
+    $view_name = $handler_settings['view']['view_name'];
+    $display_name = $handler_settings['view']['display_name'];
 
     // Check that the view is valid and the display still exists.
     $this->view = Views::getView($view_name);
@@ -152,8 +211,9 @@ protected function initializeView($match = NULL, $match_operator = 'CONTAINS', $
    * {@inheritdoc}
    */
   public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
-    $display_name = $this->getConfiguration()['view']['display_name'];
-    $arguments = $this->getConfiguration()['view']['arguments'];
+    $handler_settings = $this->configuration['handler_settings'];
+    $display_name = $handler_settings['view']['display_name'];
+    $arguments = $handler_settings['view']['arguments'];
     $result = [];
     if ($this->initializeView($match, $match_operator, $limit)) {
       // Get the results.
@@ -182,8 +242,9 @@ public function countReferenceableEntities($match = NULL, $match_operator = 'CON
    * {@inheritdoc}
    */
   public function validateReferenceableEntities(array $ids) {
-    $display_name = $this->getConfiguration()['view']['display_name'];
-    $arguments = $this->getConfiguration()['view']['arguments'];
+    $handler_settings = $this->configuration['handler_settings'];
+    $display_name = $handler_settings['view']['display_name'];
+    $arguments = $handler_settings['view']['arguments'];
     $result = [];
     if ($this->initializeView(NULL, 'CONTAINS', 0, $ids)) {
       // Get the results.
@@ -222,4 +283,9 @@ public static function settingsFormValidate($element, FormStateInterface $form_s
     $form_state->setValueForElement($element, $value);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function entityQueryAlter(SelectInterface $query) { }
+
 }
diff --git a/core/modules/views/src/Plugin/views/HandlerBase.php b/core/modules/views/src/Plugin/views/HandlerBase.php
index 4cc4e4bb16..8396c6bbf6 100644
--- a/core/modules/views/src/Plugin/views/HandlerBase.php
+++ b/core/modules/views/src/Plugin/views/HandlerBase.php
@@ -214,16 +214,16 @@ public function sanitizeValue($value, $type = NULL) {
    * Transform a string by a certain method.
    *
    * @param $string
-   *   The input you want to transform.
+   *    The input you want to transform.
    * @param $option
-   *   How do you want to transform it, possible values:
-   *   - upper: Uppercase the string.
-   *   - lower: lowercase the string.
-   *   - ucfirst: Make the first char uppercase.
-   *   - ucwords: Make each word in the string uppercase.
+   *    How do you want to transform it, possible values:
+   *      - upper: Uppercase the string.
+   *      - lower: lowercase the string.
+   *      - ucfirst: Make the first char uppercase.
+   *      - ucwords: Make each word in the string uppercase.
    *
    * @return string
-   *   The transformed string.
+   *    The transformed string.
    */
   protected function caseTransform($string, $option) {
     switch ($option) {
@@ -350,84 +350,80 @@ public function submitGroupByForm(&$form, FormStateInterface $form_state) {
    * If a handler has 'extra options' it will get a little settings widget and
    * another form called extra_options.
    */
-  public function hasExtraOptions() {
-    return FALSE;
-  }
+  public function hasExtraOptions() { return FALSE; }
 
   /**
    * Provide defaults for the handler.
    */
-  public function defineExtraOptions(&$option) {}
+  public function defineExtraOptions(&$option) { }
 
   /**
    * Provide a form for setting options.
    */
-  public function buildExtraOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function buildExtraOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Validate the options form.
    */
-  public function validateExtraOptionsForm($form, FormStateInterface $form_state) {}
+  public function validateExtraOptionsForm($form, FormStateInterface $form_state) { }
 
   /**
    * Perform any necessary changes to the form values prior to storage.
    * There is no need for this function to actually store the data.
    */
-  public function submitExtraOptionsForm($form, FormStateInterface $form_state) {}
+  public function submitExtraOptionsForm($form, FormStateInterface $form_state) { }
 
   /**
    * Determine if a handler can be exposed.
    */
-  public function canExpose() {
-    return FALSE;
-  }
+  public function canExpose() { return FALSE; }
 
   /**
    * Set new exposed option defaults when exposed setting is flipped
    * on.
    */
-  public function defaultExposeOptions() {}
+  public function defaultExposeOptions() { }
 
   /**
    * Get information about the exposed form for the form renderer.
    */
-  public function exposedInfo() {}
+  public function exposedInfo() { }
 
   /**
    * Render our chunk of the exposed handler form when selecting
    */
-  public function buildExposedForm(&$form, FormStateInterface $form_state) {}
+  public function buildExposedForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Validate the exposed handler form
    */
-  public function validateExposed(&$form, FormStateInterface $form_state) {}
+  public function validateExposed(&$form, FormStateInterface $form_state) { }
 
   /**
    * Submit the exposed handler form
    */
-  public function submitExposed(&$form, FormStateInterface $form_state) {}
+  public function submitExposed(&$form, FormStateInterface $form_state) { }
 
   /**
    * Form for exposed handler options.
    */
-  public function buildExposeForm(&$form, FormStateInterface $form_state) {}
+  public function buildExposeForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Validate the options form.
    */
-  public function validateExposeForm($form, FormStateInterface $form_state) {}
+  public function validateExposeForm($form, FormStateInterface $form_state) { }
 
   /**
    * Perform any necessary changes to the form exposes prior to storage.
    * There is no need for this function to actually store the data.
    */
-  public function submitExposeForm($form, FormStateInterface $form_state) {}
+  public function submitExposeForm($form, FormStateInterface $form_state) { }
 
   /**
    * Shortcut to display the expose/hide button.
    */
-  public function showExposeButton(&$form, FormStateInterface $form_state) {}
+  public function showExposeButton(&$form, FormStateInterface $form_state) { }
 
   /**
    * Shortcut to display the exposed options form.
@@ -481,7 +477,7 @@ public function query() {
   /**
    * {@inheritdoc}
    */
-  public function postExecute(&$values) {}
+  public function postExecute(&$values) { }
 
   /**
    * Provides a unique placeholders for handlers.
@@ -535,7 +531,7 @@ public function ensureMyTable() {
   /**
    * {@inheritdoc}
    */
-  public function adminSummary() {}
+  public function adminSummary() { }
 
   /**
    * Determine if this item is 'exposed', meaning it provides form elements
@@ -550,32 +546,24 @@ public function isExposed() {
   /**
    * Returns TRUE if the exposed filter works like a grouped filter.
    */
-  public function isAGroup() {
-    return FALSE;
-  }
+  public function isAGroup() { return FALSE; }
 
   /**
    * Define if the exposed input has to be submitted multiple times.
    * This is TRUE when exposed filters grouped are using checkboxes as
    * widgets.
    */
-  public function multipleExposedInput() {
-    return FALSE;
-  }
+  public function multipleExposedInput() { return FALSE; }
 
   /**
    * Take input from exposed handlers and assign to this handler, if necessary.
    */
-  public function acceptExposedInput($input) {
-    return TRUE;
-  }
+  public function acceptExposedInput($input) { return TRUE; }
 
   /**
    * If set to remember exposed input in the session, store it there.
    */
-  public function storeExposedInput($input, $status) {
-    return TRUE;
-  }
+  public function storeExposedInput($input, $status) { return TRUE; }
 
   /**
    * {@inheritdoc}
@@ -599,9 +587,7 @@ public function getJoin() {
   /**
    * {@inheritdoc}
    */
-  public function validate() {
-    return [];
-  }
+  public function validate() { return []; }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/views/src/Plugin/views/PluginBase.php b/core/modules/views/src/Plugin/views/PluginBase.php
index 5f9c9788de..e523ebafaf 100644
--- a/core/modules/views/src/Plugin/views/PluginBase.php
+++ b/core/modules/views/src/Plugin/views/PluginBase.php
@@ -155,9 +155,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
    * @return array
    *   Returns the options of this handler/plugin.
    */
-  protected function defineOptions() {
-    return [];
-  }
+  protected function defineOptions() { return []; }
 
   /**
    * Fills up the options of the plugin with defaults.
@@ -273,17 +271,17 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * {@inheritdoc}
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * {@inheritdoc}
    */
-  public function query() {}
+  public function query() { }
 
   /**
    * {@inheritdoc}
@@ -295,9 +293,7 @@ public function themeFunctions() {
   /**
    * {@inheritdoc}
    */
-  public function validate() {
-    return [];
-  }
+  public function validate() { return []; }
 
   /**
    * {@inheritdoc}
@@ -355,7 +351,7 @@ protected function viewsTokenReplace($text, $tokens) {
     foreach ($tokens as $token => $replacement) {
       // Twig wants a token replacement array stripped of curly-brackets.
       // Some Views tokens come with curly-braces, others do not.
-      // @todo: https://www.drupal.org/node/2544392
+      //@todo: https://www.drupal.org/node/2544392
       if (strpos($token, '{{') !== FALSE) {
         // Twig wants a token replacement array stripped of curly-brackets.
         $token = trim(str_replace(['{{', '}}'], '', $token));
diff --git a/core/modules/views/src/Plugin/views/area/AreaPluginBase.php b/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
index 476a808cd1..813e4306c0 100644
--- a/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
+++ b/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
@@ -107,7 +107,7 @@ public function preRender(array $results) {
    * @return array
    *   In any case we need a valid Drupal render array to return.
    */
-  abstract public function render($empty = FALSE);
+  public abstract function render($empty = FALSE);
 
   /**
    * Does that area have nothing to show.
diff --git a/core/modules/views/src/Plugin/views/argument/NumericArgument.php b/core/modules/views/src/Plugin/views/argument/NumericArgument.php
index 954171a64a..5cace4dbc3 100644
--- a/core/modules/views/src/Plugin/views/argument/NumericArgument.php
+++ b/core/modules/views/src/Plugin/views/argument/NumericArgument.php
@@ -86,7 +86,7 @@ public function title() {
   /**
    * Override for specific title lookups.
    * @return array
-   *   Returns all titles, if it's just one title it's an array with one entry.
+   *    Returns all titles, if it's just one title it's an array with one entry.
    */
   public function titleQuery() {
     return $this->value;
diff --git a/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php b/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
index 74a8ab203e..6cea74d4a0 100644
--- a/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
+++ b/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
@@ -42,7 +42,7 @@
    *
    * This needs to be overridden by every default argument handler to properly do what is needed.
    */
-  public function getArgument() {}
+  public function getArgument() { }
 
   /**
    * Sets the parent argument this plugin is associated with.
@@ -58,32 +58,28 @@ public function setArgument(ArgumentPluginBase $argument) {
    * Retrieve the options when this is a new access
    * control plugin
    */
-  protected function defineOptions() {
-    return [];
-  }
+  protected function defineOptions() { return []; }
 
   /**
    * Provide the default form for setting options.
    */
-  public function buildOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provide the default form form for validating options
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provide the default form form for submitting options
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) { }
 
   /**
    * Determine if the administrator has the privileges to use this
    * plugin
    */
-  public function access() {
-    return TRUE;
-  }
+  public function access() { return TRUE; }
 
   /**
    * If we don't have access to the form but are showing it anyway, ensure that
diff --git a/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php b/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
index 6e797b49b1..5f40430d2b 100644
--- a/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
+++ b/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
@@ -53,31 +53,27 @@ public function setArgument(ArgumentPluginBase $argument) {
   /**
    * Retrieves the options when this is a new access control plugin.
    */
-  protected function defineOptions() {
-    return [];
-  }
+  protected function defineOptions() { return []; }
 
   /**
    * Provides the default form for setting options.
    */
-  public function buildOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provides the default form for validating options.
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provides the default form for submitting options.
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) { }
 
   /**
    * Determines if the administrator has the privileges to use this plugin.
    */
-  public function access() {
-    return TRUE;
-  }
+  public function access() { return TRUE; }
 
   /**
    * Blocks user input when the form is shown but we don´t have access.
@@ -96,9 +92,7 @@ protected function checkAccess(&$form, $option_name) {
   /**
    * Performs validation for a given argument.
    */
-  public function validateArgument($arg) {
-    return TRUE;
-  }
+  public function validateArgument($arg) { return TRUE; }
 
   /**
    * Processes the summary arguments for displaying.
@@ -108,7 +102,7 @@ public function validateArgument($arg) {
    * for a faster query. But there are use cases where you want to use
    * the old value again, for example the summary.
    */
-  public function processSummaryArguments(&$args) {}
+  public function processSummaryArguments(&$args) { }
 
   /**
    * Returns a context definition for this argument.
@@ -117,7 +111,7 @@ public function processSummaryArguments(&$args) {}
    *   A context definition that represents the argument or NULL if that is
    *   not possible.
    */
-  public function getContextDefinition() {}
+  public function getContextDefinition() { }
 
 }
 
diff --git a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
index dff5eed926..36b8e19c9c 100644
--- a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
+++ b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
@@ -171,7 +171,7 @@ public function cacheFlush() {
    * All of the cached result data will be available in $view->result, as well,
    * so all ids used in the query should be discoverable.
    */
-  public function postRender(&$output) {}
+  public function postRender(&$output) { }
 
   /**
    * Calculates and sets a cache ID used for the result cache.
@@ -190,7 +190,7 @@ public function generateResultsKey() {
           $query = clone $build_info[$index];
           $query->preExecute();
           $build_info[$index] = [
-            'query' => (string) $query,
+            'query' => (string)$query,
             'arguments' => $query->getArguments(),
           ];
         }
diff --git a/core/modules/views/src/Plugin/views/display/DefaultDisplay.php b/core/modules/views/src/Plugin/views/display/DefaultDisplay.php
index 2d14cfb16c..ec01d6a300 100644
--- a/core/modules/views/src/Plugin/views/display/DefaultDisplay.php
+++ b/core/modules/views/src/Plugin/views/display/DefaultDisplay.php
@@ -28,9 +28,7 @@ class DefaultDisplay extends DisplayPluginBase {
    * Determine if this display is the 'default' display which contains
    * fallback settings
    */
-  public function isDefaultDisplay() {
-    return TRUE;
-  }
+  public function isDefaultDisplay() { return TRUE; }
 
   /**
    * The default execute handler fully renders the view.
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index a2e19a29d8..3744fea2bf 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -234,9 +234,7 @@ public function destroy() {
   /**
    * {@inheritdoc}
    */
-  public function isDefaultDisplay() {
-    return FALSE;
-  }
+  public function isDefaultDisplay() { return FALSE; }
 
   /**
    * {@inheritdoc}
@@ -396,7 +394,7 @@ public function usesAreas() {
   /**
    * {@inheritdoc}
    */
-  public function attachTo(ViewExecutable $view, $display_id, array &$build) {}
+  public function attachTo(ViewExecutable $view, $display_id, array &$build) { }
 
   /**
    * {@inheritdoc}
@@ -667,23 +665,17 @@ protected function defineOptions() {
   /**
    * {@inheritdoc}
    */
-  public function hasPath() {
-    return FALSE;
-  }
+  public function hasPath() { return FALSE; }
 
   /**
    * {@inheritdoc}
    */
-  public function usesLinkDisplay() {
-    return !$this->hasPath();
-  }
+  public function usesLinkDisplay() { return !$this->hasPath(); }
 
   /**
    * {@inheritdoc}
    */
-  public function usesExposedFormInBlock() {
-    return $this->hasPath();
-  }
+  public function usesExposedFormInBlock() { return $this->hasPath(); }
 
   /**
    * {@inheritdoc}
@@ -780,7 +772,7 @@ public function getOption($option) {
       return $this->default_display->getOption($option);
     }
 
-    if (isset($this->options[$option]) || array_key_exists($option, $this->options)) {
+    if (array_key_exists($option, $this->options)) {
       return $this->options[$option];
     }
   }
@@ -2059,7 +2051,7 @@ public function query() {
   /**
    * {@inheritdoc}
    */
-  public function renderFilters() {}
+  public function renderFilters() { }
 
   /**
    * {@inheritdoc}
@@ -2333,7 +2325,7 @@ public function getCacheMetadata() {
   /**
    * {@inheritdoc}
    */
-  public function execute() {}
+  public function execute() { }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php b/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php
index 630c0f0a15..d54fc1cdd6 100644
--- a/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php
@@ -36,45 +36,45 @@
   /**
    * Provide a form to edit options for this plugin.
    */
-  public function defineOptionsAlter(&$options) {}
+  public function defineOptionsAlter(&$options) { }
 
   /**
    * Provide a form to edit options for this plugin.
    */
-  public function buildOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Validate the options form.
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Handle any special handling on the validate form.
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Set up any variables on the view prior to execution.
    */
-  public function preExecute() {}
+  public function preExecute() { }
 
   /**
    * Inject anything into the query that the display_extender handler needs.
    */
-  public function query() {}
+  public function query() { }
 
   /**
    * Provide the default summary for options in the views UI.
    *
    * This output is returned as an array.
    */
-  public function optionsSummary(&$categories, &$options) {}
+  public function optionsSummary(&$categories, &$options) { }
 
   /**
    * Static member function to list which sections are defaultable
    * and what items each section contains.
    */
-  public function defaultableSections(&$sections, $section = NULL) {}
+  public function defaultableSections(&$sections, $section = NULL) { }
 
 }
 
diff --git a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
index 13d6b1122c..fffe084c72 100644
--- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
+++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -179,22 +179,22 @@ public function query() {
   /**
    * {@inheritdoc}
    */
-  public function preRender($values) {}
+  public function preRender($values) { }
 
   /**
    * {@inheritdoc}
    */
-  public function postRender(&$output) {}
+  public function postRender(&$output) { }
 
   /**
    * {@inheritdoc}
    */
-  public function preExecute() {}
+  public function preExecute() { }
 
   /**
    * {@inheritdoc}
    */
-  public function postExecute() {}
+  public function postExecute() { }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/views/src/Plugin/views/field/EntityField.php b/core/modules/views/src/Plugin/views/field/EntityField.php
index ee2882c3b5..f580e502a8 100644
--- a/core/modules/views/src/Plugin/views/field/EntityField.php
+++ b/core/modules/views/src/Plugin/views/field/EntityField.php
@@ -316,33 +316,24 @@ public function clickSort($order) {
   }
 
   /**
-   * Gets the field storage definition.
+   * Gets the field storage of the used field.
    *
    * @return \Drupal\Core\Field\FieldStorageDefinitionInterface
-   *   The field storage definition used by this handler.
    */
   protected function getFieldStorageDefinition() {
     $entity_type_id = $this->definition['entity_type'];
     $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id);
 
+    $field_storage = NULL;
     // @todo Unify 'entity field'/'field_name' instead of converting back and
     //   forth. https://www.drupal.org/node/2410779
-    if (isset($this->definition['field_name']) && isset($field_storage_definitions[$this->definition['field_name']])) {
-      return $field_storage_definitions[$this->definition['field_name']];
+    if (isset($this->definition['field_name'])) {
+      $field_storage = $field_storage_definitions[$this->definition['field_name']];
     }
-
-    if (isset($this->definition['entity field']) && isset($field_storage_definitions[$this->definition['entity field']])) {
-      return $field_storage_definitions[$this->definition['entity field']];
-    }
-
-    // The list of field storage definitions above does not include computed
-    // base fields, so we need to explicitly fetch a list of all base fields in
-    // order to support them.
-    // @see \Drupal\Core\Entity\EntityFieldManager::getFieldStorageDefinitions()
-    $base_fields = $this->entityManager->getBaseFieldDefinitions($entity_type_id);
-    if (isset($this->definition['field_name']) && isset($base_fields[$this->definition['field_name']])) {
-      return $base_fields[$this->definition['field_name']]->getFieldStorageDefinition();
+    elseif (isset($this->definition['entity field'])) {
+      $field_storage = $field_storage_definitions[$this->definition['entity field']];
     }
+    return $field_storage;
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/field/EntityLink.php b/core/modules/views/src/Plugin/views/field/EntityLink.php
index 75b8da3949..2cd402cd00 100644
--- a/core/modules/views/src/Plugin/views/field/EntityLink.php
+++ b/core/modules/views/src/Plugin/views/field/EntityLink.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\views\Plugin\views\field;
 
-use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\ResultRow;
 
 /**
@@ -21,22 +20,12 @@ public function render(ResultRow $row) {
     return $this->getEntity($row) ? parent::render($row) : [];
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function renderLink(ResultRow $row) {
-    if ($this->options['output_url_as_text']) {
-      return $this->getUrlInfo($row)->toString();
-    }
-    return parent::renderLink($row);
-  }
-
   /**
    * {@inheritdoc}
    */
   protected function getUrlInfo(ResultRow $row) {
     $template = $this->getEntityLinkTemplate();
-    return $this->getEntity($row)->toUrl($template)->setAbsolute($this->options['absolute']);
+    return $this->getEntity($row)->urlInfo($template);
   }
 
   /**
@@ -56,34 +45,4 @@ protected function getDefaultLabel() {
     return $this->t('view');
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-    $options['output_url_as_text'] = ['default' => FALSE];
-    $options['absolute'] = ['default' => FALSE];
-    return $options;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
-    $form['output_url_as_text'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Output the URL as text'),
-      '#default_value' => $this->options['output_url_as_text'],
-    ];
-    $form['absolute'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Use absolute link (begins with "http://")'),
-      '#default_value' => $this->options['absolute'],
-      '#description' => $this->t('Enable this option to output an absolute link. Required if you want to use the path as a link destination.'),
-    ];
-    parent::buildOptionsForm($form, $form_state);
-    // Only show the 'text' field if we don't want to output the raw URL.
-    $form['text']['#states']['visible'][':input[name="options[output_url_as_text]"]'] = ['checked' => FALSE];
-  }
-
 }
diff --git a/core/modules/views/src/Plugin/views/field/EntityOperations.php b/core/modules/views/src/Plugin/views/field/EntityOperations.php
index 6f0882979a..c8a307bd1d 100644
--- a/core/modules/views/src/Plugin/views/field/EntityOperations.php
+++ b/core/modules/views/src/Plugin/views/field/EntityOperations.php
@@ -46,7 +46,7 @@ class EntityOperations extends FieldPluginBase {
    * @param array $plugin_definition
    *   The plugin implementation definition.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager.
+   *    The entity manager.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
    */
@@ -84,7 +84,7 @@ public function defineOptions() {
     $options = parent::defineOptions();
 
     $options['destination'] = [
-      'default' => FALSE,
+      'default' => TRUE,
     ];
 
     return $options;
@@ -99,7 +99,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     $form['destination'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Include destination'),
-      '#description' => $this->t('Enforce a <code>destination</code> parameter in the link to return the user to the original view upon completing the link action. Most operations include a destination by default and this setting is no longer needed.'),
+      '#description' => $this->t('Include a <code>destination</code> parameter in the link to return the user to the original view upon completing the link action.'),
       '#default_value' => $this->options['destination'],
     ];
   }
diff --git a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
index 3c663f5f2e..fb6b5bfd4d 100644
--- a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
@@ -1105,7 +1105,7 @@ public function adminSummary() {
   /**
    * {@inheritdoc}
    */
-  public function preRender(&$values) {}
+  public function preRender(&$values) { }
 
   /**
    * {@inheritdoc}
@@ -1713,14 +1713,14 @@ protected function getTokenValuesRecursive(array $array, array $parent_keys = []
    * field ID is terms, then the tokens might be {{ terms__tid }} and
    * {{ terms__name }}.
    */
-  protected function addSelfTokens(&$tokens, $item) {}
+  protected function addSelfTokens(&$tokens, $item) { }
 
   /**
    * Document any special tokens this field might use for itself.
    *
    * @see addSelfTokens()
    */
-  protected function documentSelfTokens(&$tokens) {}
+  protected function documentSelfTokens(&$tokens) { }
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/views/src/Plugin/views/field/RenderedEntity.php b/core/modules/views/src/Plugin/views/field/RenderedEntity.php
index 8676386577..3d0f8c72f2 100644
--- a/core/modules/views/src/Plugin/views/field/RenderedEntity.php
+++ b/core/modules/views/src/Plugin/views/field/RenderedEntity.php
@@ -46,7 +46,7 @@ class RenderedEntity extends FieldPluginBase implements CacheableDependencyInter
    * @param array $plugin_definition
    *   The plugin implementation definition.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager.
+   *    The entity manager.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
    */
diff --git a/core/modules/views/src/Plugin/views/filter/BooleanOperator.php b/core/modules/views/src/Plugin/views/filter/BooleanOperator.php
index fa0d730f83..917a30b848 100644
--- a/core/modules/views/src/Plugin/views/filter/BooleanOperator.php
+++ b/core/modules/views/src/Plugin/views/filter/BooleanOperator.php
@@ -49,6 +49,7 @@ class BooleanOperator extends FilterPluginBase {
   public $accept_null = FALSE;
 
 
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
index fdc2dea6dc..335fd99d81 100644
--- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
@@ -131,11 +131,9 @@ protected function defineOptions() {
         'required' => ['default' => FALSE],
         'remember' => ['default' => FALSE],
         'multiple' => ['default' => FALSE],
-        'remember_roles' => [
-          'default' => [
-            RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID,
-          ],
-        ],
+        'remember_roles' => ['default' => [
+          RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID,
+        ]],
       ],
     ];
 
@@ -176,9 +174,7 @@ public function adminSummary() {
   /**
    * Determine if a filter can be exposed.
    */
-  public function canExpose() {
-    return TRUE;
-  }
+  public function canExpose() { return TRUE; }
 
   /**
    * Determine if a filter can be converted into a group.
@@ -306,20 +302,18 @@ protected function operatorForm(&$form, FormStateInterface $form_state) {
    * Provide a list of options for the default operator form.
    * Should be overridden by classes that don't override operatorForm
    */
-  public function operatorOptions() {
-    return [];
-  }
+  public function operatorOptions() { return []; }
 
   /**
    * Validate the operator form.
    */
-  protected function operatorValidate($form, FormStateInterface $form_state) {}
+  protected function operatorValidate($form, FormStateInterface $form_state) { }
 
   /**
    * Perform any necessary changes to the form values prior to storage.
    * There is no need for this function to actually store the data.
    */
-  public function operatorSubmit($form, FormStateInterface $form_state) {}
+  public function operatorSubmit($form, FormStateInterface $form_state) { }
 
   /**
    * Shortcut to display the value form.
@@ -347,13 +341,13 @@ protected function valueForm(&$form, FormStateInterface $form_state) {
   /**
    * Validate the options form.
    */
-  protected function valueValidate($form, FormStateInterface $form_state) {}
+  protected function valueValidate($form, FormStateInterface $form_state) { }
 
   /**
    * Perform any necessary changes to the form values prior to storage.
    * There is no need for this function to actually store the data.
    */
-  protected function valueSubmit($form, FormStateInterface $form_state) {}
+  protected function valueSubmit($form, FormStateInterface $form_state) { }
 
   /**
    * Shortcut to display the exposed options form.
@@ -1205,6 +1199,7 @@ protected function exposedTranslate(&$form, $type) {
   }
 
 
+
   /**
    * Sanitizes the HTML select element's options.
    *
diff --git a/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php b/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php
index 577b2dfde4..4934e6e7a9 100644
--- a/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php
+++ b/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php
@@ -52,8 +52,6 @@ public function adminLabel($short = FALSE) {
     return $this->getField(parent::adminLabel($short));
   }
 
-  public function canGroup() {
-    return FALSE;
-  }
+  public function canGroup() { return FALSE; }
 
 }
diff --git a/core/modules/views/src/Plugin/views/filter/ManyToOne.php b/core/modules/views/src/Plugin/views/filter/ManyToOne.php
index 86eb1f3361..e678dee82f 100644
--- a/core/modules/views/src/Plugin/views/filter/ManyToOne.php
+++ b/core/modules/views/src/Plugin/views/filter/ManyToOne.php
@@ -129,9 +129,6 @@ protected function opHelper() {
     if (empty($this->value)) {
       return;
     }
-    // Form API returns unchecked options in the form of option_id => 0. This
-    // breaks the generated query for "is all of" filters so we remove them.
-    $this->value = array_filter($this->value, 'static::arrayFilterZero');
     $this->helper->addFilter();
   }
 
diff --git a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
index 52f4393d15..6e360b8386 100644
--- a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
+++ b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
@@ -114,12 +114,12 @@ public function getPagerId() {
   /**
    * Provide the default form form for validating options
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provide the default form form for submitting options
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Return a string to display as the clickable title for the
@@ -175,22 +175,22 @@ public function updatePageInfo() {
    *
    * This is called during the build phase and can directly modify the query.
    */
-  public function query() {}
+  public function query() { }
 
   /**
    * Perform any needed actions just prior to the query executing.
    */
-  public function preExecute(&$query) {}
+  public function preExecute(&$query) { }
 
   /**
    * Perform any needed actions just after the query executing.
    */
-  public function postExecute(&$result) {}
+  public function postExecute(&$result) { }
 
   /**
    * Perform any needed actions just before rendering.
    */
-  public function preRender(&$result) {}
+  public function preRender(&$result) { }
 
   /**
    * Return the renderable array of the pager.
@@ -201,7 +201,7 @@ public function preRender(&$result) {}
    *   Any extra GET parameters that should be retained, such as exposed
    *   input.
    */
-  public function render($input) {}
+  public function render($input) { }
 
   /**
    * Determine if there are more records available.
@@ -213,11 +213,11 @@ public function hasMoreRecords() {
       && $this->total_items > (intval($this->current_page) + 1) * $this->getItemsPerPage();
   }
 
-  public function exposedFormAlter(&$form, FormStateInterface $form_state) {}
+  public function exposedFormAlter(&$form, FormStateInterface $form_state) { }
 
-  public function exposedFormValidate(&$form, FormStateInterface $form_state) {}
+  public function exposedFormValidate(&$form, FormStateInterface $form_state) { }
 
-  public function exposedFormSubmit(&$form, FormStateInterface $form_state, &$exclude) {}
+  public function exposedFormSubmit(&$form, FormStateInterface $form_state, &$exclude) { }
 
   public function usesExposed() {
     return FALSE;
diff --git a/core/modules/views/src/Plugin/views/pager/SqlBase.php b/core/modules/views/src/Plugin/views/pager/SqlBase.php
index 55e07dfa1d..46daeb7ed7 100644
--- a/core/modules/views/src/Plugin/views/pager/SqlBase.php
+++ b/core/modules/views/src/Plugin/views/pager/SqlBase.php
@@ -362,7 +362,7 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
   public function exposedFormValidate(&$form, FormStateInterface $form_state) {
     if (!$form_state->isValueEmpty('offset') && trim($form_state->getValue('offset'))) {
       if (!is_numeric($form_state->getValue('offset')) || $form_state->getValue('offset') < 0) {
-        $form_state->setErrorByName('offset', $this->t('Offset must be a number greater than or equal to 0.'));
+        $form_state->setErrorByName('offset', $this->t('Offset must be an number greater or equal than 0.'));
       }
     }
   }
diff --git a/core/modules/views/src/Plugin/views/query/QueryPluginBase.php b/core/modules/views/src/Plugin/views/query/QueryPluginBase.php
index 35453c1172..a2c2e105b7 100644
--- a/core/modules/views/src/Plugin/views/query/QueryPluginBase.php
+++ b/core/modules/views/src/Plugin/views/query/QueryPluginBase.php
@@ -54,7 +54,7 @@
    * @param $get_count
    *   Provide a countquery if this is true, otherwise provide a normal query.
    */
-  public function query($get_count = FALSE) {}
+  public function query($get_count = FALSE) { }
 
   /**
    * Let modules modify the query just prior to finalizing it.
@@ -62,7 +62,7 @@ public function query($get_count = FALSE) {}
    * @param view $view
    *   The view which is executed.
    */
-  public function alter(ViewExecutable $view) {}
+  public function alter(ViewExecutable $view) {  }
 
   /**
    * Builds the necessary info to execute the query.
@@ -70,7 +70,7 @@ public function alter(ViewExecutable $view) {}
    * @param view $view
    *   The view which is executed.
    */
-  public function build(ViewExecutable $view) {}
+  public function build(ViewExecutable $view) { }
 
   /**
    * Executes the query and fills the associated view object with according
@@ -85,7 +85,7 @@ public function build(ViewExecutable $view) {}
    * @param view $view
    *   The view which is executed.
    */
-  public function execute(ViewExecutable $view) {}
+  public function execute(ViewExecutable $view) {  }
 
   /**
    * Add a signature to the query, if such a thing is feasible.
@@ -96,18 +96,18 @@ public function execute(ViewExecutable $view) {}
    * @param view $view
    *   The view which is executed.
    */
-  public function addSignature(ViewExecutable $view) {}
+  public function addSignature(ViewExecutable $view) { }
 
   /**
    * Get aggregation info for group by queries.
    *
    * If NULL, aggregation is not allowed.
    */
-  public function getAggregationInfo() {}
+  public function getAggregationInfo() { }
 
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
-  public function submitOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state) { }
 
   public function summaryTitle() {
     return $this->t('Settings');
diff --git a/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php b/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
index 6238914018..1db8da7f72 100644
--- a/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
+++ b/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
@@ -178,7 +178,7 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) {
    *    - subquery_order: either ASC or DESC.
    *
    * @return string
-   *   The subquery SQL string, ready for use in the main query.
+   *    The subquery SQL string, ready for use in the main query.
    */
   protected function leftQuery($options) {
     // Either load another view, or create one on the fly.
diff --git a/core/modules/views/src/Plugin/views/row/RowPluginBase.php b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
index 3c09eaf06a..1cc3f79a1e 100644
--- a/core/modules/views/src/Plugin/views/row/RowPluginBase.php
+++ b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
@@ -122,13 +122,13 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
   /**
    * Validate the options form.
    */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function validateOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * Perform any necessary changes to the form values prior to storage.
    * There is no need for this function to actually store the data.
    */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state) {}
+  public function submitOptionsForm(&$form, FormStateInterface $form_state) { }
 
   /**
    * {@inheritdoc}
@@ -151,7 +151,7 @@ public function query() {
    * @param $result
    *   The full array of results from the query.
    */
-  public function preRender($result) {}
+  public function preRender($result) { }
 
   /**
    * Render a row object. This usually passes through to a theme template
diff --git a/core/modules/views/src/Plugin/views/sort/SortPluginBase.php b/core/modules/views/src/Plugin/views/sort/SortPluginBase.php
index 3cc82bf8df..a40dc346b3 100644
--- a/core/modules/views/src/Plugin/views/sort/SortPluginBase.php
+++ b/core/modules/views/src/Plugin/views/sort/SortPluginBase.php
@@ -28,9 +28,7 @@
   /**
    * Determine if a sort can be exposed.
    */
-  public function canExpose() {
-    return TRUE;
-  }
+  public function canExpose() { return TRUE; }
 
   /**
    * Called to add the sort to a query.
@@ -177,9 +175,9 @@ protected function showSortForm(&$form, FormStateInterface $form_state) {
     }
   }
 
-  protected function sortValidate(&$form, FormStateInterface $form_state) {}
+  protected function sortValidate(&$form, FormStateInterface $form_state) { }
 
-  public function sortSubmit(&$form, FormStateInterface $form_state) {}
+  public function sortSubmit(&$form, FormStateInterface $form_state) { }
 
   /**
    * Provide a list of options for the default sort form.
diff --git a/core/modules/views/src/Plugin/views/style/StylePluginBase.php b/core/modules/views/src/Plugin/views/style/StylePluginBase.php
index 1d6b49179b..d71db329e6 100644
--- a/core/modules/views/src/Plugin/views/style/StylePluginBase.php
+++ b/core/modules/views/src/Plugin/views/style/StylePluginBase.php
@@ -385,7 +385,7 @@ public function validateOptionsForm(&$form, FormStateInterface $form_state) {
    * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The current state of the form.
    * @param string $type
-   *   The display type, either block or page.
+   *    The display type, either block or page.
    */
   public function wizardForm(&$form, FormStateInterface $form_state, $type) {
   }
@@ -413,15 +413,13 @@ public function wizardSubmit(&$form, FormStateInterface $form_state, WizardInter
    * interfere with the sorts. If so it should build; if it returns
    * any non-TRUE value, normal sorting will NOT be added to the query.
    */
-  public function buildSort() {
-    return TRUE;
-  }
+  public function buildSort() { return TRUE; }
 
   /**
    * Called by the view builder to let the style build a second set of
    * sorts that will come after any other sorts in the view.
    */
-  public function buildSortPost() {}
+  public function buildSortPost() { }
 
   /**
    * Allow the style to do stuff before each row is rendered.
@@ -790,7 +788,7 @@ public function getField($index, $field) {
    * @param $index
    *   The index count of the row.
    * @param $field
-   *   The id of the field.
+   *    The id of the field.
    */
   public function getFieldValue($index, $field) {
     $this->view->row_index = $index;
diff --git a/core/modules/views/src/Plugin/views/style/Table.php b/core/modules/views/src/Plugin/views/style/Table.php
index bbc9a1ea3d..9c9fbf1bf3 100644
--- a/core/modules/views/src/Plugin/views/style/Table.php
+++ b/core/modules/views/src/Plugin/views/style/Table.php
@@ -160,7 +160,7 @@ public function buildSortPost() {
    *   display has listed due to access control or other changes.
    *
    * @return array
-   *   An array of all the sanitized columns.
+   *    An array of all the sanitized columns.
    */
   public function sanitizeColumns($columns, $fields = NULL) {
     $sanitized = [];
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index 0b3dcc9a10..1771c710ea 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -3,7 +3,6 @@
 namespace Drupal\views\Plugin\views\wizard;
 
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Entity\EntityPublishedInterface;
 use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\UrlGeneratorTrait;
@@ -141,7 +140,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
 
     $entity_types = \Drupal::entityManager()->getDefinitions();
     foreach ($entity_types as $entity_type_id => $entity_type) {
-      if (in_array($this->base_table, [$entity_type->getBaseTable(), $entity_type->getDataTable(), $entity_type->getRevisionTable(), $entity_type->getRevisionDataTable()], TRUE)) {
+      if ($this->base_table == $entity_type->getBaseTable() || $this->base_table == $entity_type->getDataTable()) {
         $this->entityType = $entity_type;
         $this->entityTypeId = $entity_type_id;
       }
@@ -166,21 +165,6 @@ public function getCreatedColumn() {
   public function getFilters() {
     $filters = [];
 
-    // Add a default filter on the publishing status field, if available.
-    if ($this->entityType && is_subclass_of($this->entityType->getClass(), EntityPublishedInterface::class)) {
-      $field_name = $this->entityType->getKey('published');
-      $this->filters = [
-        $field_name => [
-          'value' => TRUE,
-          'table' => $this->base_table,
-          'field' => $field_name,
-          'plugin_id' => 'boolean',
-          'entity_type' => $this->entityTypeId,
-          'entity_field' => $field_name,
-        ]
-      ] + $this->filters;
-    }
-
     $default = $this->filter_defaults;
 
     foreach ($this->filters as $name => $info) {
diff --git a/core/modules/views/src/Tests/FieldApiDataTest.php b/core/modules/views/src/Tests/FieldApiDataTest.php
index f6d5159dd8..246a32421a 100644
--- a/core/modules/views/src/Tests/FieldApiDataTest.php
+++ b/core/modules/views/src/Tests/FieldApiDataTest.php
@@ -335,7 +335,8 @@ public function testEntityFieldFilter() {
     // Filter by 'field name 2: fr', which doesn't exist.
     $view->setDisplay('embed_4');
     $this->executeView($view);
-    $expected = [];
+    $expected = [
+    ];
 
     $this->assertIdenticalResultset($view, $expected, $map);
     $view->destroy();
diff --git a/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php b/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php
index e8d2549176..8905c8da29 100644
--- a/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php
+++ b/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php
@@ -45,12 +45,10 @@ public function testFeedOutput() {
     $node_title = 'This "cool" & "neat" article\'s title';
     $node = $this->drupalCreateNode([
       'title' => $node_title,
-      'body' => [
-        0 => [
-          'value' => 'A paragraph',
-          'format' => filter_default_format(),
-        ],
-      ],
+      'body' => [0 => [
+        'value' => 'A paragraph',
+        'format' => filter_default_format(),
+      ]],
     ]);
 
     // Test the site name setting.
@@ -105,12 +103,10 @@ public function testFeedFieldOutput() {
     $node_title = 'This "cool" & "neat" article\'s title';
     $this->drupalCreateNode([
       'title' => $node_title,
-      'body' => [
-        0 => [
-          'value' => 'A paragraph',
-          'format' => filter_default_format(),
-        ],
-      ],
+      'body' => [0 => [
+        'value' => 'A paragraph',
+        'format' => filter_default_format(),
+      ]],
     ]);
 
     $this->drupalGet('test-feed-display-fields.xml');
diff --git a/core/modules/views/tests/src/Functional/Update/ArgumentPlaceholderUpdatePathTest.php b/core/modules/views/src/Tests/Update/ArgumentPlaceholderUpdatePathTest.php
similarity index 91%
rename from core/modules/views/tests/src/Functional/Update/ArgumentPlaceholderUpdatePathTest.php
rename to core/modules/views/src/Tests/Update/ArgumentPlaceholderUpdatePathTest.php
index 8d60f358b9..c42cf19050 100644
--- a/core/modules/views/tests/src/Functional/Update/ArgumentPlaceholderUpdatePathTest.php
+++ b/core/modules/views/src/Tests/Update/ArgumentPlaceholderUpdatePathTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -19,8 +19,8 @@ class ArgumentPlaceholderUpdatePathTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/argument-placeholder.php'
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/argument-placeholder.php'
     ];
   }
 
diff --git a/core/modules/views/tests/src/Functional/Update/BooleanFilterValuesUpdateTest.php b/core/modules/views/src/Tests/Update/BooleanFilterValuesUpdateTest.php
similarity index 75%
rename from core/modules/views/tests/src/Functional/Update/BooleanFilterValuesUpdateTest.php
rename to core/modules/views/src/Tests/Update/BooleanFilterValuesUpdateTest.php
index a4787c4471..c06539fffc 100644
--- a/core/modules/views/tests/src/Functional/Update/BooleanFilterValuesUpdateTest.php
+++ b/core/modules/views/src/Tests/Update/BooleanFilterValuesUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -19,8 +19,8 @@ class BooleanFilterValuesUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/boolean-filter-values.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/boolean-filter-values.php',
     ];
   }
 
diff --git a/core/modules/views/tests/src/Functional/Update/CacheabilityMetadataUpdateTest.php b/core/modules/views/src/Tests/Update/CacheabilityMetadataUpdateTest.php
similarity index 81%
rename from core/modules/views/tests/src/Functional/Update/CacheabilityMetadataUpdateTest.php
rename to core/modules/views/src/Tests/Update/CacheabilityMetadataUpdateTest.php
index 6410a608f1..ef203b2a43 100644
--- a/core/modules/views/tests/src/Functional/Update/CacheabilityMetadataUpdateTest.php
+++ b/core/modules/views/src/Tests/Update/CacheabilityMetadataUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Views;
 
 /**
@@ -18,7 +18,7 @@ class CacheabilityMetadataUpdateTest extends UpdatePathTestBase {
    * {@inheritdoc}
    */
   protected function setDatabaseDumpFiles() {
-    $this->databaseDumpFiles = [__DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz'];
+    $this->databaseDumpFiles = [__DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz'];
   }
 
   /**
diff --git a/core/modules/views/src/Tests/Update/EntityLinkOutputUrlUpdateTest.php b/core/modules/views/src/Tests/Update/EntityLinkOutputUrlUpdateTest.php
deleted file mode 100644
index 1e990926fe..0000000000
--- a/core/modules/views/src/Tests/Update/EntityLinkOutputUrlUpdateTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace Drupal\views\Tests\Update;
-
-use Drupal\system\Tests\Update\UpdatePathTestBase;
-use Drupal\views\Entity\View;
-
-/**
- * Tests that the additional settings are added to the entity link field.
- *
- * @see views_post_update_entity_link_url()
- *
- * @group Update
- */
-class EntityLinkOutputUrlUpdateTest extends UpdatePathTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setDatabaseDumpFiles() {
-    $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../tests/fixtures/update/entity-link-output-url.php',
-    ];
-  }
-
-  /**
-   * Tests that the additional settings are added to the config.
-   */
-  public function testViewsPostUpdateEntityLinkUrl() {
-    $this->runUpdates();
-
-    // Load and initialize our test view.
-    $view = View::load('node_link_update_test');
-    $data = $view->toArray();
-    // Check that the field contains the new values.
-    $this->assertIdentical(FALSE, $data['display']['default']['display_options']['fields']['view_node']['output_url_as_text']);
-    $this->assertIdentical(FALSE, $data['display']['default']['display_options']['fields']['view_node']['absolute']);
-  }
-
-}
diff --git a/core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateFilledTest.php b/core/modules/views/src/Tests/Update/EntityViewsDataUpdateFilledTest.php
similarity index 63%
rename from core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateFilledTest.php
rename to core/modules/views/src/Tests/Update/EntityViewsDataUpdateFilledTest.php
index a1ef463b13..57f219d937 100644
--- a/core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateFilledTest.php
+++ b/core/modules/views/src/Tests/Update/EntityViewsDataUpdateFilledTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
 /**
  * Runs EntityViewsDataUpdateTest with a dump filled with content.
@@ -14,7 +14,7 @@ class EntityViewsDataUpdateFilledTest extends EntityViewsDataUpdateTest {
    */
   protected function setDatabaseDumpFiles() {
     parent::setDatabaseDumpFiles();
-    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz';
+    $this->databaseDumpFiles[0] = __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz';
   }
 
 }
diff --git a/core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateTest.php b/core/modules/views/src/Tests/Update/EntityViewsDataUpdateTest.php
similarity index 90%
rename from core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateTest.php
rename to core/modules/views/src/Tests/Update/EntityViewsDataUpdateTest.php
index 2de6568e47..472829cab0 100644
--- a/core/modules/views/tests/src/Functional/Update/EntityViewsDataUpdateTest.php
+++ b/core/modules/views/src/Tests/Update/EntityViewsDataUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Views;
 
 /**
@@ -19,8 +19,8 @@ class EntityViewsDataUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.views-entity-views-data-2455125.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.views-entity-views-data-2455125.php',
     ];
   }
 
diff --git a/core/modules/views/tests/src/Functional/Update/FieldHandlersUpdateTest.php b/core/modules/views/src/Tests/Update/FieldHandlersUpdateTest.php
similarity index 81%
rename from core/modules/views/tests/src/Functional/Update/FieldHandlersUpdateTest.php
rename to core/modules/views/src/Tests/Update/FieldHandlersUpdateTest.php
index 1af161964c..9990094540 100644
--- a/core/modules/views/tests/src/Functional/Update/FieldHandlersUpdateTest.php
+++ b/core/modules/views/src/Tests/Update/FieldHandlersUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -19,8 +19,8 @@ class FieldHandlersUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-      __DIR__ . '/../../../fixtures/update/duplicate-field-handler.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/duplicate-field-handler.php',
     ];
   }
 
diff --git a/core/modules/views/tests/src/Functional/Update/ImageStyleDependencyUpdateTest.php b/core/modules/views/src/Tests/Update/ImageStyleDependencyUpdateTest.php
similarity index 82%
rename from core/modules/views/tests/src/Functional/Update/ImageStyleDependencyUpdateTest.php
rename to core/modules/views/src/Tests/Update/ImageStyleDependencyUpdateTest.php
index e183adedc1..0afae2d63c 100644
--- a/core/modules/views/tests/src/Functional/Update/ImageStyleDependencyUpdateTest.php
+++ b/core/modules/views/src/Tests/Update/ImageStyleDependencyUpdateTest.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Drupal\Tests\views\Functional\Update;
+namespace Drupal\views\Tests\Update;
 
-use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
 use Drupal\views\Entity\View;
 
 /**
@@ -17,8 +17,8 @@ class ImageStyleDependencyUpdateTest extends UpdatePathTestBase {
    */
   protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
-      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal8.views-image-style-dependency-2649914.php',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal8.views-image-style-dependency-2649914.php',
     ];
   }
 
diff --git a/core/modules/views/src/Tests/ViewAjaxTest.php b/core/modules/views/src/Tests/ViewAjaxTest.php
index 5a966a8f76..b8b2730e6e 100644
--- a/core/modules/views/src/Tests/ViewAjaxTest.php
+++ b/core/modules/views/src/Tests/ViewAjaxTest.php
@@ -17,7 +17,7 @@ class ViewAjaxTest extends ViewTestBase {
    *
    * @var array
    */
-  public static $testViews = ['test_ajax_view', 'test_view'];
+  public static $testViews = ['test_ajax_view'];
 
   protected function setUp() {
     parent::setUp();
@@ -61,14 +61,4 @@ public function testAjaxView() {
     $this->assertEqual(count($result), 2, 'Ensure that two items are rendered in the HTML.');
   }
 
-  /**
-   * Ensures that non-ajax view cannot be accessed via an ajax HTTP request.
-   */
-  public function testNonAjaxViewViaAjax() {
-    $this->drupalPost('views/ajax', '', ['view_name' => 'test_ajax_view', 'view_display_id' => 'default'], ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']]);
-    $this->assertResponse(200);
-    $this->drupalPost('views/ajax', '', ['view_name' => 'test_view', 'view_display_id' => 'default'], ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']]);
-    $this->assertResponse(403);
-  }
-
 }
diff --git a/core/modules/views/src/Tests/ViewKernelTestBase.php b/core/modules/views/src/Tests/ViewKernelTestBase.php
index 5a23285918..b39bc7473a 100644
--- a/core/modules/views/src/Tests/ViewKernelTestBase.php
+++ b/core/modules/views/src/Tests/ViewKernelTestBase.php
@@ -126,8 +126,6 @@ protected function executeView($view, array $args = []) {
 
   /**
    * Returns the schema definition.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     return ViewTestData::schemaDefinition();
diff --git a/core/modules/views/src/Tests/ViewTestBase.php b/core/modules/views/src/Tests/ViewTestBase.php
index 1d9dccf584..121b21bfa5 100644
--- a/core/modules/views/src/Tests/ViewTestBase.php
+++ b/core/modules/views/src/Tests/ViewTestBase.php
@@ -95,7 +95,7 @@ protected function orderResultSet($result_set, $column, $reverse = FALSE) {
    *
    * @param string $id
    *   The HTML ID of the button
-   * @param string $expected_label
+   * @param string $label
    *   The expected label for the button.
    * @param string $message
    *   (optional) A custom message to display with the assertion. If no custom
@@ -131,8 +131,6 @@ protected function executeView(ViewExecutable $view, $args = []) {
 
   /**
    * Returns the schema definition.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     return ViewTestData::schemaDefinition();
diff --git a/core/modules/views/src/Tests/ViewTestData.php b/core/modules/views/src/Tests/ViewTestData.php
index 27ddf7c465..7b9bc9ebe1 100644
--- a/core/modules/views/src/Tests/ViewTestData.php
+++ b/core/modules/views/src/Tests/ViewTestData.php
@@ -58,8 +58,6 @@ public static function createTestViews($class, array $modules) {
 
   /**
    * Returns the schema definition.
-   *
-   * @internal
    */
   public static function schemaDefinition() {
     $schema['views_test_data'] = [
@@ -82,8 +80,7 @@ public static function schemaDefinition() {
           'type' => 'int',
           'unsigned' => TRUE,
           'not null' => TRUE,
-          'default' => 0,
-        ],
+          'default' => 0],
         'job' => [
           'description' => "The person's job",
           'type' => 'varchar',
diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php
index 82c1cb9832..b1861f7b36 100644
--- a/core/modules/views/src/ViewExecutable.php
+++ b/core/modules/views/src/ViewExecutable.php
@@ -2,9 +2,9 @@
 
 namespace Drupal\views;
 
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\Tags;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\views\Plugin\views\display\DisplayRouterInterface;
@@ -17,14 +17,9 @@
  *
  * An object to contain all of the data to generate a view, plus the member
  * functions to build the view query, execute the query and render the output.
- *
- * This class does not implement the Serializable interface since problems
- * occurred when using the serialize method.
- *
- * @see https://www.drupal.org/node/2849674
- * @see https://bugs.php.net/bug.php?id=66052
  */
-class ViewExecutable {
+class ViewExecutable implements \Serializable {
+  use DependencySerializationTrait;
 
   /**
    * The config entity in which the view is stored.
@@ -439,13 +434,6 @@ class ViewExecutable {
    */
   protected $baseEntityType;
 
-  /**
-   * Holds all necessary data for proper unserialization.
-   *
-   * @var array
-   */
-  protected $serializationData;
-
   /**
    * Constructs a new ViewExecutable object.
    *
@@ -800,7 +788,7 @@ public function setDisplay($display_id = NULL) {
 
     // Ensure the requested display exists.
     if (!$this->displayHandlers->has($display_id)) {
-      trigger_error(new FormattableMarkup('setDisplay() called with invalid display ID "@display".', ['@display' => $display_id]), E_USER_WARNING);
+      debug(format_string('setDisplay() called with invalid display ID "@display".', ['@display' => $display_id]));
       return FALSE;
     }
 
@@ -1339,8 +1327,8 @@ public function build($display_id = NULL) {
    * @todo Some filter needs this function, even it is internal.
    *
    * @param string $key
-   *   The type of handlers (filter etc.) which should be iterated over to build
-   *   the relationship and query information.
+   *    The type of handlers (filter etc.) which should be iterated over to
+   *    build the relationship and query information.
    */
   public function _build($key) {
     $handlers = &$this->$key;
@@ -1758,7 +1746,7 @@ public function access($displays = NULL, $account = NULL) {
 
     // We can't use choose_display() here because that function
     // calls this one.
-    $displays = (array) $displays;
+    $displays = (array)$displays;
     foreach ($displays as $display_id) {
       if ($this->displayHandlers->has($display_id)) {
         if (($display = $this->displayHandlers->get($display_id)) && $display->access($account)) {
@@ -2478,68 +2466,52 @@ public function getDependencies() {
   }
 
   /**
-   * Magic method implementation to serialize the view executable.
-   *
-   * @return array
-   *   The names of all variables that should be serialized.
-   */
-  public function __sleep() {
-    // Limit to only the required data which is needed to properly restore the
-    // state during unserialization.
-    $this->serializationData = [
-      'storage' => $this->storage->id(),
-      'views_data' => $this->viewsData->_serviceId,
-      'route_provider' => $this->routeProvider->_serviceId,
-      'current_display' => $this->current_display,
-      'args' => $this->args,
-      'current_page' => $this->current_page,
-      'exposed_input' => $this->exposed_input,
-      'exposed_raw_input' => $this->exposed_raw_input,
-      'exposed_data' => $this->exposed_data,
-      'dom_id' => $this->dom_id,
-      'executed' => $this->executed,
-    ];
-    return ['serializationData'];
+   * {@inheritdoc}
+   */
+  public function serialize() {
+    return serialize([
+      // Only serialize the storage entity ID.
+      $this->storage->id(),
+      $this->current_display,
+      $this->args,
+      $this->current_page,
+      $this->exposed_input,
+      $this->exposed_raw_input,
+      $this->exposed_data,
+      $this->dom_id,
+      $this->executed,
+    ]);
   }
 
   /**
-   * Magic method implementation to unserialize the view executable.
+   * {@inheritdoc}
    */
-  public function __wakeup() {
-    // There are cases, like in testing where we don't have a container
-    // available.
-    if (\Drupal::hasContainer() && !empty($this->serializationData)) {
-      // Load and reference the storage.
-      $this->storage = \Drupal::entityTypeManager()->getStorage('view')
-        ->load($this->serializationData['storage']);
-      $this->storage->set('executable', $this);
+  public function unserialize($serialized) {
+    list($storage, $current_display, $args, $current_page, $exposed_input, $exposed_raw_input, $exposed_data, $dom_id, $executed) = unserialize($serialized);
 
-      // Attach all necessary services.
+    // There are cases, like in testing, where we don't have a container
+    // available.
+    if (\Drupal::hasContainer()) {
+      $this->setRequest(\Drupal::request());
       $this->user = \Drupal::currentUser();
-      $this->viewsData = \Drupal::service($this->serializationData['views_data']);
-      $this->routeProvider = \Drupal::service($this->serializationData['route_provider']);
 
-      // Restore the state of this executable.
-      if ($request = \Drupal::request()) {
-        $this->setRequest($request);
-      }
-      $this->setDisplay($this->serializationData['current_display']);
-      $this->setArguments($this->serializationData['args']);
-      $this->setCurrentPage($this->serializationData['current_page']);
-      $this->setExposedInput($this->serializationData['exposed_input']);
-      $this->exposed_data = $this->serializationData['exposed_data'];
-      $this->exposed_raw_input = $this->serializationData['exposed_raw_input'];
-      $this->dom_id = $this->serializationData['dom_id'];
+      $this->storage = \Drupal::entityManager()->getStorage('view')->load($storage);
+
+      $this->setDisplay($current_display);
+      $this->setArguments($args);
+      $this->setCurrentPage($current_page);
+      $this->setExposedInput($exposed_input);
+      $this->exposed_data = $exposed_data;
+      $this->exposed_raw_input = $exposed_raw_input;
+      $this->dom_id = $dom_id;
 
       $this->initHandlers();
 
       // If the display was previously executed, execute it now.
-      if ($this->serializationData['executed']) {
+      if ($executed) {
         $this->execute($this->current_display);
       }
     }
-    // Unset serializationData since it serves no further purpose.
-    unset($this->serializationData);
   }
 
 }
diff --git a/core/modules/views/src/Views.php b/core/modules/views/src/Views.php
index 014beaefe1..9962d38d57 100644
--- a/core/modules/views/src/Views.php
+++ b/core/modules/views/src/Views.php
@@ -283,8 +283,8 @@ public static function getDisabledViews() {
    *   Filters the views on status. Can either be 'all' (default), 'enabled' or
    *   'disabled'
    * @param mixed $exclude_view
-   *   View or current display to exclude.
-   *   Either a:
+   *   view or current display to exclude
+   *   either a
    *   - views object (containing $exclude_view->storage->name and $exclude_view->current_display)
    *   - views name as string:  e.g. my_view
    *   - views name and display id (separated by ':'): e.g. my_view:default
diff --git a/core/modules/views/tests/fixtures/update/entity-link-output-url.php b/core/modules/views/tests/fixtures/update/entity-link-output-url.php
deleted file mode 100644
index 8d2aabeed4..0000000000
--- a/core/modules/views/tests/fixtures/update/entity-link-output-url.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * @file
- * Test fixture.
- */
-
-use Drupal\Core\Database\Database;
-use Drupal\Core\Serialization\Yaml;
-
-$connection = Database::getConnection();
-
-$connection->insert('config')
-  ->fields([
-    'collection' => '',
-    'name' => 'views.view.node_link_update_test',
-    'data' => serialize(Yaml::decode(file_get_contents('core/modules/views/tests/fixtures/update/views.view.node_link_update_test.yml'))),
-  ])
-  ->execute();
diff --git a/core/modules/views/tests/fixtures/update/views.view.node_link_update_test.yml b/core/modules/views/tests/fixtures/update/views.view.node_link_update_test.yml
deleted file mode 100644
index ae6eaa86c6..0000000000
--- a/core/modules/views/tests/fixtures/update/views.view.node_link_update_test.yml
+++ /dev/null
@@ -1,226 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - node
-    - user
-id: node_link_update_test
-label: 'node link update test'
-module: views
-description: ''
-tag: ''
-base_table: node_field_data
-base_field: nid
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: 0
-    display_options:
-      access:
-        type: perm
-        options:
-          perm: 'access content'
-      cache:
-        type: tag
-        options: {  }
-      query:
-        type: views_query
-        options:
-          disable_sql_rewrite: false
-          distinct: false
-          replica: false
-          query_comment: ''
-          query_tags: {  }
-      exposed_form:
-        type: basic
-        options:
-          submit_button: Apply
-          reset_button: false
-          reset_button_label: Reset
-          exposed_sorts_label: 'Sort by'
-          expose_sort_order: true
-          sort_asc_label: Asc
-          sort_desc_label: Desc
-      pager:
-        type: mini
-        options:
-          items_per_page: 10
-          offset: 0
-          id: 0
-          total_pages: null
-          expose:
-            items_per_page: false
-            items_per_page_label: 'Items per page'
-            items_per_page_options: '5, 10, 25, 50'
-            items_per_page_options_all: false
-            items_per_page_options_all_label: '- All -'
-            offset: false
-            offset_label: Offset
-          tags:
-            previous: ‹‹
-            next: ››
-      style:
-        type: default
-        options:
-          grouping: {  }
-          row_class: ''
-          default_row_class: true
-          uses_fields: false
-      row:
-        type: fields
-        options:
-          inline: {  }
-          separator: ''
-          hide_empty: false
-          default_field_elements: true
-      fields:
-        title:
-          id: title
-          table: node_field_data
-          field: title
-          entity_type: node
-          entity_field: title
-          label: ''
-          alter:
-            alter_text: false
-            make_link: false
-            absolute: false
-            trim: false
-            word_boundary: false
-            ellipsis: false
-            strip_tags: false
-            html: false
-          hide_empty: false
-          empty_zero: false
-          settings:
-            link_to_entity: true
-          plugin_id: field
-          relationship: none
-          group_type: group
-          admin_label: ''
-          exclude: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: true
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_alter_empty: true
-          click_sort_column: value
-          type: string
-          group_column: value
-          group_columns: {  }
-          group_rows: true
-          delta_limit: 0
-          delta_offset: 0
-          delta_reversed: false
-          delta_first_last: false
-          multi_type: separator
-          separator: ', '
-          field_api_classes: false
-        path:
-          id: path
-          table: node
-          field: path
-          entity_type: node
-          plugin_id: node_path
-        view_node:
-          id: view_node
-          table: node
-          field: view_node
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: 0
-            word_boundary: true
-            ellipsis: true
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          text: view
-          entity_type: node
-          plugin_id: entity_link
-      filters:
-        status:
-          value: '1'
-          table: node_field_data
-          field: status
-          plugin_id: boolean
-          entity_type: node
-          entity_field: status
-          id: status
-          expose:
-            operator: ''
-          group: 1
-      sorts:
-        created:
-          id: created
-          table: node_field_data
-          field: created
-          order: DESC
-          entity_type: node
-          entity_field: created
-          plugin_id: date
-          relationship: none
-          group_type: group
-          admin_label: ''
-          exposed: false
-          expose:
-            label: ''
-          granularity: second
-      header: {  }
-      footer: {  }
-      empty: {  }
-      relationships: {  }
-      arguments: {  }
-      display_extenders: {  }
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_content'
-        - 'languages:language_interface'
-        - url.query_args
-        - 'user.node_grants:view'
-        - user.permissions
-      tags: {  }
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.computed_field_view.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.computed_field_view.yml
deleted file mode 100644
index d8de3f1883..0000000000
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.computed_field_view.yml
+++ /dev/null
@@ -1,171 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - entity_test
-id: computed_field_view
-label: 'Computed Field View'
-module: views
-description: ''
-tag: ''
-base_table: entity_test_computed_field
-base_field: id
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: 0
-    display_options:
-      access:
-        type: none
-        options: {  }
-      cache:
-        type: tag
-        options: {  }
-      query:
-        type: views_query
-        options:
-          disable_sql_rewrite: false
-          distinct: false
-          replica: false
-          query_comment: ''
-          query_tags: {  }
-      exposed_form:
-        type: basic
-        options:
-          submit_button: Apply
-          reset_button: false
-          reset_button_label: Reset
-          exposed_sorts_label: 'Sort by'
-          expose_sort_order: true
-          sort_asc_label: Asc
-          sort_desc_label: Desc
-      pager:
-        type: mini
-        options:
-          items_per_page: 10
-          offset: 0
-          id: 0
-          total_pages: null
-          expose:
-            items_per_page: false
-            items_per_page_label: 'Items per page'
-            items_per_page_options: '5, 10, 25, 50'
-            items_per_page_options_all: false
-            items_per_page_options_all_label: '- All -'
-            offset: false
-            offset_label: Offset
-          tags:
-            previous: ‹‹
-            next: ››
-      style:
-        type: default
-        options:
-          grouping: {  }
-          row_class: ''
-          default_row_class: true
-          uses_fields: false
-      row:
-        type: fields
-        options:
-          inline: {  }
-          separator: ''
-          hide_empty: false
-          default_field_elements: true
-      fields:
-        computed_string_field:
-          id: computed_string_field
-          table: entity_test_computed_field
-          field: computed_string_field
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: 0
-            word_boundary: true
-            ellipsis: true
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          click_sort_column: value
-          type: string
-          settings:
-            link_to_entity: false
-          group_column: value
-          group_columns: {  }
-          group_rows: true
-          delta_limit: 0
-          delta_offset: 0
-          delta_reversed: false
-          delta_first_last: false
-          multi_type: separator
-          separator: ', '
-          field_api_classes: false
-          entity_type: entity_test_computed_field
-          plugin_id: field
-      filters: {  }
-      sorts: {  }
-      header: {  }
-      footer: {  }
-      empty: {  }
-      relationships: {  }
-      arguments: {  }
-      display_extenders: {  }
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_content'
-        - 'languages:language_interface'
-        - url.query_args
-      tags: {  }
-  page_1:
-    display_plugin: page
-    id: page_1
-    display_title: Page
-    position: 1
-    display_options:
-      display_extenders: {  }
-      path: foo
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_content'
-        - 'languages:language_interface'
-        - url.query_args
-      tags: {  }
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml
index d549ed0a23..ca151de45b 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_test_link.yml
@@ -296,112 +296,6 @@ display:
           text: 'Delete entity test'
           entity_type: entity_test
           plugin_id: entity_link_delete
-        canonical_entity_test:
-          id: canonical_entity_test
-          table: entity_test
-          field: view_entity_test
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: 0
-            word_boundary: true
-            ellipsis: true
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          text: ''
-          output_url_as_text: true
-          absolute: false
-          entity_type: entity_test
-          plugin_id: entity_link
-        absolute_entity_test:
-          id: absolute_entity_test
-          table: entity_test
-          field: view_entity_test
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: ''
-          exclude: false
-          alter:
-            alter_text: false
-            text: ''
-            make_link: false
-            path: ''
-            absolute: false
-            external: false
-            replace_spaces: false
-            path_case: none
-            trim_whitespace: false
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: false
-            max_length: 0
-            word_boundary: true
-            ellipsis: true
-            more_link: false
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: false
-            trim: false
-            preserve_tags: ''
-            html: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: false
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_empty: false
-          empty_zero: false
-          hide_alter_empty: true
-          text: ''
-          output_url_as_text: true
-          absolute: true
-          entity_type: entity_test
-          plugin_id: entity_link
       filters: {  }
       sorts:
         id:
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_checkboxes.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_checkboxes.yml
deleted file mode 100644
index 26b1d3259e..0000000000
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_checkboxes.yml
+++ /dev/null
@@ -1,155 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  config:
-    - taxonomy.vocabulary.test_exposed_checkboxes
-  module:
-    - node
-    - taxonomy
-id: test_exposed_form_checkboxes
-label: ''
-module: views
-description: ''
-tag: ''
-base_table: node_field_data
-base_field: nid
-core: '8'
-display:
-  default:
-    display_options:
-      access:
-        type: none
-      cache:
-        type: tag
-      exposed_form:
-        options:
-          reset_button: true
-        type: basic
-      filters:
-        type:
-          id: type
-          table: node_field_data
-          field: type
-          relationship: none
-          group_type: group
-          admin_label: ''
-          operator: in
-          value: {  }
-          group: 1
-          exposed: true
-          expose:
-            operator_id: type_op
-            label: 'Content: Type'
-            description: 'Exposed description'
-            use_operator: false
-            operator: ''
-            identifier: type
-            required: false
-            remember: false
-            multiple: true
-            remember_roles:
-              authenticated: authenticated
-              anonymous: '0'
-              administrator: '0'
-            reduce: false
-          is_grouped: false
-          group_info:
-            label: ''
-            description: ''
-            identifier: ''
-            optional: true
-            widget: select
-            multiple: false
-            remember: false
-            default_group: All
-            default_group_multiple: {  }
-            group_items: {  }
-          plugin_id: in_operator
-          entity_type: node
-          entity_field: type
-        tid:
-          id: tid
-          table: taxonomy_index
-          field: tid
-          relationship: none
-          group_type: group
-          admin_label: ''
-          operator: and
-          value: {  }
-          group: 1
-          exposed: true
-          expose:
-            operator_id: tid_op
-            label: 'Has taxonomy term'
-            description: ''
-            use_operator: false
-            operator: tid_op
-            identifier: tid
-            required: false
-            remember: false
-            multiple: true
-            remember_roles:
-              authenticated: authenticated
-              anonymous: '0'
-              administrator: '0'
-            reduce: false
-          is_grouped: false
-          group_info:
-            label: ''
-            description: ''
-            identifier: ''
-            optional: true
-            widget: select
-            multiple: false
-            remember: false
-            default_group: All
-            default_group_multiple: {  }
-            group_items: {  }
-          reduce_duplicates: false
-          type: select
-          limit: true
-          vid: test_exposed_checkboxes
-          hierarchy: false
-          error_message: true
-          plugin_id: taxonomy_index_tid
-      pager:
-        type: full
-      query:
-        options:
-          query_comment: ''
-        type: views_query
-      style:
-        type: default
-      row:
-        type: 'entity:node'
-      display_extenders: {  }
-    display_plugin: default
-    display_title: Master
-    id: default
-    position: 0
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_interface'
-        - url
-        - url.query_args
-        - user
-        - 'user.node_grants:view'
-      tags: {  }
-  page_1:
-    display_options:
-      path: test_exposed_form_checkboxes
-      display_extenders: {  }
-    display_plugin: page
-    display_title: Page
-    id: page_1
-    position: 0
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_interface'
-        - url
-        - url.query_args
-        - user
-        - 'user.node_grants:view'
-      tags: {  }
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_latest_revision_filter.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_latest_revision_filter.yml
deleted file mode 100644
index 53f0f72a66..0000000000
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_latest_revision_filter.yml
+++ /dev/null
@@ -1,163 +0,0 @@
-langcode: en
-status: true
-dependencies:
-  module:
-    - node
-id: test_latest_revision_filter
-label: ''
-module: views
-description: ''
-tag: ''
-base_table: node_field_revision
-base_field: vid
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: 0
-    display_options:
-      access:
-        type: none
-        options: {  }
-      cache:
-        type: tag
-        options: {  }
-      query:
-        type: views_query
-        options:
-          disable_sql_rewrite: false
-          distinct: false
-          replica: false
-          query_comment: ''
-          query_tags: {  }
-      exposed_form:
-        type: basic
-        options:
-          submit_button: Apply
-          reset_button: false
-          reset_button_label: Reset
-          exposed_sorts_label: 'Sort by'
-          expose_sort_order: true
-          sort_asc_label: Asc
-          sort_desc_label: Desc
-      pager:
-        type: none
-        options:
-          offset: 0
-      style:
-        type: default
-        options:
-          grouping: {  }
-          row_class: ''
-          default_row_class: true
-          uses_fields: false
-      row:
-        type: fields
-        options:
-          inline: {  }
-          separator: ''
-          hide_empty: false
-          default_field_elements: true
-      fields:
-        title:
-          id: title
-          table: node_field_revision
-          field: title
-          entity_type: node
-          entity_field: title
-          label: ''
-          alter:
-            alter_text: false
-            make_link: false
-            absolute: false
-            trim: false
-            word_boundary: false
-            ellipsis: false
-            strip_tags: false
-            html: false
-          hide_empty: false
-          empty_zero: false
-          settings:
-            link_to_entity: false
-          plugin_id: field
-          relationship: none
-          group_type: group
-          admin_label: ''
-          exclude: false
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: true
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: true
-          empty: ''
-          hide_alter_empty: true
-          click_sort_column: value
-          type: string
-          group_column: value
-          group_columns: {  }
-          group_rows: true
-          delta_limit: 0
-          delta_offset: 0
-          delta_reversed: false
-          delta_first_last: false
-          multi_type: separator
-          separator: ', '
-          field_api_classes: false
-      filters:
-        latest_revision:
-          id: latest_revision
-          table: node_revision
-          field: latest_revision
-          relationship: none
-          group_type: group
-          admin_label: ''
-          operator: '='
-          value: ''
-          group: 1
-          exposed: false
-          expose:
-            operator_id: ''
-            label: ''
-            description: ''
-            use_operator: false
-            operator: ''
-            identifier: ''
-            required: false
-            remember: false
-            multiple: false
-            remember_roles:
-              authenticated: authenticated
-          is_grouped: false
-          group_info:
-            label: ''
-            description: ''
-            identifier: ''
-            optional: true
-            widget: select
-            multiple: false
-            remember: false
-            default_group: All
-            default_group_multiple: {  }
-            group_items: {  }
-          entity_type: node
-          plugin_id: latest_revision
-      sorts: {  }
-      header: {  }
-      footer: {  }
-      empty: {  }
-      relationships: {  }
-      arguments: {  }
-      display_extenders: {  }
-      show_admin_links: false
-    cache_metadata:
-      max-age: -1
-      contexts:
-        - 'languages:language_content'
-        - 'languages:language_interface'
-        - 'user.node_grants:view'
-      tags: {  }
diff --git a/core/modules/views/tests/src/Functional/Entity/LatestRevisionFilterTest.php b/core/modules/views/tests/src/Functional/Entity/LatestRevisionFilterTest.php
deleted file mode 100644
index d73a11793b..0000000000
--- a/core/modules/views/tests/src/Functional/Entity/LatestRevisionFilterTest.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-
-namespace Drupal\Tests\views\Functional\Entity;
-
-use Drupal\node\Entity\Node;
-use Drupal\Tests\views\Functional\ViewTestBase;
-use Drupal\views\ViewExecutable;
-use Drupal\views\Views;
-
-/**
- * Tests the 'Latest revision' filter.
- *
- * @group views
- */
-class LatestRevisionFilterTest extends ViewTestBase {
-
-  /**
-   * An array of node revisions.
-   *
-   * @var \Drupal\node\NodeInterface[]
-   */
-  protected $allRevisions = [];
-
-  /**
-   * An array of node revisions.
-   *
-   * @var \Drupal\node\NodeInterface[]
-   */
-  protected $latestRevisions = [];
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = ['test_latest_revision_filter'];
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['node'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp();
-
-    $this->drupalCreateContentType(['type' => 'article']);
-
-    // Create a node that goes through various default/pending revision stages.
-    $node = Node::create([
-      'title' => 'First node - v1 - default',
-      'type' => 'article',
-    ]);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-
-    $node->setTitle('First node - v2 - pending');
-    $node->setNewRevision(TRUE);
-    $node->isDefaultRevision(FALSE);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-
-    $node->setTitle('First node - v3 - default');
-    $node->setNewRevision(TRUE);
-    $node->isDefaultRevision(TRUE);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-
-    $node->setTitle('First node - v4 - pending');
-    $node->setNewRevision(TRUE);
-    $node->isDefaultRevision(TRUE);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-    $this->latestRevisions[$node->getRevisionId()] = $node;
-
-    // Create a node that has a default and a pending revision.
-    $node = Node::create([
-      'title' => 'Second node - v1 - default',
-      'type' => 'article',
-    ]);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-
-    $node->setTitle('Second node - v2 - pending');
-    $node->setNewRevision(TRUE);
-    $node->isDefaultRevision(FALSE);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-    $this->latestRevisions[$node->getRevisionId()] = $node;
-
-    // Create a node that only has a default revision.
-    $node = Node::create([
-      'title' => 'Third node - v1 - default',
-      'type' => 'article',
-    ]);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-    $this->latestRevisions[$node->getRevisionId()] = $node;
-
-    // Create a node that only has a pending revision.
-    $node = Node::create([
-      'title' => 'Fourth node - v1 - pending',
-      'type' => 'article',
-    ]);
-    $node->isDefaultRevision(FALSE);
-    $node->save();
-    $this->allRevisions[$node->getRevisionId()] = $node;
-    $this->latestRevisions[$node->getRevisionId()] = $node;
-  }
-
-  /**
-   * Tests the 'Latest revision' filter.
-   */
-  public function testLatestRevisionFilter() {
-    $view = Views::getView('test_latest_revision_filter');
-
-    $this->executeView($view);
-
-    // Check that we have all the results.
-    $this->assertCount(count($this->latestRevisions), $view->result);
-
-    $expected = $not_expected = [];
-    foreach ($this->allRevisions as $revision_id => $revision) {
-      if (isset($this->latestRevisions[$revision_id])) {
-        $expected[] = [
-          'vid' => $revision_id,
-          'title' => $revision->label(),
-        ];
-      }
-      else {
-        $not_expected[] = $revision_id;
-      }
-    }
-    $this->assertIdenticalResultset($view, $expected, ['vid' => 'vid', 'title' => 'title'], 'The test view only shows the latest revisions.');
-    $this->assertNotInResultSet($view, $not_expected, 'Non-latest revisions are not shown by the view.');
-    $view->destroy();
-  }
-
-  /**
-   * Verifies that a list of revision IDs are not in the result.
-   *
-   * @param \Drupal\views\ViewExecutable $view
-   *   An executed View.
-   * @param array $not_expected_revision_ids
-   *   An array of revision IDs which should not be part of the result set.
-   * @param string $message
-   *   (optional) A custom message to display with the assertion.
-   */
-  protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_revision_ids, $message = '') {
-    $found_revision_ids = array_filter($view->result, function ($row) use ($not_expected_revision_ids) {
-      return in_array($row->vid, $not_expected_revision_ids);
-    });
-    $this->assertFalse($found_revision_ids, $message);
-  }
-
-}
diff --git a/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php b/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
index 7ced4f7071..653ce11527 100644
--- a/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
+++ b/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
@@ -73,10 +73,7 @@ public function testEntityOperations() {
         $this->assertTrue(count($operations) > 0, 'There are operations.');
         foreach ($operations as $operation) {
           $expected_destination = Url::fromUri('internal:/test-entity-operations')->toString();
-          // Update destination property of the URL as generating it in the
-          // test would by default point to the frontpage.
-          $operation['url']->setOption('query', ['destination' => $expected_destination]);
-          $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[@href=:path and text()=:title]', [':path' => $operation['url']->toString(), ':title' => (string) $operation['title']]);
+          $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[@href=:path and text()=:title]', [':path' => $operation['url']->toString() . '?destination=' . $expected_destination, ':title' => (string) $operation['title']]);
           $this->assertEqual(count($result), 1, t('Found entity @operation link with destination parameter.', ['@operation' => $operation['title']]));
           // Entities which were created in Hungarian should link to the Hungarian
           // edit form, others to the English one (which has no path prefix here).
diff --git a/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php b/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
index ea2f5b2373..b3956de8ea 100644
--- a/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
@@ -131,7 +131,7 @@ public function testArgumentDefaultFixed() {
   /**
    * @todo Test php default argument.
    */
-  // function testArgumentDefaultPhp() {}
+  //function testArgumentDefaultPhp() {}
 
   /**
    * Test node default argument.
diff --git a/core/modules/views/tests/src/Functional/Plugin/ExposedFormCheckboxesTest.php b/core/modules/views/tests/src/Functional/Plugin/ExposedFormCheckboxesTest.php
deleted file mode 100644
index 80584d796e..0000000000
--- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormCheckboxesTest.php
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-namespace Drupal\Tests\views\Functional\Plugin;
-
-use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
-use Drupal\taxonomy\Entity\Term;
-use Drupal\taxonomy\Entity\Vocabulary;
-use Drupal\Tests\views\Functional\ViewTestBase;
-use Drupal\views\Tests\ViewTestData;
-use Drupal\views\Views;
-
-/**
- * Tests exposed forms functionality.
- *
- * @group views
- */
-class ExposedFormCheckboxesTest extends ViewTestBase {
-
-  use EntityReferenceTestTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $testViews = ['test_exposed_form_checkboxes'];
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['node', 'views_ui', 'taxonomy'];
-
-  /**
-   * Test terms.
-   *
-   * @var array
-   */
-  public $terms = [];
-
-  /**
-   * Vocabulary for testing checkbox options.
-   *
-   * @var \Drupal\taxonomy\Entity\Vocabulary
-   */
-  public $vocabulary;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp(FALSE);
-
-    // Create a vocabulary and entity reference field so we can test the "is all
-    // of" filter operator. Must be done ahead of the view import so the
-    // vocabulary is in place to meet the view dependencies.
-    $vocabulary = Vocabulary::create([
-      'name' => 'test_exposed_checkboxes',
-      'vid' => 'test_exposed_checkboxes',
-      'nodes' => ['article' => 'article'],
-    ]);
-    $vocabulary->save();
-    $this->vocabulary = $vocabulary;
-
-    ViewTestData::createTestViews(self::class, ['views_test_config']);
-    $this->enableViewsTestModule();
-
-    // Create two content types.
-    $this->drupalCreateContentType(['type' => 'article']);
-    $this->drupalCreateContentType(['type' => 'page']);
-
-    // Create some random nodes: 5 articles, one page.
-    for ($i = 0; $i < 5; $i++) {
-      $this->drupalCreateNode(['type' => 'article']);
-    }
-    $this->drupalCreateNode(['type' => 'page']);
-  }
-
-  /**
-   * Tests overriding the default render option with checkboxes.
-   */
-  public function testExposedFormRenderCheckboxes() {
-    // Use a test theme to convert multi-select elements into checkboxes.
-    \Drupal::service('theme_handler')->install(['views_test_checkboxes_theme']);
-    $this->config('system.theme')
-      ->set('default', 'views_test_checkboxes_theme')
-      ->save();
-
-    // Only display 5 items per page so we can test that paging works.
-    $view = Views::getView('test_exposed_form_checkboxes');
-    $display = &$view->storage->getDisplay('default');
-    $display['display_options']['pager']['options']['items_per_page'] = 5;
-
-    $view->save();
-    $this->drupalGet('test_exposed_form_checkboxes');
-
-    $actual = $this->xpath('//form//input[@type="checkbox" and @name="type[article]"]');
-    $this->assertEqual(count($actual), 1, 'Article option renders as a checkbox.');
-    $actual = $this->xpath('//form//input[@type="checkbox" and @name="type[page]"]');
-    $this->assertEqual(count($actual), 1, 'Page option renders as a checkbox');
-
-    // Ensure that all results are displayed.
-    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
-    $this->assertEqual(count($rows), 5, '5 rows are displayed by default on the first page when no options are checked.');
-
-    $this->clickLink('Page 2');
-    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
-    $this->assertEqual(count($rows), 1, '1 row is displayed by default on the second page when no options are checked.');
-    $this->assertNoText('An illegal choice has been detected. Please contact the site administrator.');
-  }
-
-  /**
-   * Tests that "is all of" filters work with checkboxes.
-   */
-  public function testExposedIsAllOfFilter() {
-    foreach (['Term 1', 'Term 2', 'Term 3'] as $term_name) {
-      // Add a few terms to the new vocabulary.
-      $term = Term::create([
-        'name' => $term_name,
-        'vid' => $this->vocabulary->id(),
-      ]);
-      $term->save();
-      $this->terms[] = $term;
-    }
-
-    // Create a field.
-    $field_name = Unicode::strtolower($this->randomMachineName());
-    $handler_settings = [
-      'target_bundles' => [
-        $this->vocabulary->id() => $this->vocabulary->id(),
-      ],
-      'auto_create' => FALSE,
-    ];
-    $this->createEntityReferenceField('node', 'article', $field_name, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
-
-    // Add some test nodes.
-    $this->createNode([
-      'type' => 'article',
-      $field_name => [$this->terms[0]->id(), $this->terms[1]->id()],
-    ]);
-    $this->createNode([
-      'type' => 'article',
-      $field_name => [$this->terms[0]->id(), $this->terms[2]->id()],
-    ]);
-
-    // Use a test theme to convert multi-select elements into checkboxes.
-    \Drupal::service('theme_handler')->install(['views_test_checkboxes_theme']);
-    $this->config('system.theme')
-      ->set('default', 'views_test_checkboxes_theme')
-      ->save();
-
-    $this->drupalGet('test_exposed_form_checkboxes');
-
-    // Ensure that all results are displayed.
-    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
-    $this->assertEqual(count($rows), 8, 'All rows are displayed by default on the first page when no options are checked.');
-    $this->assertNoText('An illegal choice has been detected. Please contact the site administrator.');
-
-    // Select one option and ensure we still have results.
-    $tid = $this->terms[0]->id();
-    $this->drupalPostForm(NULL, ["tid[$tid]" => $tid], t('Apply'));
-
-    // Ensure only nodes tagged with $tid are displayed.
-    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
-    $this->assertEqual(count($rows), 2, 'Correct rows are displayed when a tid is selected.');
-    $this->assertNoText('An illegal choice has been detected. Please contact the site administrator.');
-  }
-
-}
diff --git a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
index eaa5aaa32f..134f7b5458 100644
--- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
@@ -191,6 +191,48 @@ public function testResetButton() {
     $this->helperButtonHasLabel('edit-reset', $expected_label);
   }
 
+  /**
+   * Tests overriding the default render option with checkboxes.
+   */
+  public function testExposedFormRenderCheckboxes() {
+    // Make sure we have at least two options for node type.
+    $this->drupalCreateContentType(['type' => 'page']);
+    $this->drupalCreateNode(['type' => 'page']);
+
+    // Use a test theme to convert multi-select elements into checkboxes.
+    \Drupal::service('theme_handler')->install(['views_test_checkboxes_theme']);
+    $this->config('system.theme')
+      ->set('default', 'views_test_checkboxes_theme')
+      ->save();
+
+    // Set the "type" filter to multi-select.
+    $view = Views::getView('test_exposed_form_buttons');
+    $filter = $view->getHandler('page_1', 'filter', 'type');
+    $filter['expose']['multiple'] = TRUE;
+    $view->setHandler('page_1', 'filter', 'type', $filter);
+
+    // Only display 5 items per page so we can test that paging works.
+    $display = &$view->storage->getDisplay('default');
+    $display['display_options']['pager']['options']['items_per_page'] = 5;
+
+    $view->save();
+    $this->drupalGet('test_exposed_form_buttons');
+
+    $actual = $this->xpath('//form//input[@type="checkbox" and @name="type[article]"]');
+    $this->assertEqual(count($actual), 1, 'Article option renders as a checkbox.');
+    $actual = $this->xpath('//form//input[@type="checkbox" and @name="type[page]"]');
+    $this->assertEqual(count($actual), 1, 'Page option renders as a checkbox');
+
+    // Ensure that all results are displayed.
+    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
+    $this->assertEqual(count($rows), 5, '5 rows are displayed by default on the first page when no options are checked.');
+
+    $this->clickLink('Page 2');
+    $rows = $this->xpath("//div[contains(@class, 'views-row')]");
+    $this->assertEqual(count($rows), 1, '1 row is displayed by default on the second page when no options are checked.');
+    $this->assertNoText('An illegal choice has been detected. Please contact the site administrator.');
+  }
+
   /**
    * Tests the exposed block functionality.
    */
@@ -278,7 +320,8 @@ public function testTextInputRequired() {
    */
   public function testExposedSortAndItemsPerPage() {
     for ($i = 0; $i < 50; $i++) {
-      $entity = EntityTest::create([]);
+      $entity = EntityTest::create([
+      ]);
       $entity->save();
     }
     $contexts = [
diff --git a/core/modules/views/tests/src/Functional/Plugin/PagerTest.php b/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
index c80fa09bfc..8085256df0 100644
--- a/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
@@ -93,7 +93,7 @@ public function testStorePagerSettings() {
     $this->assertText('20 items');
 
     // add new display and test the settings again, by override it.
-    $edit = [];
+    $edit = [ ];
     // Add a display and override the pager settings.
     $this->drupalPostForm('admin/structure/views/view/test_store_pager_settings/edit', $edit, t('Add Page'));
     $edit = [
diff --git a/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php b/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php
index 1b3078b544..0ca6f8775e 100644
--- a/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php
@@ -70,9 +70,9 @@ public function testBulkSelection() {
 
     // Create third node now that the admin overview has been rendered.
     $node_3 = $this->drupalCreateNode([
-      'type' => 'page',
-      'title' => 'The third node',
-    ]);
+        'type' => 'page',
+        'title' => 'The third node']
+    );
 
     // Now click 'Apply to selected items' and assert the second node is
     // selected on the confirm form.
diff --git a/core/modules/views/tests/src/Functional/ViewTestBase.php b/core/modules/views/tests/src/Functional/ViewTestBase.php
index 10bc5d48bc..0465f966c3 100644
--- a/core/modules/views/tests/src/Functional/ViewTestBase.php
+++ b/core/modules/views/tests/src/Functional/ViewTestBase.php
@@ -136,8 +136,6 @@ protected function executeView(ViewExecutable $view, $args = []) {
 
   /**
    * Returns the schema definition.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     return ViewTestData::schemaDefinition();
diff --git a/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php b/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
index dd1d1ae264..8cca9c3601 100644
--- a/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
+++ b/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
@@ -24,6 +24,7 @@ class ContextualFilterTest extends JavascriptTestBase {
    */
   public static $testViews = ['test_field_body'];
 
+
   /**
    * {@inheritdoc}
    */
@@ -32,14 +33,9 @@ protected function setUp() {
 
     ViewTestData::createTestViews(get_class($this), ['views_test_config']);
 
-    // Always show advanced column.
+    // Disable automatic live preview to make the sequence of calls clearer.
     \Drupal::configFactory()->getEditable('views.settings')->set('ui.show.advanced_column', TRUE)->save();
 
-    // Disable automatic live preview to make the sequence of calls clearer. And
-    // prevent errors on saving the view with the preview ajax load that are
-    // cancelled.
-    \Drupal::configFactory()->getEditable('views.settings')->set('ui.always_live_preview', FALSE)->save();
-
     $account = $this->drupalCreateUser(['administer views']);
     $this->drupalLogin($account);
   }
@@ -48,40 +44,32 @@ protected function setUp() {
    * Test adding a contextual filter handler through the UI.
    */
   public function testAddContextualFilterUI() {
+    $web_assert = $this->assertSession();
+
     $this->drupalGet('/admin/structure/views/view/test_field_body');
+    $web_assert->assertWaitOnAjaxRequest();
 
-    $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
 
     $page->clickLink('views-add-argument');
+    $web_assert->assertWaitOnAjaxRequest();
 
-    $field = $web_assert->waitForField('name[node_field_data.nid]');
-    $this->assertNotEmpty($field);
-    $field->check();
-
+    $page->checkField('name[node_field_data.nid]');
     $add_button = $page->find('css', '.ui-dialog-buttonset .button--primary');
     $add_button->click();
+    $web_assert->assertWaitOnAjaxRequest();
 
-    $field_action = $web_assert->waitForField('options[default_action]');
-    $this->assertNotEmpty($field_action);
-    $field_action->setValue('default');
-
+    $page->fillField('options[default_action]', 'default');
     $page->selectFieldOption('options[default_argument_type]', 'node');
     $add_button = $page->find('css', '.ui-dialog-buttonset .button--primary');
     $add_button->click();
-
-    // Wait for the dialog to close.
-    $page->waitFor(10, function () use ($page) {
-      $field = $page->find('css', '.ui-dialog-buttonset .button--primary');
-      return empty($field);
-    });
-
+    $web_assert->assertWaitOnAjaxRequest();
     $page->pressButton('edit-actions-submit');
-
+    $web_assert->assertWaitOnAjaxRequest();
     $page->clickLink('Content: ID');
     // Check that the dialog opens.
-    $field_action = $web_assert->waitForField('options[default_action]');
-    $this->assertNotEmpty($field_action);
+    $web_assert->assertWaitOnAjaxRequest();
+    $page->pressButton('Close');
   }
 
 }
diff --git a/core/modules/views/tests/src/Kernel/Handler/ComputedFieldTest.php b/core/modules/views/tests/src/Kernel/Handler/ComputedFieldTest.php
deleted file mode 100644
index 8f85f69018..0000000000
--- a/core/modules/views/tests/src/Kernel/Handler/ComputedFieldTest.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-namespace Drupal\Tests\views\Kernel\Handler;
-
-use Drupal\entity_test\Entity\EntityTestComputedField;
-use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
-use Drupal\views\Views;
-
-/**
- * Provides some integration tests for the Field handler.
- *
- * @see \Drupal\views\Plugin\views\field\EntityField
- * @group views
- */
-class ComputedFieldTest extends ViewsKernelTestBase {
-
-  /**
-   * Views to be enabled.
-   *
-   * @var array
-   */
-  public static $testViews = ['computed_field_view'];
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['entity_test'];
-
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
-
-    $this->installEntitySchema('entity_test_computed_field');
-  }
-
-  /**
-   * Test the computed field handler.
-   */
-  public function testComputedFieldHandler() {
-    \Drupal::state()->set('entity_test_computed_field_item_list_value', ['computed string']);
-
-    $entity = EntityTestComputedField::create([]);
-    $entity->save();
-
-    $view = Views::getView('computed_field_view');
-
-    $rendered_view = $view->preview();
-    $output = $this->container->get('renderer')->renderRoot($rendered_view);
-    $this->assertContains('computed string', (string) $output);
-  }
-
-}
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldEntityLinkTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldEntityLinkTest.php
index a7f5116f35..874f03d4fc 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldEntityLinkTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldEntityLinkTest.php
@@ -67,11 +67,11 @@ protected function setUpFixtures() {
    */
   public function testEntityLink() {
     // Anonymous users cannot see edit/delete links.
-    $expected_results = ['canonical' => TRUE, 'edit-form' => FALSE, 'delete-form' => FALSE, 'canonical_raw' => TRUE, 'canonical_raw_absolute' => TRUE];
+    $expected_results = ['canonical' => TRUE, 'edit-form' => FALSE, 'delete-form' => FALSE];
     $this->doTestEntityLink(\Drupal::currentUser(), $expected_results);
 
     // Admin users cannot see all links.
-    $expected_results = ['canonical' => TRUE, 'edit-form' => TRUE, 'delete-form' => TRUE, 'canonical_raw' => TRUE, 'canonical_raw_absolute' => TRUE];
+    $expected_results = ['canonical' => TRUE, 'edit-form' => TRUE, 'delete-form' => TRUE];
     $this->doTestEntityLink($this->adminUser, $expected_results);
   }
 
@@ -94,39 +94,16 @@ protected function doTestEntityLink(AccountInterface $account, $expected_results
         'label' => 'View entity test',
         'field_id' => 'view_entity_test',
         'destination' => FALSE,
-        'link' => TRUE,
-        'options' => [],
-        'relationship' => 'canonical',
       ],
       'edit-form' => [
         'label' => 'Edit entity test',
         'field_id' => 'edit_entity_test',
         'destination' => TRUE,
-        'link' => TRUE,
-        'options' => [],
-        'relationship' => 'edit-form',
       ],
       'delete-form' => [
         'label' => 'Delete entity test',
         'field_id' => 'delete_entity_test',
         'destination' => TRUE,
-        'link' => TRUE,
-        'options' => [],
-        'relationship' => 'delete-form',
-      ],
-      'canonical_raw' => [
-        'field_id' => 'canonical_entity_test',
-        'destination' => FALSE,
-        'link' => FALSE,
-        'options' => [],
-        'relationship' => 'canonical',
-      ],
-      'canonical_raw_absolute' => [
-        'field_id' => 'absolute_entity_test',
-        'destination' => FALSE,
-        'link' => FALSE,
-        'options' => ['absolute' => TRUE],
-        'relationship' => 'canonical',
       ],
     ];
 
@@ -135,14 +112,9 @@ protected function doTestEntityLink(AccountInterface $account, $expected_results
       foreach ($expected_results as $template => $expected_result) {
         $expected_link = '';
         if ($expected_result) {
-          $path = $entity->url($info[$template]['relationship'], $info[$template]['options']);
+          $path = $entity->url($template);
           $destination = $info[$template]['destination'] ? '?destination=/' : '';
-          if ($info[$template]['link']) {
-            $expected_link = '<a href="' . $path . $destination . '" hreflang="en">' . $info[$template]['label'] . '</a>';
-          }
-          else {
-            $expected_link = $path;
-          }
+          $expected_link = '<a href="' . $path . $destination . '" hreflang="en">' . $info[$template]['label'] . '</a>';
         }
         $link = $view->style_plugin->getField($index, $info[$template]['field_id']);
         $this->assertEqual($link, $expected_link);
diff --git a/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php b/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php
index feffbafd9e..e5d37119df 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php
@@ -290,8 +290,6 @@ protected function dataSet() {
 
   /**
    * Allow {views_test_data}.job to be NULL.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     $schema = parent::schemaDefinition();
diff --git a/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php b/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php
index e1093e47f7..b154a78529 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php
@@ -288,7 +288,8 @@ public function testFilterNumericEmpty() {
     ]);
 
     $this->executeView($view);
-    $resultset = [];
+    $resultset = [
+    ];
     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
 
     $view->destroy();
@@ -344,7 +345,8 @@ public function testFilterNumericExposedGroupedEmpty() {
     $this->container->get('router.builder')->rebuild();
 
     $this->executeView($view);
-    $resultset = [];
+    $resultset = [
+    ];
     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
   }
 
diff --git a/core/modules/views/tests/src/Kernel/Handler/FilterStringTest.php b/core/modules/views/tests/src/Kernel/Handler/FilterStringTest.php
index 03c1b878a5..c24cc6ff03 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FilterStringTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FilterStringTest.php
@@ -39,9 +39,6 @@ public function viewsData() {
     return $data;
   }
 
-  /**
-   * {@inheritdoc}
-   */
   protected function schemaDefinition() {
     $schema = parent::schemaDefinition();
     $schema['views_test_data']['fields']['description'] = [
diff --git a/core/modules/views/tests/src/Kernel/Handler/SortTranslationTest.php b/core/modules/views/tests/src/Kernel/Handler/SortTranslationTest.php
index e49ef7a2c7..549761d540 100644
--- a/core/modules/views/tests/src/Kernel/Handler/SortTranslationTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/SortTranslationTest.php
@@ -42,7 +42,7 @@ protected function setUp($import_test_views = TRUE) {
     $this->installEntitySchema('node');
     $this->installEntitySchema('user');
 
-    // $this->installConfig('node');
+    //$this->installConfig('node');
     $this->container->get('kernel')->rebuildContainer();
 
     $node_type = NodeType::create(['type' => 'article']);
diff --git a/core/modules/views/tests/src/Kernel/Plugin/RelationshipJoinTestBase.php b/core/modules/views/tests/src/Kernel/Plugin/RelationshipJoinTestBase.php
index 19d5e9554b..1163297b1b 100644
--- a/core/modules/views/tests/src/Kernel/Plugin/RelationshipJoinTestBase.php
+++ b/core/modules/views/tests/src/Kernel/Plugin/RelationshipJoinTestBase.php
@@ -44,8 +44,6 @@ protected function setUpFixtures() {
    * Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
    *
    * Adds a uid column to test the relationships.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     $schema = parent::schemaDefinition();
diff --git a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
index b49d0c32fb..f843892e5d 100644
--- a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
@@ -196,13 +196,8 @@ public function testSetDisplayWithInvalidDisplay() {
     $view->initDisplay();
 
     // Error is triggered while calling the wrong display.
-    try {
-      $view->setDisplay('invalid');
-      $this->fail('Expected error, when setDisplay() called with invalid display ID');
-    }
-    catch (\PHPUnit_Framework_Error_Warning $e) {
-      $this->assertEquals('setDisplay() called with invalid display ID "invalid".', $e->getMessage());
-    }
+    $this->setExpectedException(\PHPUnit_Framework_Error::class);
+    $view->setDisplay('invalid');
 
     $this->assertEqual($view->current_display, 'default', 'If setDisplay is called with an invalid display id the default display should be used.');
     $this->assertEqual(spl_object_hash($view->display_handler), spl_object_hash($view->displayHandlers->get('default')));
@@ -492,37 +487,6 @@ public function testSerialization() {
     $this->assertIdentical($unserialized->current_display, 'page_1', 'The expected display was set on the unserialized view.');
     $this->assertIdentical($unserialized->args, ['test'], 'The expected argument was set on the unserialized view.');
     $this->assertIdentical($unserialized->getCurrentPage(), 2, 'The expected current page was set on the unserialized view.');
-
-    // Get the definition of node's nid field, for example. Only get it not from
-    // the field manager directly, but from the item data definition. It should
-    // be the same base field definition object (the field and item definitions
-    // refer to each other).
-    // See https://bugs.php.net/bug.php?id=66052
-    $field_manager = $this->container->get('entity_field.manager');
-    $nid_definition_before = $field_manager->getBaseFieldDefinitions('node')['nid']
-      ->getItemDefinition()
-      ->getFieldDefinition();
-
-    // Load and execute a view.
-    $view_entity = View::load('content');
-    $view_executable = $view_entity->getExecutable();
-    $view_executable->execute('page_1');
-
-    // Reset the static cache. Don't use clearCachedFieldDefinitions() since
-    // that clears the persistent cache and we need to get the serialized cache
-    // data.
-    $field_manager->useCaches(FALSE);
-    $field_manager->useCaches(TRUE);
-
-    // Serialize the ViewExecutable as part of other data.
-    unserialize(serialize(['SOMETHING UNEXPECTED', $view_executable]));
-
-    // Make sure the serialisation of the ViewExecutable didn't influence the
-    // field definitions.
-    $nid_definition_after = $field_manager->getBaseFieldDefinitions('node')['nid']
-      ->getItemDefinition()
-      ->getFieldDefinition();
-    $this->assertEquals($nid_definition_before->getPropertyDefinitions(), $nid_definition_after->getPropertyDefinitions());
   }
 
 }
diff --git a/core/modules/views/tests/src/Kernel/ViewsKernelTestBase.php b/core/modules/views/tests/src/Kernel/ViewsKernelTestBase.php
index 4bbe402863..f149b7fba1 100644
--- a/core/modules/views/tests/src/Kernel/ViewsKernelTestBase.php
+++ b/core/modules/views/tests/src/Kernel/ViewsKernelTestBase.php
@@ -129,8 +129,6 @@ protected function executeView($view, array $args = []) {
 
   /**
    * Returns the schema definition.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     return ViewTestData::schemaDefinition();
diff --git a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
index 822239f012..f766975e48 100644
--- a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
+++ b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
@@ -18,9 +18,6 @@
  */
 class ViewAjaxControllerTest extends UnitTestCase {
 
-  const USE_AJAX = TRUE;
-  const USE_NO_AJAX = FALSE;
-
   /**
    * The mocked view entity storage.
    *
@@ -189,6 +186,23 @@ public function testAjaxView() {
 
     list($view, $executable) = $this->setupValidMocks();
 
+    $display_handler = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
+      ->disableOriginalConstructor()
+      ->getMock();
+    // Ensure that the pager element is not set.
+    $display_handler->expects($this->never())
+      ->method('setOption');
+
+    $display_collection = $this->getMockBuilder('Drupal\views\DisplayPluginCollection')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $display_collection->expects($this->any())
+      ->method('get')
+      ->with('page_1')
+      ->will($this->returnValue($display_handler));
+
+    $executable->displayHandlers = $display_collection;
+
     $this->redirectDestination->expects($this->atLeastOnce())
       ->method('set')
       ->with('/test-page?type=article');
@@ -201,24 +215,6 @@ public function testAjaxView() {
     $this->assertViewResultCommand($response);
   }
 
-  /**
-   * Tests a valid view without ajax enabled.
-   */
-  public function testAjaxViewWithoutAjax() {
-    $request = new Request();
-    $request->request->set('view_name', 'test_view');
-    $request->request->set('view_display_id', 'page_1');
-    $request->request->set('view_path', '/test-page');
-    $request->request->set('_wrapper_format', 'ajax');
-    $request->request->set('ajax_page_state', 'drupal.settings[]');
-    $request->request->set('type', 'article');
-
-    $this->setupValidMocks(static::USE_NO_AJAX);
-
-    $this->setExpectedException(AccessDeniedHttpException::class);
-    $this->viewAjaxController->ajaxView($request);
-  }
-
   /**
    * Tests a valid view with arguments.
    */
@@ -301,15 +297,8 @@ public function testAjaxViewWithPager() {
 
   /**
    * Sets up a bunch of valid mocks like the view entity and executable.
-   *
-   * @param bool $use_ajax
-   *   Whether the 'use_ajax' option is set on the view display. Defaults to
-   *   using ajax (TRUE).
-   *
-   * @return array
-   *   A pair of view storage entity and executable.
    */
-  protected function setupValidMocks($use_ajax = self::USE_AJAX) {
+  protected function setupValidMocks() {
     $view = $this->getMockBuilder('Drupal\views\Entity\View')
       ->disableOriginalConstructor()
       ->getMock();
@@ -325,10 +314,7 @@ protected function setupValidMocks($use_ajax = self::USE_AJAX) {
     $executable->expects($this->once())
       ->method('access')
       ->will($this->returnValue(TRUE));
-    $executable->expects($this->any())
-      ->method('setDisplay')
-      ->willReturn(TRUE);
-    $executable->expects($this->atMost(1))
+    $executable->expects($this->once())
       ->method('preview')
       ->will($this->returnValue(['#markup' => 'View result']));
 
@@ -337,27 +323,6 @@ protected function setupValidMocks($use_ajax = self::USE_AJAX) {
       ->with($view)
       ->will($this->returnValue($executable));
 
-    $display_handler = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
-      ->disableOriginalConstructor()
-      ->getMock();
-    // Ensure that the pager element is not set.
-    $display_handler->expects($this->never())
-      ->method('setOption');
-    $display_handler->expects($this->any())
-      ->method('ajaxEnabled')
-      ->willReturn($use_ajax);
-
-    $display_collection = $this->getMockBuilder('Drupal\views\DisplayPluginCollection')
-      ->disableOriginalConstructor()
-      ->getMock();
-    $display_collection->expects($this->any())
-      ->method('get')
-      ->with('page_1')
-      ->will($this->returnValue($display_handler));
-
-    $executable->display_handler = $display_handler;
-    $executable->displayHandlers = $display_collection;
-
     return [$view, $executable];
   }
 
diff --git a/core/modules/views/tests/src/Unit/EntityViewsDataTest.php b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
index eefc541180..74bcc083e1 100644
--- a/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
+++ b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
@@ -298,9 +298,7 @@ public function testRevisionTableWithRevisionDataTableAndDataTable() {
     $this->assertCount(1, $revision_field_data['table']['join']);
     $this->assertEquals([
       'entity_test_mul_property_data' => [
-        'left_field' => 'revision_id',
-        'field' => 'revision_id',
-        'type' => 'INNER',
+        'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER'
       ],
     ], $revision_field_data['table']['join']);
 
@@ -308,9 +306,7 @@ public function testRevisionTableWithRevisionDataTableAndDataTable() {
     $this->assertCount(1, $revision_base_data['table']['join']);
     $this->assertEquals([
       'entity_test_mulrev_property_revision' => [
-        'left_field' => 'revision_id',
-        'field' => 'revision_id',
-        'type' => 'INNER',
+        'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER'
       ],
     ], $revision_base_data['table']['join']);
 
@@ -346,9 +342,7 @@ public function testRevisionTableWithRevisionDataTable() {
     $this->assertCount(1, $revision_field_data['table']['join']);
     $this->assertEquals([
       'entity_test_mulrev_field_data' => [
-        'left_field' => 'revision_id',
-        'field' => 'revision_id',
-        'type' => 'INNER',
+        'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER'
       ],
     ], $revision_field_data['table']['join']);
 
@@ -356,9 +350,7 @@ public function testRevisionTableWithRevisionDataTable() {
     $this->assertCount(1, $revision_base_data['table']['join']);
     $this->assertEquals([
       'entity_test_mulrev_property_revision' => [
-        'left_field' => 'revision_id',
-        'field' => 'revision_id',
-        'type' => 'INNER',
+        'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER'
       ],
     ], $revision_base_data['table']['join']);
     $this->assertFalse(isset($data['data_table']));
@@ -540,11 +532,10 @@ public function testBaseTableFields() {
       'left_field' => 'id',
       'field' => 'entity_id',
       'extra' => [[
-          'field' => 'deleted',
-          'value' => 0,
-          'numeric' => TRUE,
-        ],
-      ],
+        'field' => 'deleted',
+        'value' => 0,
+        'numeric' => TRUE,
+      ]],
     ], $data['entity_test__string']['table']['join']['entity_test']);
   }
 
@@ -696,11 +687,10 @@ public function testDataTableFields() {
       'left_field' => 'id',
       'field' => 'entity_id',
       'extra' => [[
-          'field' => 'deleted',
-          'value' => 0,
-          'numeric' => TRUE,
-        ],
-      ],
+        'field' => 'deleted',
+        'value' => 0,
+        'numeric' => TRUE,
+      ]],
     ], $data['entity_test_mul__string']['table']['join']['entity_test_mul']);
   }
 
@@ -882,11 +872,10 @@ public function testRevisionTableFields() {
       'left_field' => 'id',
       'field' => 'entity_id',
       'extra' => [[
-          'field' => 'deleted',
-          'value' => 0,
-          'numeric' => TRUE,
-        ],
-      ],
+        'field' => 'deleted',
+        'value' => 0,
+        'numeric' => TRUE,
+      ]],
     ], $data['entity_test_mulrev__string']['table']['join']['entity_test_mulrev_property_data']);
 
     $this->assertStringField($data['entity_test_mulrev_revision__string']['string']);
@@ -895,11 +884,10 @@ public function testRevisionTableFields() {
       'left_field' => 'revision_id',
       'field' => 'entity_id',
       'extra' => [[
-          'field' => 'deleted',
-          'value' => 0,
-          'numeric' => TRUE,
-        ],
-      ],
+        'field' => 'deleted',
+        'value' => 0,
+        'numeric' => TRUE,
+      ]],
     ], $data['entity_test_mulrev_revision__string']['table']['join']['entity_test_mulrev_property_revision']);
   }
 
diff --git a/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php b/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
index 76f0cd8683..c89554a77c 100644
--- a/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
+++ b/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
@@ -139,8 +139,8 @@ public function testOnAlterRoutes() {
   /**
    * Sets up mocks of Views objects needed for testing.
    *
-   * @return \Drupal\views\Plugin\views\display\DisplayRouterInterface[]|\PHPUnit_Framework_MockObject_MockObject[]
-   *   An array of two mocked view displays.
+   * @return array \Drupal\views\Plugin\views\display\DisplayRouterInterface[]|\PHPUnit_Framework_MockObject_MockObject[]
+   *   An array of two mocked view displays
    */
   protected function setupMocks() {
     $executable = $this->getMockBuilder('Drupal\views\ViewExecutable')
diff --git a/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
index ac5a1fe4b9..12b7ca1998 100644
--- a/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
@@ -73,22 +73,18 @@ public function testGetEntityTypeForFieldWithRelationship() {
     $this->viewsData->expects($this->any())
       ->method('get')
       ->willReturnMap([
-        [
-          'test_entity_type_table',
-          [
-            'table' => ['entity type' => 'test_entity_type'],
-            'test_relationship' => [
-              'relationship' => [
-                'base' => 'test_other_entity_type_table',
-                'base field' => 'id',
-              ],
+        ['test_entity_type_table', [
+          'table' => ['entity type' => 'test_entity_type'],
+          'test_relationship' => [
+            'relationship' => [
+              'base' => 'test_other_entity_type_table',
+              'base field' => 'id',
             ],
           ],
-        ],
-        [
-          'test_other_entity_type_table',
-          ['table' => ['entity type' => 'test_other_entity_type']],
-        ],
+        ]],
+        ['test_other_entity_type_table', [
+          'table' => ['entity type' => 'test_other_entity_type'],
+        ]],
       ]);
     $handler->setViewsData($this->viewsData);
 
diff --git a/core/modules/views/tests/src/Unit/Plugin/query/SqlTest.php b/core/modules/views/tests/src/Unit/Plugin/query/SqlTest.php
index bae90240f0..02a5ce64c8 100644
--- a/core/modules/views/tests/src/Unit/Plugin/query/SqlTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/query/SqlTest.php
@@ -139,7 +139,7 @@ protected function setupEntityTypeManager(EntityTypeManagerInterface $entity_typ
    *
    * @param \Drupal\Core\Entity\EntityInterface[][] $entities_by_type
    *   Test entities keyed by entity type and entity ID.
-   * @param \Drupal\Core\Entity\EntityInterface[][] $entity_revisions_by_type
+   * @param \Drupal\Core\Entity\EntityInterface[][] $entities_by_type
    *   Test entities keyed by entity type and revision ID.
    *
    * @return \Prophecy\Prophecy\ObjectProphecy
diff --git a/core/modules/views/tests/src/Unit/PluginBaseTest.php b/core/modules/views/tests/src/Unit/PluginBaseTest.php
index 622b42a846..718cf44e37 100644
--- a/core/modules/views/tests/src/Unit/PluginBaseTest.php
+++ b/core/modules/views/tests/src/Unit/PluginBaseTest.php
@@ -79,7 +79,8 @@ public function providerTestUnpackOptions() {
       'storage' => [
         'key' => 'value',
       ],
-      'options' => [],
+      'options' => [
+      ],
       'definition' => [
         'key' => ['default' => 'value2'],
       ],
@@ -171,7 +172,9 @@ public function providerTestUnpackOptions() {
       ],
       'definition' => [
         'key0' => ['default' => 'value0'],
-        'key1' => ['contains' => ['key1:1' => ['default' => 'value1:1']]],
+        'key1' => ['contains' => [
+          'key1:1' => ['default' => 'value1:1'],
+        ]],
       ],
       'expected' => [
         'key0' => 'value',
@@ -185,29 +188,29 @@ public function providerTestUnpackOptions() {
         'key2' => [
           'key2:1' => [
             'key2:1:1' => 'value0',
-            'key2:1:2' => ['key2:1:2:1' => 'value1'],
+            'key2:1:2' => [
+              'key2:1:2:1' => 'value1',
+            ],
           ],
         ],
       ],
       'definition' => [
-        'key2' => [
-          'contains' => [
-            'key2:1' => [
-              'contains' => [
-                'key2:1:1' => ['default' => 'value2:1:2:1'],
-                'key2:1:2' => [
-                  'contains' => ['key2:1:2:1' => ['default' => 'value2:1:2:1']],
-                ],
-              ],
-            ],
-          ],
-        ],
+        'key2' => ['contains' => [
+          'key2:1' => ['contains' => [
+            'key2:1:1' => ['default' => 'value2:1:2:1'],
+            'key2:1:2' => ['contains' => [
+              'key2:1:2:1' => ['default' => 'value2:1:2:1'],
+            ]],
+          ]],
+        ]],
       ],
       'expected' => [
         'key2' => [
           'key2:1' => [
             'key2:1:1' => 'value0',
-            'key2:1:2' => ['key2:1:2:1' => 'value1'],
+            'key2:1:2' => [
+              'key2:1:2:1' => 'value1',
+            ],
           ],
         ],
       ],
@@ -258,12 +261,10 @@ public function providerTestSetOptionDefault() {
       'storage' => [],
       'definition' => [
         'key' => ['default' => 'value'],
-        'key2' => [
-          'contains' => [
-            'key2:1' => ['default' => 'value2:1'],
-            'key2:2' => ['default' => 'value2:2'],
-          ],
-        ],
+        'key2' => ['contains' => [
+          'key2:1' => ['default' => 'value2:1'],
+          'key2:2' => ['default' => 'value2:2'],
+        ]],
       ],
       'expected' => [
         'key' => 'value',
diff --git a/core/modules/views/tests/src/Unit/ViewExecutableTest.php b/core/modules/views/tests/src/Unit/ViewExecutableTest.php
index e0aada0285..f30a19de67 100644
--- a/core/modules/views/tests/src/Unit/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Unit/ViewExecutableTest.php
@@ -311,7 +311,7 @@ public function testBuildThemeFunctions() {
     ];
     $this->assertEquals($expected, $view->buildThemeFunctions('test_hook'));
 
-    // Change the name of the display plugin and make sure that is in the array.
+    //Change the name of the display plugin and make sure that is in the array.
     $view->display_handler->display['display_plugin'] = 'default2';
 
     $expected = [
@@ -364,14 +364,12 @@ public function testAddHandler() {
         ->method('setOption')
         ->with($this->callback(function($argument) {
           return $argument;
-        }), [
-          'test_field' => [
-            'id' => 'test_field',
-            'table' => 'test_entity',
-            'field' => 'test_field',
-            'plugin_id' => 'standard',
-          ],
-        ]);
+        }), ['test_field' => [
+          'id' => 'test_field',
+          'table' => 'test_entity',
+          'field' => 'test_field',
+          'plugin_id' => 'standard',
+        ]]);
     }
 
     foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
@@ -407,16 +405,14 @@ public function testAddHandlerWithEntityField() {
         ->method('setOption')
         ->with($this->callback(function($argument) {
           return $argument;
-        }), [
-          'test_field' => [
-            'id' => 'test_field',
-            'table' => 'test_entity',
-            'field' => 'test_field',
-            'entity_type' => 'test_entity_type',
-            'entity_field' => 'test_field',
-            'plugin_id' => 'standard',
-          ],
-        ]);
+        }), ['test_field' => [
+          'id' => 'test_field',
+          'table' => 'test_entity',
+          'field' => 'test_field',
+          'entity_type' => 'test_entity_type',
+          'entity_field' => 'test_field',
+          'plugin_id' => 'standard',
+        ]]);
     }
 
     foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
diff --git a/core/modules/views/tests/themes/views_test_checkboxes_theme/views_test_checkboxes_theme.theme b/core/modules/views/tests/themes/views_test_checkboxes_theme/views_test_checkboxes_theme.theme
index 393c6cbd1c..cab52ac713 100644
--- a/core/modules/views/tests/themes/views_test_checkboxes_theme/views_test_checkboxes_theme.theme
+++ b/core/modules/views/tests/themes/views_test_checkboxes_theme/views_test_checkboxes_theme.theme
@@ -11,10 +11,5 @@
  * Changes an exposed "type" filter from a multi-select to checkboxes.
  */
 function views_test_checkboxes_theme_form_views_exposed_form_alter(&$form, FormStateInterface $form_state) {
-  if (isset($form['type'])) {
-    $form['type']['#type'] = 'checkboxes';
-  }
-  if (isset($form['tid'])) {
-    $form['tid']['#type'] = 'checkboxes';
-  }
+  $form['type']['#type'] = 'checkboxes';
 }
diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index e6af1982f7..c21b9c54e8 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -544,11 +544,11 @@ function hook_field_views_data(\Drupal\field\FieldStorageConfigInterface $field_
  * default data that views_field_default_views_data() supplies for the
  * field storage.
  *
- * @param array $data
- *   The views data for the field storage. This has the same format as the
- *   return value of hook_views_data().
- * @param \Drupal\field\FieldStorageConfigInterface $field_storage
- *   The field storage config entity.
+ *  @param array $data
+ *    The views data for the field storage. This has the same format as the
+ *    return value of hook_views_data().
+ *  @param \Drupal\field\FieldStorageConfigInterface $field_storage
+ *    The field storage config entity.
  *
  * @see views_views_data()
  * @see hook_field_views_data()
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index f484f1833a..6b51029e67 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -13,7 +13,6 @@
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
 use Drupal\views\Plugin\Derivative\ViewsLocalTask;
-use Drupal\views\ViewEntityInterface;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Entity\View;
 use Drupal\views\Render\ViewsRenderPipelineMarkup;
@@ -117,12 +116,8 @@ function views_theme($existing, $type, $theme, $path) {
     'row' => ['view' => NULL, 'options' => NULL, 'row' => NULL, 'field_alias' => NULL],
     'exposed_form' => ['view' => NULL, 'options' => NULL],
     'pager' => [
-      'view' => NULL,
-      'options' => NULL,
-      'tags' => [],
-      'quantity' => 9,
-      'element' => 0,
-      'parameters' => [],
+      'view' => NULL, 'options' => NULL,
+      'tags' => [], 'quantity' => 9, 'element' => 0, 'parameters' => []
     ],
   ];
 
@@ -862,40 +857,3 @@ function views_view_delete(EntityInterface $entity) {
     }
   }
 }
-
-/**
- * Implements hook_view_presave().
- *
- * Provides a BC layer for modules providing old configurations.
- */
-function views_view_presave(ViewEntityInterface $view) {
-  $displays = $view->get('display');
-  $changed = FALSE;
-  foreach ($displays as $display_name => &$display) {
-    if (isset($display['display_options']['fields'])) {
-      foreach ($display['display_options']['fields'] as $field_name => &$field) {
-        if (isset($field['plugin_id']) && $field['plugin_id'] === 'entity_link') {
-          // Add any missing settings for entity_link.
-          if (!isset($field['output_url_as_text'])) {
-            $field['output_url_as_text'] = FALSE;
-            $changed = TRUE;
-          }
-          if (!isset($field['absolute'])) {
-            $field['absolute'] = FALSE;
-            $changed = TRUE;
-          }
-        }
-        elseif (isset($field['plugin_id']) && $field['plugin_id'] === 'node_path') {
-          // Convert the use of node_path to entity_link.
-          $field['plugin_id'] = 'entity_link';
-          $field['field'] = 'view_node';
-          $field['output_url_as_text'] = TRUE;
-          $changed = TRUE;
-        }
-      }
-    }
-  }
-  if ($changed) {
-    $view->set('display', $displays);
-  }
-}
diff --git a/core/modules/views/views.post_update.php b/core/modules/views/views.post_update.php
index 0f84d7b55a..e09159e7e0 100644
--- a/core/modules/views/views.post_update.php
+++ b/core/modules/views/views.post_update.php
@@ -213,46 +213,3 @@ function views_post_update_revision_metadata_fields() {
     $view->save();
   });
 }
-
-/**
- * Add additional settings to the entity link field and convert node_path usage
- * to entity_link.
- */
-function views_post_update_entity_link_url() {
-  // Load all views.
-  $views = \Drupal::entityTypeManager()->getStorage('view')->loadMultiple();
-
-  /* @var \Drupal\views\Entity\View[] $views */
-  foreach ($views as $view) {
-    $displays = $view->get('display');
-    $changed = FALSE;
-    foreach ($displays as $display_name => &$display) {
-      if (isset($display['display_options']['fields'])) {
-        foreach ($display['display_options']['fields'] as $field_name => &$field) {
-          if (isset($field['plugin_id']) && $field['plugin_id'] === 'entity_link') {
-            // Add any missing settings for entity_link.
-            if (!isset($field['output_url_as_text'])) {
-              $field['output_url_as_text'] = FALSE;
-              $changed = TRUE;
-            }
-            if (!isset($field['absolute'])) {
-              $field['absolute'] = FALSE;
-              $changed = TRUE;
-            }
-          }
-          elseif (isset($field['plugin_id']) && $field['plugin_id'] === 'node_path') {
-            // Convert the use of node_path to entity_link.
-            $field['plugin_id'] = 'entity_link';
-            $field['field'] = 'view_node';
-            $field['output_url_as_text'] = TRUE;
-            $changed = TRUE;
-          }
-        }
-      }
-    }
-    if ($changed) {
-      $view->set('display', $displays);
-      $view->save();
-    }
-  }
-}
diff --git a/core/modules/views_ui/src/Form/Ajax/Rearrange.php b/core/modules/views_ui/src/Form/Ajax/Rearrange.php
index 1ffb710ca1..2a46120c60 100644
--- a/core/modules/views_ui/src/Form/Ajax/Rearrange.php
+++ b/core/modules/views_ui/src/Form/Ajax/Rearrange.php
@@ -125,13 +125,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         '#attributes' => ['class' => ['views-remove-checkbox']],
         '#default_value' => 0,
         '#suffix' => \Drupal::l(SafeMarkup::format('<span>@text</span>', ['@text' => $this->t('Remove')]),
-          Url::fromRoute('<none>', [], [
-            'attributes' => [
-              'id' => 'views-remove-link-' . $id,
-              'class' => ['views-hidden', 'views-button-remove', 'views-remove-link'],
-              'alt' => $this->t('Remove this item'),
-              'title' => $this->t('Remove this item'),
-            ],
+          Url::fromRoute('<none>', [], ['attributes' => [
+            'id' => 'views-remove-link-' . $id,
+            'class' => ['views-hidden', 'views-button-remove', 'views-remove-link'],
+            'alt' => $this->t('Remove this item'),
+            'title' => $this->t('Remove this item')],
           ])
         ),
       ];
diff --git a/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php b/core/modules/views_ui/src/Tests/ExposedFormUITest.php
similarity index 93%
rename from core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php
rename to core/modules/views_ui/src/Tests/ExposedFormUITest.php
index 0822eb833c..0aaa6ee7c5 100644
--- a/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php
+++ b/core/modules/views_ui/src/Tests/ExposedFormUITest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\views_ui\Functional;
+namespace Drupal\views_ui\Tests;
 
 use Drupal\views\Entity\View;
 
@@ -32,8 +32,8 @@ class ExposedFormUITest extends UITestBase {
    */
   protected $groupFormUiErrors = [];
 
-  protected function setUp($import_test_views = TRUE) {
-    parent::setUp($import_test_views);
+  protected function setUp() {
+    parent::setUp();
 
     $this->drupalCreateContentType(['type' => 'article']);
     $this->drupalCreateContentType(['type' => 'page']);
@@ -61,8 +61,8 @@ public function testExposedAdminUi() {
 
     // The first time the filter UI is displayed, the operator and the
     // value forms should be shown.
-    $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists');
-    $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists');
+    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists');
+    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists');
     $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists');
     $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists');
 
@@ -72,8 +72,8 @@ public function testExposedAdminUi() {
     $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide filter'));
 
     // After exposing the filter, Operator and Value should be still here.
-    $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists');
-    $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists');
+    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists');
+    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists');
     $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists');
     $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists');
 
@@ -98,8 +98,8 @@ public function testExposedAdminUi() {
     $this->drupalPostForm(NULL, [], t('Hide filter'));
 
     // After Un-exposing the filter, Operator and Value should be shown again.
-    $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists after hide filter');
-    $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists after hide filter');
+    $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists after hide filter');
+    $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists after hide filter');
     $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists after hide filter');
     $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists after hide filter');
 
@@ -108,7 +108,7 @@ public function testExposedAdminUi() {
     $this->drupalPostForm('admin/structure/views/nojs/handler/test_exposed_admin_ui/default/sort/created', $edit, t('Expose sort'));
     // Check the label of the expose button.
     $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide sort'));
-    $this->assertFieldById('edit-options-expose-label', 'Authored on', 'Make sure a label field is shown');
+    $this->assertFieldById('edit-options-expose-label', '', 'Make sure a label field is shown');
 
     // Test adding a new exposed sort criteria.
     $view_id = $this->randomView()['id'];
@@ -150,8 +150,8 @@ public function testGroupedFilterAdminUi() {
 
     // After click on 'Grouped Filters', the standard operator and value should
     // not be displayed.
-    $this->assertNoFieldById('edit-options-operator-in', 'in', 'Operator In not exists');
-    $this->assertNoFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In not exists');
+    $this->assertNoFieldById('edit-options-operator-in', '', 'Operator In not exists');
+    $this->assertNoFieldById('edit-options-operator-not-in', '', 'Operator Not In not exists');
     $this->assertNoFieldById('edit-options-value-page', '', 'Checkbox for Page not exists');
     $this->assertNoFieldById('edit-options-value-article', '', 'Checkbox for Article not exists');
 
diff --git a/core/modules/views_ui/src/Tests/ViewEditTest.php b/core/modules/views_ui/src/Tests/ViewEditTest.php
index a939f97ae6..819a4391bb 100644
--- a/core/modules/views_ui/src/Tests/ViewEditTest.php
+++ b/core/modules/views_ui/src/Tests/ViewEditTest.php
@@ -75,13 +75,8 @@ public function testOtherOptions() {
     $error_text = t('Display name must be letters, numbers, or underscores only.');
 
     // Test that potential invalid display ID requests are detected
-    try {
-      $this->drupalGet('admin/structure/views/ajax/handler/test_view/fake_display_name/filter/title');
-      $this->fail('Expected error, when setDisplay() called with invalid display ID');
-    }
-    catch (\Exception $e) {
-      $this->assertEqual('setDisplay() called with invalid display ID "fake_display_name".', $e->getMessage());
-    }
+    $this->drupalGet('admin/structure/views/ajax/handler/test_view/fake_display_name/filter/title');
+    $this->assertText('Invalid display id fake_display_name');
 
     $edit = ['display_id' => 'test 1'];
     $this->drupalPostForm($machine_name_edit_url, $edit, 'Apply');
@@ -244,16 +239,4 @@ public function testRelationRepresentativeNode() {
     $this->drupalPostForm('admin/structure/views/nojs/handler/test_groupwise_term_ui/default/relationship/tid_representative', $edit, 'Apply');
   }
 
-  /**
-   * Override the error method so we can test for the expected exception.
-   *
-   * @todo Remove as part of https://www.drupal.org/node/2864613
-   */
-  protected function error($message = '', $group = 'Other', array $caller = NULL) {
-    if ($group === 'User warning') {
-      throw new \Exception($message);
-    }
-    return parent::error($message, $group, $caller);
-  }
-
 }
diff --git a/core/modules/views_ui/tests/src/Functional/HandlerTest.php b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
index 31829941fc..826cdc24e5 100644
--- a/core/modules/views_ui/tests/src/Functional/HandlerTest.php
+++ b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
@@ -42,8 +42,6 @@ protected function setUp($import_test_views = TRUE) {
    * Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
    *
    * Adds a uid column to test the relationships.
-   *
-   * @internal
    */
   protected function schemaDefinition() {
     $schema = parent::schemaDefinition();
diff --git a/core/modules/workflows/config/schema/workflows.schema.yml b/core/modules/workflows/config/schema/workflows.schema.yml
index 42a5d9728a..12328013ea 100644
--- a/core/modules/workflows/config/schema/workflows.schema.yml
+++ b/core/modules/workflows/config/schema/workflows.schema.yml
@@ -13,6 +13,7 @@ workflows.workflow.*:
       label: 'Workflow type'
     type_settings:
       type: workflow.type_settings.[%parent.type]
+      label: 'Custom settings for workflow type'
 
 workflows.state:
   type: mapping
diff --git a/core/modules/workflows/src/Annotation/WorkflowType.php b/core/modules/workflows/src/Annotation/WorkflowType.php
index 496a9b8224..755ac706d0 100644
--- a/core/modules/workflows/src/Annotation/WorkflowType.php
+++ b/core/modules/workflows/src/Annotation/WorkflowType.php
@@ -12,11 +12,14 @@
  * For a working example, see \Drupal\content_moderation\Plugin\Workflow\ContentModerate
  *
  * @see \Drupal\workflows\WorkflowTypeInterface
- * @see \Drupal\workflows\WorkflowTypeManager
- * @see workflow_type_info_alter()
+ * @see \Drupal\workflows\WorkflowManager
  * @see plugin_api
  *
  * @Annotation
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class WorkflowType extends Plugin {
 
@@ -30,6 +33,8 @@ class WorkflowType extends Plugin {
   /**
    * The label of the workflow.
    *
+   * Describes how the plugin is used to apply a workflow to something.
+   *
    * @var \Drupal\Core\Annotation\Translation
    *
    * @ingroup plugin_translatable
@@ -48,10 +53,8 @@ class WorkflowType extends Plugin {
   /**
    * A list of optional form classes implementing PluginFormInterface.
    *
-   * Forms which will be used for the workflow UI are:
-   * - 'configure' (\Drupal\workflows\WorkflowTypeInterface::PLUGIN_FORM_KEY)
-   * - 'state' (\Drupal\workflows\StateInterface::PLUGIN_FORM_KEY)
-   * - 'transition' (\Drupal\workflows\TransitionInterface::PLUGIN_FORM_KEY)
+   * Forms which will be used for the workflow UI are 'configure', 'state' and
+   * 'transition'.
    *
    * @see \Drupal\Core\Plugin\PluginWithFormsInterface
    * @see \Drupal\Core\Plugin\PluginFormInterface
diff --git a/core/modules/workflows/src/Entity/Workflow.php b/core/modules/workflows/src/Entity/Workflow.php
index 2450fb7847..78762877c0 100644
--- a/core/modules/workflows/src/Entity/Workflow.php
+++ b/core/modules/workflows/src/Entity/Workflow.php
@@ -32,7 +32,7 @@
  *     },
  *     "route_provider" = {
  *       "html" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider",
- *     },
+ *     }
  *   },
  *   config_prefix = "workflow",
  *   admin_permission = "administer workflows",
@@ -47,15 +47,19 @@
  *     "delete-form" = "/admin/config/workflow/workflows/manage/{workflow}/delete",
  *     "add-state-form" = "/admin/config/workflow/workflows/manage/{workflow}/add_state",
  *     "add-transition-form" = "/admin/config/workflow/workflows/manage/{workflow}/add_transition",
- *     "collection" = "/admin/config/workflow/workflows",
+ *     "collection" = "/admin/config/workflow/workflows"
  *   },
  *   config_export = {
  *     "id",
  *     "label",
  *     "type",
- *     "type_settings",
+ *     "type_settings"
  *   },
  * )
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class Workflow extends ConfigEntityBase implements WorkflowInterface, EntityWithPluginCollectionInterface {
 
@@ -67,7 +71,7 @@ class Workflow extends ConfigEntityBase implements WorkflowInterface, EntityWith
   protected $id;
 
   /**
-   * The workflow label.
+   * The Moderation state label.
    *
    * @var string
    */
@@ -84,7 +88,6 @@ class Workflow extends ConfigEntityBase implements WorkflowInterface, EntityWith
 
   /**
    * The configuration for the workflow type plugin.
-   *
    * @var array
    */
   protected $type_settings = [];
diff --git a/core/modules/workflows/src/Form/WorkflowTransitionAddForm.php b/core/modules/workflows/src/Form/WorkflowTransitionAddForm.php
index 8452292989..3a582816db 100644
--- a/core/modules/workflows/src/Form/WorkflowTransitionAddForm.php
+++ b/core/modules/workflows/src/Form/WorkflowTransitionAddForm.php
@@ -89,6 +89,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#type' => 'radios',
       '#title' => $this->t('To'),
       '#required' => TRUE,
+      '#default_value' => [],
       '#options' => $states,
     ];
 
diff --git a/core/modules/workflows/src/Plugin/WorkflowTypeBase.php b/core/modules/workflows/src/Plugin/WorkflowTypeBase.php
index a898253d3b..9005836e77 100644
--- a/core/modules/workflows/src/Plugin/WorkflowTypeBase.php
+++ b/core/modules/workflows/src/Plugin/WorkflowTypeBase.php
@@ -14,6 +14,10 @@
  * A base class for Workflow type plugins.
  *
  * @see \Drupal\workflows\Annotation\WorkflowType
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 abstract class WorkflowTypeBase extends PluginBase implements WorkflowTypeInterface {
 
@@ -195,20 +199,15 @@ public function deleteState($state_id) {
     }
 
     foreach ($this->configuration['transitions'] as $transition_id => $transition) {
-      if ($transition['to'] === $state_id) {
-        $this->deleteTransition($transition_id);
-        continue;
-      }
       $from_key = array_search($state_id, $transition['from'], TRUE);
       if ($from_key !== FALSE) {
         // Remove state from the from array.
         unset($transition['from'][$from_key]);
-        if (empty($transition['from'])) {
-          // There are no more 'from' entries, remove the transition.
-          $this->deleteTransition($transition_id);
-          continue;
-        }
-        // We changed the from state, update the transition.
+      }
+      if (empty($transition['from']) || $transition['to'] === $state_id) {
+        $this->deleteTransition($transition_id);
+      }
+      elseif ($from_key !== FALSE) {
         $this->setTransitionFromStates($transition_id, $transition['from']);
       }
     }
@@ -263,39 +262,25 @@ public function getTransitions(array $transition_ids = NULL) {
   }
 
   /**
-   * Sort states or transitions by weight, label, and key.
+   * Sort states or transitions by weight and label.
    *
    * @param \Drupal\workflows\StateInterface[]|\Drupal\workflows\TransitionInterface[] $objects
-   *   An array of state or transition objects to multi-sort, keyed by the
-   *   state or transition ID.
+   *   Objects to multi-sort.
    *
    * @return \Drupal\workflows\StateInterface[]|\Drupal\workflows\TransitionInterface[]
-   *   An array of sorted transitions or states, keyed by the state or
-   *   transition ID.
+   *   An array of sorted transitions or states.
    */
   protected static function labelWeightMultisort($objects) {
     if (count($objects) > 1) {
-      // Separate weights, labels, and keys into arrays.
       $weights = $labels = [];
-      $keys = array_keys($objects);
       foreach ($objects as $id => $object) {
         $weights[$id] = $object->weight();
         $labels[$id] = $object->label();
       }
-      // Sort weights, labels, and keys in the same order as each other.
       array_multisort(
-      // Use the numerical weight as the primary sort.
         $weights, SORT_NUMERIC, SORT_ASC,
-        // When objects have the same weight, sort them alphabetically by label.
-        $labels, SORT_NATURAL, SORT_ASC,
-        // Ensure that the keys (the object IDs) are sorted in the same order as
-        // the weights.
-        $keys
+        $labels, SORT_NATURAL, SORT_ASC
       );
-      // Combine keys and weights to make sure the weights are keyed with the
-      // correct keys.
-      $weights = array_combine($keys, $weights);
-      // Return the objects sorted by weight.
       return array_replace($weights, $objects);
     }
     return $objects;
diff --git a/core/modules/workflows/src/State.php b/core/modules/workflows/src/State.php
index 5149e265e9..f6a377ba0f 100644
--- a/core/modules/workflows/src/State.php
+++ b/core/modules/workflows/src/State.php
@@ -4,6 +4,10 @@
 
 /**
  * A value object representing a workflow state.
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class State implements StateInterface {
 
@@ -100,7 +104,7 @@ public function getTransitions() {
   }
 
   /**
-   * Helper method to convert a State value object to a label.
+   * Helper method to convert a list of states to labels
    *
    * @param \Drupal\workflows\StateInterface $state
    *
diff --git a/core/modules/workflows/src/StateInterface.php b/core/modules/workflows/src/StateInterface.php
index 3335ea7452..5a5442bb1d 100644
--- a/core/modules/workflows/src/StateInterface.php
+++ b/core/modules/workflows/src/StateInterface.php
@@ -6,8 +6,8 @@
  * An interface for state value objects.
  *
  * @internal
- *   The StateInterface should only be used by Workflows and Content Moderation.
- * @todo Revisit the need for this in https://www.drupal.org/node/2902309.
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 interface StateInterface {
 
diff --git a/core/modules/workflows/src/Transition.php b/core/modules/workflows/src/Transition.php
index 233f28bdf5..38d5dbac03 100644
--- a/core/modules/workflows/src/Transition.php
+++ b/core/modules/workflows/src/Transition.php
@@ -4,6 +4,10 @@
 
 /**
  * A transition value object that describes the transition between states.
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class Transition implements TransitionInterface {
 
diff --git a/core/modules/workflows/src/TransitionInterface.php b/core/modules/workflows/src/TransitionInterface.php
index ae3f0231be..14f6d1487c 100644
--- a/core/modules/workflows/src/TransitionInterface.php
+++ b/core/modules/workflows/src/TransitionInterface.php
@@ -6,10 +6,8 @@
  * A transition value object that describes the transition between two states.
  *
  * @internal
- *   The TransitionInterface should only be used by Workflows and Content
- *   Moderation.
- *
- * @todo Revisit the need for this in https://www.drupal.org/node/2902309.
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 interface TransitionInterface {
 
diff --git a/core/modules/workflows/src/WorkflowAccessControlHandler.php b/core/modules/workflows/src/WorkflowAccessControlHandler.php
index 1e0456cf6d..e34e647e08 100644
--- a/core/modules/workflows/src/WorkflowAccessControlHandler.php
+++ b/core/modules/workflows/src/WorkflowAccessControlHandler.php
@@ -15,6 +15,10 @@
  * Access controller for the Workflow entity.
  *
  * @see \Drupal\workflows\Entity\Workflow.
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class WorkflowAccessControlHandler extends EntityAccessControlHandler implements EntityHandlerInterface {
 
diff --git a/core/modules/workflows/src/WorkflowInterface.php b/core/modules/workflows/src/WorkflowInterface.php
index dc09956ec3..f9a61a42ce 100644
--- a/core/modules/workflows/src/WorkflowInterface.php
+++ b/core/modules/workflows/src/WorkflowInterface.php
@@ -6,13 +6,17 @@
 
 /**
  * Provides an interface for defining workflow entities.
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 interface WorkflowInterface extends ConfigEntityInterface {
 
   /**
    * Gets the workflow type plugin.
    *
-   * @return \Drupal\workflows\WorkflowTypeInterface
+   * @return \Drupal\workflows\WorkflowTypeInterface|\Drupal\workflows\WorkflowTypeFormInterface
    *   The workflow type plugin.
    */
   public function getTypePlugin();
diff --git a/core/modules/workflows/src/WorkflowListBuilder.php b/core/modules/workflows/src/WorkflowListBuilder.php
index c36171aa6e..eb652ad533 100644
--- a/core/modules/workflows/src/WorkflowListBuilder.php
+++ b/core/modules/workflows/src/WorkflowListBuilder.php
@@ -93,7 +93,7 @@ public function render() {
     $build = parent::render();
     $workflow_types_count = count($this->workflowTypeManager->getDefinitions());
     if ($workflow_types_count === 0) {
-      $build['table']['#empty'] = $this->t('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the <a href=":content-moderation">Content Moderation</a> module provides a workflow type that enables workflows for content entities.', [':content-moderation' => '/admin/modules#module-content-moderation']);
+      $build['table']['#empty'] = $this->t('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the Content Moderation module provides a workflow type that enables workflows for content entities.');
     }
     return $build;
   }
diff --git a/core/modules/workflows/src/WorkflowTypeInterface.php b/core/modules/workflows/src/WorkflowTypeInterface.php
index 5ef843b4cb..0d9107104a 100644
--- a/core/modules/workflows/src/WorkflowTypeInterface.php
+++ b/core/modules/workflows/src/WorkflowTypeInterface.php
@@ -8,6 +8,10 @@
 
 /**
  * An interface for Workflow type plugins.
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 interface WorkflowTypeInterface extends PluginWithFormsInterface, DerivativeInspectionInterface, ConfigurablePluginInterface {
 
@@ -67,9 +71,9 @@ public function getInitialState();
   /**
    * Gets the required states of workflow type.
    *
-   * This is usually specified in the workflow type annotation.
+   * This are usually configured in the workflow type annotation.
    *
-   * @return string[]
+   * @return array[]
    *   The required states.
    *
    * @see \Drupal\workflows\Annotation\WorkflowType
@@ -99,7 +103,8 @@ public function onDependencyRemoval(array $dependencies);
    * @param string $label
    *   The state's label.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if a state already exists or state ID is invalid.
@@ -153,7 +158,8 @@ public function getState($state_id);
    * @param string $label
    *   The state's label.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    */
   public function setStateLabel($state_id, $label);
 
@@ -165,7 +171,8 @@ public function setStateLabel($state_id, $label);
    * @param int $weight
    *   The state's weight.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    */
   public function setStateWeight($state_id, $weight);
 
@@ -195,7 +202,8 @@ public function deleteState($state_id);
    * @param string $to_state_id
    *   The state ID to transition to.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if either state does not exist.
@@ -293,7 +301,8 @@ public function hasTransitionFromStateToState($from_state_id, $to_state_id);
    * @param string $label
    *   The transition's label.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if the transition does not exist.
@@ -308,7 +317,8 @@ public function setTransitionLabel($transition_id, $label);
    * @param int $weight
    *   The transition's weight.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if the transition does not exist.
@@ -323,12 +333,13 @@ public function setTransitionWeight($transition_id, $weight);
    * @param array $from_state_ids
    *   The state IDs to transition from.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if the transition does not exist or the states do not exist.
    */
-  public function setTransitionFromStates($transition_id, array $from_state_ids);
+  public function setTransitionFromStates($transition_id, array   $from_state_ids);
 
   /**
    * Deletes a transition.
@@ -336,7 +347,8 @@ public function setTransitionFromStates($transition_id, array $from_state_ids);
    * @param string $transition_id
    *   The transition ID.
    *
-   * @return $this
+   * @return \Drupal\workflows\WorkflowTypeInterface
+   *   The workflow type plugin.
    *
    * @throws \InvalidArgumentException
    *   Thrown if the transition does not exist.
diff --git a/core/modules/workflows/src/WorkflowTypeManager.php b/core/modules/workflows/src/WorkflowTypeManager.php
index 60dfa7b7be..b1675380bf 100644
--- a/core/modules/workflows/src/WorkflowTypeManager.php
+++ b/core/modules/workflows/src/WorkflowTypeManager.php
@@ -13,6 +13,10 @@
  * @see \Drupal\workflows\Annotation\WorkflowType
  * @see \Drupal\workflows\WorkflowTypeInterface
  * @see plugin_api
+ *
+ * @internal
+ *   The workflow system is currently experimental and should only be leveraged
+ *   by experimental modules and development releases of contributed modules.
  */
 class WorkflowTypeManager extends DefaultPluginManager {
 
diff --git a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php
index a466a7d571..679b314d19 100644
--- a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php
+++ b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php
@@ -22,7 +22,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#type' => 'textfield',
       '#title' => $this->t('Extra'),
       '#description' => $this->t('Extra information added to state'),
-      '#default_value' => $state && isset($configuration['states'][$state->id()]['extra']) ? $configuration['states'][$state->id()]['extra'] : '',
+      '#default_value' => isset($configuration['states'][$state->id()]['extra']) ? $configuration['states'][$state->id()]['extra'] : '',
     ];
     return $form;
   }
diff --git a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php
index a88306c750..45e15139b9 100644
--- a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php
+++ b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php
@@ -22,7 +22,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#type' => 'textfield',
       '#title' => $this->t('Extra'),
       '#description' => $this->t('Extra information added to transition'),
-      '#default_value' => $transition && isset($configuration['transitions'][$transition->id()]['extra']) ? $configuration['transitions'][$transition->id()]['extra'] : '',
+      '#default_value' => isset($configuration['transitions'][$transition->id()]['extra']) ? $configuration['transitions'][$transition->id()]['extra'] : '',
     ];
     return $form;
   }
diff --git a/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php b/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php
index 197386ebd0..c0c7de6f52 100644
--- a/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php
+++ b/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php
@@ -38,7 +38,6 @@ public function testWorkflowUiWithNoType() {
 
     $this->drupalGet('admin/config/workflow/workflows');
     $this->assertSession()->pageTextContains('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the Content Moderation module provides a workflow type that enables workflows for content entities.');
-    $this->assertSession()->linkExists('Content Moderation');
     $this->assertSession()->pageTextNotContains('Add workflow');
 
     $this->container->get('module_installer')->install(['workflow_type_test']);
diff --git a/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php b/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php
index b15b24099c..b924f48b56 100644
--- a/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php
+++ b/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php
@@ -137,8 +137,6 @@ public function testWorkflowCreation() {
     $this->assertTrue($workflow->getTypePlugin()->getState('draft')->canTransitionTo('published'), 'Can transition from draft to published');
 
     $this->clickLink('Add a new transition');
-    $this->assertCount(2, $this->cssSelect('input[name="to"][type="radio"]'));
-    $this->assertCount(0, $this->cssSelect('input[name="to"][checked="checked"][type="radio"]'));
     $this->submitForm(['id' => 'create_new_draft', 'label' => 'Create new draft', 'from[draft]' => 'draft', 'to' => 'draft'], 'Save');
     $this->assertSession()->pageTextContains('Created Create new draft transition.');
     $workflow = $workflow_storage->loadUnchanged('test');
@@ -293,102 +291,4 @@ public function testWorkflowConfigurationForm() {
     $this->assertEquals('Extra global settings', $workflow->getTypePlugin()->getConfiguration()['example_setting']);
   }
 
-  /**
-   * Test a workflow, state, and transition can have a numeric ID and label.
-   */
-  public function testNumericIds() {
-    $this->drupalLogin($this->createUser(['administer workflows']));
-    $this->drupalGet('admin/config/workflow/workflows');
-    $this->clickLink('Add workflow');
-    $this->submitForm(['label' => 123, 'id' => 123, 'workflow_type' => 'workflow_type_complex_test'], 'Save');
-
-    $this->assertSession()->addressEquals('admin/config/workflow/workflows/manage/123/add_state');
-
-    $this->submitForm(['label' => 456, 'id' => 456], 'Save');
-    $this->assertSession()->pageTextContains('Created 456 state.');
-
-    $this->clickLink('Add a new state');
-    $this->submitForm(['label' => 789, 'id' => 789], 'Save');
-    $this->assertSession()->pageTextContains('Created 789 state.');
-
-    $this->clickLink('Add a new transition');
-    $this->submitForm(['id' => 101112, 'label' => 101112, 'from[456]' => 456, 'to' => 789], 'Save');
-    $this->assertSession()->pageTextContains('Created 101112 transition.');
-
-    $workflow = $this->container->get('entity_type.manager')->getStorage('workflow')->loadUnchanged(123);
-    $this->assertEquals(123, $workflow->id());
-    $this->assertEquals(456, $workflow->getTypePlugin()->getState(456)->id());
-    $this->assertEquals(101112, $workflow->getTypePlugin()->getTransition(101112)->id());
-    $this->assertEquals(789, $workflow->getTypePlugin()->getTransition(101112)->to()->id());
-  }
-
-  /**
-   * Test the sorting of states and transitions by weight and label.
-   */
-  public function testSorting() {
-    $workflow = Workflow::create(['id' => 'test', 'type' => 'workflow_type_complex_test', 'label' => 'Test']);
-    $workflow
-      ->getTypePlugin()
-      ->setConfiguration([
-        'states' => [
-          'twoa' => [
-            'label' => 'twoa',
-            'weight' => 2,
-          ],
-          'three' => [
-            'label' => 'three',
-            'weight' => 3,
-          ],
-          'twob' => [
-            'label' => 'twob',
-            'weight' => 2,
-          ],
-          'one' => [
-            'label' => 'one',
-            'weight' => 1,
-          ],
-        ],
-        'transitions' => [
-          'three' => [
-            'label' => 'three',
-            'from' => ['three'],
-            'to' => 'three',
-            'weight' => 3,
-          ],
-          'twoa' => [
-            'label' => 'twoa',
-            'from' => ['twoa'],
-            'to' => 'twoa',
-            'weight' => 2,
-          ],
-          'one' => [
-            'label' => 'one',
-            'from' => ['one'],
-            'to' => 'one',
-            'weight' => 1,
-          ],
-          'twob' => [
-            'label' => 'twob',
-            'from' => ['twob'],
-            'to' => 'twob',
-            'weight' => 2,
-          ],
-        ],
-      ]);
-    $workflow->save();
-
-    $this->drupalLogin($this->createUser(['administer workflows']));
-    $this->drupalGet('admin/config/workflow/workflows/manage/test');
-    $expected_states = ['one', 'twoa', 'twob', 'three'];
-    $elements = $this->xpath('//details[@id="edit-states-container"]//table/tbody/tr');
-    foreach ($elements as $key => $element) {
-      $this->assertEquals($expected_states[$key], $element->find('xpath', 'td')->getText());
-    }
-    $expected_transitions = ['one', 'twoa', 'twob', 'three'];
-    $elements = $this->xpath('//details[@id="edit-transitions-container"]//table/tbody/tr');
-    foreach ($elements as $key => $element) {
-      $this->assertEquals($expected_transitions[$key], $element->find('xpath', 'td')->getText());
-    }
-  }
-
 }
diff --git a/core/modules/workflows/tests/src/Unit/WorkflowTest.php b/core/modules/workflows/tests/src/Unit/WorkflowTest.php
index 8cf449367c..ca76fa0ee1 100644
--- a/core/modules/workflows/tests/src/Unit/WorkflowTest.php
+++ b/core/modules/workflows/tests/src/Unit/WorkflowTest.php
@@ -117,27 +117,6 @@ public function testGetStates() {
     $this->assertArrayEquals([], array_keys($workflow->getTypePlugin()->getStates([])));
   }
 
-  /**
-   * Test numeric IDs when added to a workflow.
-   */
-  public function testNumericIdSorting() {
-    $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow');
-    $workflow_type = $workflow->getTypePlugin();
-
-    $workflow_type->addState('1', 'One');
-    $workflow_type->addState('2', 'Two');
-    $workflow_type->addState('3', 'ZZZ');
-    $workflow_type->addState('4', 'AAA');
-
-    $workflow_type->setStateWeight('1', 1);
-    $workflow_type->setStateWeight('2', 2);
-    $workflow_type->setStateWeight('3', 3);
-    $workflow_type->setStateWeight('4', 3);
-
-    // Ensure numeric states are correctly sorted by weight first, label second.
-    $this->assertEquals([1, 2, 4, 3], array_keys($workflow_type->getStates()));
-  }
-
   /**
    * @covers ::getStates
    */
@@ -233,18 +212,14 @@ public function testDeleteState() {
     $workflow_type
       ->addState('draft', 'Draft')
       ->addState('published', 'Published')
-      ->addState('archived', 'Archived')
       ->addTransition('publish', 'Publish', ['draft', 'published'], 'published')
-      ->addTransition('create_new_draft', 'Create new draft', ['draft', 'published'], 'draft')
-      ->addTransition('archive', 'Archive', ['draft', 'published'], 'archived');
-    $this->assertCount(3, $workflow_type->getStates());
-    $this->assertCount(3, $workflow_type->getState('published')->getTransitions());
-    $workflow_type->deleteState('draft');
-    $this->assertFalse($workflow_type->hasState('draft'));
+      ->addTransition('create_new_draft', 'Create new draft', ['draft', 'published'], 'draft');
     $this->assertCount(2, $workflow_type->getStates());
     $this->assertCount(2, $workflow_type->getState('published')->getTransitions());
-    $workflow_type->deleteState('published');
-    $this->assertCount(0, $workflow_type->getTransitions());
+    $workflow_type->deleteState('draft');
+    $this->assertFalse($workflow_type->hasState('draft'));
+    $this->assertCount(1, $workflow_type->getStates());
+    $this->assertCount(1, $workflow_type->getState('published')->getTransitions());
   }
 
   /**
diff --git a/core/modules/workflows/workflows.info.yml b/core/modules/workflows/workflows.info.yml
index c40a7aae54..0089a123d8 100644
--- a/core/modules/workflows/workflows.info.yml
+++ b/core/modules/workflows/workflows.info.yml
@@ -1,7 +1,7 @@
 name: 'Workflows'
 type: module
-description: 'Provides UI and API for managing workflows. This module can be used with the Content moderation module to add highly customizable workflows to content.'
+description: 'Provides UI and API for managing workflows. This module can be used with the Content moderation module to add highly customisable workflows to content.'
 version: VERSION
 core: 8.x
-package: Core
+package: Core (Experimental)
 configure: entity.workflow.collection
diff --git a/core/modules/workflows/workflows.links.menu.yml b/core/modules/workflows/workflows.links.menu.yml
index ca191d5f32..a6ac512980 100644
--- a/core/modules/workflows/workflows.links.menu.yml
+++ b/core/modules/workflows/workflows.links.menu.yml
@@ -1,3 +1,4 @@
+# Workflow menu items definition
 entity.workflow.collection:
   title: 'Workflows'
   route_name: entity.workflow.collection
diff --git a/core/modules/workflows/workflows.module b/core/modules/workflows/workflows.module
index a22cadff97..096fd92e0e 100644
--- a/core/modules/workflows/workflows.module
+++ b/core/modules/workflows/workflows.module
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Provides hook implementations for the Workflows module.
+ * Provides hook implementations for the Workflow UI module.
  */
 
 use Drupal\Core\Routing\RouteMatchInterface;
@@ -12,16 +12,11 @@
  */
 function workflows_help($route_name, RouteMatchInterface $route_match) {
   switch ($route_name) {
+    // Main module help for the Workflow UI module.
     case 'help.page.workflows':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
       $output .= '<p>' . t('The Workflows module provides a UI and an API for creating workflows content. This lets site admins define workflows and their states, and then define transitions between those states. For more information, see the <a href=":workflow">online documentation for the Workflows module</a>.', [':workflow' => 'https://www.drupal.org/documentation/modules/workflows']) . '</p>';
-      $output .= '<h4>' . t('Workflow') . '</h4>';
-      $output .= '<p>' . t('A collection of states and transitions between those states.') . '</p>';
-      $output .= '<h4>' . t('State') . '</h4>';
-      $output .= '<p>' . t('A particular condition that something is in at a specific time. The usage of the state is determined by a module that harnesses the Workflows module. For example, Content Moderation allows a state to be used for moderation of content by assigning a given state to a content item.') . '</p>';
-      $output .= '<h4>' . t('Transition') . '</h4>';
-      $output .= '<p>' . t('The process of changing from one state to another. A transition can occur from multiple states, but only to one state.') . '</p>';
       return $output;
   }
 }
diff --git a/core/phpcs.xml.dist b/core/phpcs.xml.dist
index 5b07e1e868..a593e62c7d 100644
--- a/core/phpcs.xml.dist
+++ b/core/phpcs.xml.dist
@@ -10,19 +10,12 @@
   <!--Exclude test files that are intentionally empty, or intentionally violate coding standards.-->
   <exclude-pattern>./modules/system/tests/fixtures/HtaccessTest</exclude-pattern>
 
-  <!-- Exclude third-party code maintained within core that does not follow our standards. -->
-  <!-- @todo This rule may be removed when https://www.drupal.org/node/1848264 is resolved. -->
-  <exclude-pattern>./core/lib/Drupal/Component/Diff/</exclude-pattern>
-
   <!-- Only include specific sniffs that pass. This ensures that, if new sniffs are added, HEAD does not fail.-->
   <!-- Drupal sniffs -->
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Array/DisallowLongArraySyntaxSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/ClassCreateInstanceSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/ClassDeclarationSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/FullyQualifiedNamespaceSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/InterfaceNameSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/UnusedUseStatementSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Classes/UseLeadingBackslashSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/CSS/ClassDefinitionNameSpacingSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/CSS/ColourDefinitionSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Commenting/ClassCommentSniff.php">
@@ -53,31 +46,29 @@
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php">
     <exclude name="Drupal.Commenting.FunctionComment.IncorrectTypeHint"/>
     <exclude name="Drupal.Commenting.FunctionComment.InvalidNoReturn"/>
+    <exclude name="Drupal.Commenting.FunctionComment.InvalidReturnNotVoid"/>
     <exclude name="Drupal.Commenting.FunctionComment.InvalidTypeHint"/>
     <exclude name="Drupal.Commenting.FunctionComment.Missing"/>
+    <exclude name="Drupal.Commenting.FunctionComment.MissingFile"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingParamComment"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingParamType"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingReturnComment"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingReturnType"/>
     <exclude name="Drupal.Commenting.FunctionComment.ParamCommentFullStop"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ParamCommentIndentation"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ParamCommentNewLine"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ParamCommentNotCapital"/>
     <exclude name="Drupal.Commenting.FunctionComment.ParamMissingDefinition"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ParamNameNoMatch"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ParamTypeSpaces"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ReturnCommentIndentation"/>
+    <exclude name="Drupal.Commenting.FunctionComment.ReturnTypeSpaces"/>
     <exclude name="Drupal.Commenting.FunctionComment.TypeHintMissing"/>
   </rule>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Commenting/InlineCommentSniff.php">
-    <!-- Sniff for: NoSpaceBefore -->
-    <exclude name="Drupal.Commenting.InlineComment.DocBlock"/>
-    <exclude name="Drupal.Commenting.InlineComment.InvalidEndChar"/>
-    <exclude name="Drupal.Commenting.InlineComment.NotCapital"/>
-    <exclude name="Drupal.Commenting.InlineComment.SpacingAfter"/>
-    <exclude name="Drupal.Commenting.InlineComment.SpacingBefore"/>
-    <exclude name="Drupal.Commenting.InlineComment.WrongStyle"/>
-  </rule>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/ControlStructures/ElseIfSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/ControlStructures/ControlSignatureSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Files/EndFileNewlineSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Files/FileEncodingSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Files/TxtFileLineLengthSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Formatting/MultiLineAssignmentSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Formatting/SpaceInlineIfSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Formatting/SpaceUnaryOperatorSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Functions/DiscouragedFunctionsSniff.php"/>
@@ -86,19 +77,10 @@
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/InfoFiles/ClassFilesSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/InfoFiles/DuplicateEntrySniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/InfoFiles/RequiredSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Methods/MethodDeclarationSniff.php">
-    <!-- Silence method name underscore warning which is covered already in
-      Drupal.NamingConventions.ValidFunctionName.ScopeNotCamelCaps. -->
-    <exclude name="Drupal.Methods.MethodDeclaration.Underscore"/>
-  </rule>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/NamingConventions/ValidVariableNameSniff.php">
-    <!-- Sniff for: LowerStart -->
-    <exclude name="Drupal.NamingConventions.ValidVariableName.LowerCamelName"/>
-  </rule>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Scope/MethodScopeSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Semantics/EmptyInstallSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Semantics/FunctionAliasSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Semantics/FunctionTSniff.php">
+    <exclude name="Drupal.Semantics.FunctionT.BackslashSingleQuote"/>
     <exclude name="Drupal.Semantics.FunctionT.NotLiteralString"/>
     <exclude name="Drupal.Semantics.FunctionT.ConcatString"/>
   </rule>
@@ -109,11 +91,8 @@
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Semantics/TInHookMenuSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Semantics/TInHookSchemaSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/CommaSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/EmptyLinesSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/NamespaceSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/ObjectOperatorIndentSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/ObjectOperatorSpacingSniff.php"/>
-  <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/OpenBracketSpacingSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/OpenTagNewlineSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/OperatorSpacingSniff.php"/>
   <rule ref="../vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/WhiteSpace/ScopeIndentSniff.php"/>
@@ -122,37 +101,14 @@
   <rule ref="../vendor/drupal/coder/coder_sniffer/DrupalPractice/Sniffs/Commenting/ExpectedExceptionSniff.php"/>
 
   <!-- Generic sniffs -->
-  <rule ref="Generic.Files.ByteOrderMark"/>
   <rule ref="Generic.Files.LineEndings"/>
-  <rule ref="Generic.Formatting.SpaceAfterCast"/>
   <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
-  <rule ref="Generic.NamingConventions.ConstructorName"/>
   <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
   <rule ref="Generic.PHP.DeprecatedFunctions"/>
   <rule ref="Generic.PHP.DisallowShortOpenTag"/>
-  <rule ref="Generic.PHP.LowerCaseKeyword" />
   <rule ref="Generic.PHP.UpperCaseConstant"/>
   <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
-
-  <!-- MySource sniffs -->
-  <rule ref="MySource.Debug.DebugCode"/>
-
-  <!-- PEAR sniffs -->
-  <rule ref="PEAR.Files.IncludingFile"/>
-  <!-- Disable some error messages that we do not want. -->
-  <rule ref="PEAR.Files.IncludingFile.UseIncludeOnce">
-    <severity>0</severity>
-  </rule>
-  <rule ref="PEAR.Files.IncludingFile.UseInclude">
-    <severity>0</severity>
-  </rule>
-  <rule ref="PEAR.Files.IncludingFile.UseRequireOnce">
-    <severity>0</severity>
-  </rule>
-  <rule ref="PEAR.Files.IncludingFile.UseRequire">
-    <severity>0</severity>
-  </rule>
-  <rule ref="PEAR.Functions.ValidDefaultValue"/>
+  <rule ref="Generic.Arrays.DisallowLongArraySyntax" />
 
   <!-- PSR-2 sniffs -->
   <rule ref="PSR2.Classes.PropertyDeclaration">
@@ -160,73 +116,11 @@
   </rule>
 
   <!-- Squiz sniffs -->
-  <rule ref="Squiz.Arrays.ArrayBracketSpacing"/>
-  <rule ref="Squiz.Arrays.ArrayDeclaration">
-    <exclude name="Squiz.Arrays.ArrayDeclaration.NoKeySpecified"/>
-    <exclude name="Squiz.Arrays.ArrayDeclaration.KeySpecified"/>
-  </rule>
-  <!-- Disable some error messages that we do not want. -->
-  <rule ref="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.DoubleArrowNotAligned">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.FirstValueNoNewline">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.KeyNotAligned">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.MultiLineNotAllowed">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.NoComma">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.NoCommaAfterLast">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.NotLowerCase">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.ValueNotAligned">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.Arrays.ArrayDeclaration.ValueNoNewline">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration" />
-  <!-- Disable some error messages that we already cover. -->
-  <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceAfterOpen">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration.SpaceBeforeClose">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.ControlStructures.ForLoopDeclaration"/>
-  <!-- Disable some error messages that we already cover. -->
-  <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterOpen">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.ControlStructures.ForLoopDeclaration.SpacingBeforeClose">
-    <severity>0</severity>
-  </rule>
-  <rule ref="Squiz.PHP.LowercasePHPFunctions"/>
   <rule ref="Squiz.Strings.ConcatenationSpacing">
     <properties>
       <property name="spacing" value="1"/>
       <property name="ignoreNewlines" value="true"/>
     </properties>
-  </rule>
-
-  <!-- Zend sniffs -->
-  <rule ref="Zend.Files.ClosingTag"/>
+ </rule>
 
 </ruleset>
diff --git a/core/scripts/js/babel-es6-watch.js b/core/scripts/js/babel-es6-watch.js
index c9d1b147e0..9b49482236 100644
--- a/core/scripts/js/babel-es6-watch.js
+++ b/core/scripts/js/babel-es6-watch.js
@@ -39,5 +39,8 @@ watcher
     fs.stat(`${fileName}.js`, () => {
       fs.unlink(`${fileName}.js`, unlinkHandler);
     });
+    fs.stat(`${fileName}.js.map`, () => {
+      fs.unlink(`${fileName}.js.map`, unlinkHandler);
+    });
   })
   .on('ready', () => log(`Watching '${fileMatch}' for changes.`));
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxCallbacksTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxCallbacksTest.php
deleted file mode 100644
index e13ecfd56c..0000000000
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxCallbacksTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalJavascriptTests\Ajax;
-
-use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
-
-/**
- * Tests Ajax callbacks on FAPI elements.
- *
- * @group Ajax
- */
-class AjaxCallbacksTest extends JavascriptTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['ajax_forms_test'];
-
-  /**
-   * Tests if Ajax callback works on date element.
-   */
-  public function testDateAjaxCallback() {
-
-    // Test Ajax callback when date changes.
-    $this->drupalGet('ajax_forms_test_ajax_element_form');
-    $this->assertSession()->responseContains('No date yet selected');
-    $this->getSession()->getPage()->fillField('edit-date', '2016-01-01');
-    $this->assertSession()->assertWaitOnAjaxRequest();
-    $this->assertSession()->responseNotContains('No date yet selected');
-    $this->assertSession()->responseContains('2016-01-01');
-  }
-
-  /**
-   * Tests if Ajax callback works on datetime element.
-   */
-  public function testDateTimeAjaxCallback() {
-
-    // Test Ajax callback when datetime changes.
-    $this->drupalGet('ajax_forms_test_ajax_element_form');
-    $this->assertSession()->responseContains('No datetime selected.');
-    $this->getSession()->getPage()->fillField('edit-datetime-date', '2016-01-01');
-    $this->assertSession()->assertWaitOnAjaxRequest();
-    $this->assertSession()->responseNotContains('No datetime selected.');
-    $this->assertSession()->responseContains('2016-01-01');
-    $this->getSession()->getPage()->fillField('edit-datetime-time', '12:00:00');
-    $this->assertSession()->assertWaitOnAjaxRequest();
-    $this->assertSession()->responseContains('2016-01-01 12:00:00');
-  }
-
-}
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Core/Session/SessionTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Core/Session/SessionTest.php
index fa2d541c8a..e02e0dfb0f 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Core/Session/SessionTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Core/Session/SessionTest.php
@@ -48,10 +48,13 @@ public function testSessionExpiration() {
     // number of times.
     $this->drupalGet('<front>');
 
+    $session_assert = $this->assertSession();
+
     $page = $this->getSession()->getPage();
 
     for ($i = 0; $i < 25; $i++) {
       $page->clickLink('Link to front page');
+      $session_assert->statusCodeEquals(200);
     }
   }
 
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php b/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
index 8aa46c7ec1..d5156eeb5c 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
@@ -7,7 +7,7 @@
 use Zumba\Mink\Driver\PhantomJSDriver;
 
 /**
- * Runs a browser test using a driver that supports Javascript.
+ * Runs a browser test using PhantomJS.
  *
  * Base class for testing browser interaction implemented in JavaScript.
  */
@@ -142,7 +142,7 @@ protected function createScreenshot($filename, $set_background_color = TRUE) {
    * {@inheritdoc}
    */
   public function assertSession($name = NULL) {
-    return new WebDriverWebAssert($this->getSession($name), $this->baseUrl);
+    return new JSWebAssert($this->getSession($name), $this->baseUrl);
   }
 
   /**
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/LegacyJavascriptTestBase.php b/core/tests/Drupal/FunctionalJavascriptTests/LegacyJavascriptTestBase.php
deleted file mode 100644
index 7cef5b8c6c..0000000000
--- a/core/tests/Drupal/FunctionalJavascriptTests/LegacyJavascriptTestBase.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalJavascriptTests;
-
-/**
- * Runs a browser test using PhantomJS.
- *
- * Base class for testing browser interaction implemented in JavaScript.
- */
-abstract class LegacyJavascriptTestBase extends JavascriptTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function assertSession($name = NULL) {
-    // Return a WebAssert that supports status code and header assertions.
-    return new JSWebAssert($this->getSession($name), $this->baseUrl);
-  }
-
-}
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/WebDriverWebAssert.php b/core/tests/Drupal/FunctionalJavascriptTests/WebDriverWebAssert.php
deleted file mode 100644
index 16b1281d4d..0000000000
--- a/core/tests/Drupal/FunctionalJavascriptTests/WebDriverWebAssert.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalJavascriptTests;
-
-/**
- * Defines a JSWebAssert with no support for status code and header assertions.
- */
-class WebDriverWebAssert extends JSWebAssert {
-
-  /**
-   * The use of statusCodeEquals() is not available.
-   *
-   * @param int $code
-   *   The status code.
-   */
-  public function statusCodeEquals($code) {
-    @trigger_error('Support for statusCodeEquals is to be dropped from Javascript tests. See https://www.drupal.org/node/2857562.');
-    parent::statusCodeEquals($code);
-  }
-
-  /**
-   * The use of statusCodeNotEquals() is not available.
-   *
-   * @param int $code
-   *   The status code.
-   */
-  public function statusCodeNotEquals($code) {
-    @trigger_error('Support for statusCodeNotEquals is to be dropped from Javascript tests. See https://www.drupal.org/node/2857562.');
-    parent::statusCodeNotEquals($code);
-  }
-
-  /**
-   * The use of responseHeaderEquals() is not available.
-   *
-   * @param string $name
-   *   The name of the header.
-   * @param string $value
-   *   The value to check the header against.
-   */
-  public function responseHeaderEquals($name, $value) {
-    @trigger_error('Support for responseHeaderEquals is to be dropped from Javascript tests. See https://www.drupal.org/node/2857562.');
-    parent::responseHeaderEquals($name, $value);
-  }
-
-  /**
-   * The use of responseHeaderNotEquals() is not available.
-   *
-   * @param string $name
-   *   The name of the header.
-   * @param string $value
-   *   The value to check the header against.
-   */
-  public function responseHeaderNotEquals($name, $value) {
-    @trigger_error('Support for responseHeaderNotEquals is to be dropped from Javascript tests. See https://www.drupal.org/node/2857562.');
-    parent::responseHeaderNotEquals($name, $value);
-  }
-
-}
diff --git a/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php b/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
index be1538785f..08a2d8ea19 100644
--- a/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
+++ b/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\FunctionalTests;
 
-use Behat\Mink\Element\NodeElement;
+use Behat\Mink\Exception\ElementNotFoundException;
 use Behat\Mink\Exception\ExpectationException;
 use Behat\Mink\Selector\Xpath\Escaper;
 use Drupal\Component\Render\FormattableMarkup;
@@ -220,11 +220,13 @@ protected function assertResponse($code) {
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
    *   Use $this->assertSession()->fieldExists() or
-   *   $this->assertSession()->buttonExists() or
    *   $this->assertSession()->fieldValueEquals() instead.
    */
   protected function assertFieldByName($name, $value = NULL) {
-    $this->assertFieldByXPath($this->constructFieldXpath('name', $name), $value);
+    $this->assertSession()->fieldExists($name);
+    if ($value !== NULL) {
+      $this->assertSession()->fieldValueEquals($name, (string) $value);
+    }
   }
 
   /**
@@ -240,11 +242,15 @@ protected function assertFieldByName($name, $value = NULL) {
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
    *   Use $this->assertSession()->fieldNotExists() or
-   *   $this->assertSession()->buttonNotExists() or
    *   $this->assertSession()->fieldValueNotEquals() instead.
    */
   protected function assertNoFieldByName($name, $value = '') {
-    $this->assertNoFieldByXPath($this->constructFieldXpath('name', $name), $value);
+    if ($this->getSession()->getPage()->findField($name) && isset($value)) {
+      $this->assertSession()->fieldValueNotEquals($name, (string) $value);
+    }
+    else {
+      $this->assertSession()->fieldNotExists($name);
+    }
   }
 
   /**
@@ -262,11 +268,19 @@ protected function assertNoFieldByName($name, $value = '') {
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
    *   Use $this->assertSession()->fieldExists() or
-   *   $this->assertSession()->buttonExists() or
    *   $this->assertSession()->fieldValueEquals() instead.
    */
   protected function assertFieldById($id, $value = '') {
-    $this->assertFieldByXPath($this->constructFieldXpath('id', $id), $value);
+    $xpath = $this->assertSession()->buildXPathQuery('//textarea[@id=:value]|//input[@id=:value]|//select[@id=:value]', [':value' => $id]);
+    $field = $this->getSession()->getPage()->find('xpath', $xpath);
+
+    if (empty($field)) {
+      throw new ElementNotFoundException($this->getSession()->getDriver(), 'form field', 'id', $field);
+    }
+
+    if ($value !== NULL) {
+      $this->assertEquals($value, $field->getValue());
+    }
   }
 
   /**
@@ -276,25 +290,23 @@ protected function assertFieldById($id, $value = '') {
    *   Name or ID of field to assert.
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
-   *   Use $this->assertSession()->fieldExists() or
-   *   $this->assertSession()->buttonExists() instead.
+   *   Use $this->assertSession()->fieldExists() instead.
    */
   protected function assertField($field) {
-    $this->assertFieldByXPath($this->constructFieldXpath('name', $field) . '|' . $this->constructFieldXpath('id', $field));
+    $this->assertSession()->fieldExists($field);
   }
 
   /**
-   * Asserts that a field does NOT exist with the given name or ID.
+   * Asserts that a field exists with the given name or ID does NOT exist.
    *
    * @param string $field
    *   Name or ID of field to assert.
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
-   *   Use $this->assertSession()->fieldNotExists() or
-   *   $this->assertSession()->buttonNotExists() instead.
+   *   Use $this->assertSession()->fieldNotExists() instead.
    */
   protected function assertNoField($field) {
-    $this->assertNoFieldByXPath($this->constructFieldXpath('name', $field) . '|' . $this->constructFieldXpath('id', $field));
+    $this->assertSession()->fieldNotExists($field);
   }
 
   /**
@@ -415,11 +427,23 @@ protected function assertNoLinkByHref($href) {
    *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
    *   Use $this->assertSession()->fieldNotExists() or
-   *   $this->assertSession()->buttonNotExists() or
    *   $this->assertSession()->fieldValueNotEquals() instead.
    */
   protected function assertNoFieldById($id, $value = '') {
-    $this->assertNoFieldByXPath($this->constructFieldXpath('id', $id), $value);
+    $xpath = $this->assertSession()->buildXPathQuery('//textarea[@id=:value]|//input[@id=:value]|//select[@id=:value]', [':value' => $id]);
+    $field = $this->getSession()->getPage()->find('xpath', $xpath);
+
+    // Return early if the field could not be found as expected.
+    if ($field === NULL) {
+      return;
+    }
+
+    if (!isset($value)) {
+      throw new ExpectationException(sprintf('Id "%s" appears on this page, but it should not.', $id), $this->getSession()->getDriver());
+    }
+    elseif ($value === $field->getValue()) {
+      throw new ExpectationException(sprintf('Failed asserting that %s is not equal to %s', $field->getValue(), $value), $this->getSession()->getDriver());
+    }
   }
 
   /**
@@ -561,32 +585,25 @@ protected function assertFieldByXPath($xpath, $value = NULL, $message = '') {
    *   (optional) A message to display with the assertion. Do not translate
    *   messages with t().
    *
-   * @throws \Behat\Mink\Exception\ExpectationException
-   *
    * @deprecated Scheduled for removal in Drupal 9.0.0.
    *   Use $this->xpath() instead and assert that the result is empty.
    */
   protected function assertNoFieldByXPath($xpath, $value = NULL, $message = '') {
     $fields = $this->xpath($xpath);
 
-    if (!empty($fields)) {
-      if (isset($value)) {
-        $found = FALSE;
-        try {
-          $this->assertFieldsByValue($fields, $value);
-          $found = TRUE;
-        }
-        catch (\Exception $e) {
-        }
-
-        if ($found) {
-          throw new ExpectationException(sprintf('The field resulting from %s was found with the provided value %s.', $xpath, $value), $this->getSession()->getDriver());
+    // If value specified then check array for match.
+    $found = TRUE;
+    if (isset($value)) {
+      $found = FALSE;
+      if ($fields) {
+        foreach ($fields as $field) {
+          if ($field->getAttribute('value') == $value) {
+            $found = TRUE;
+          }
         }
       }
-      else {
-        throw new ExpectationException(sprintf('The field resulting from %s was found.', $xpath), $this->getSession()->getDriver());
-      }
     }
+    return $this->assertFalse($fields && $found, $message);
   }
 
   /**
@@ -612,15 +629,7 @@ protected function assertFieldsByValue($fields, $value = NULL, $message = '') {
       $found = FALSE;
       if ($fields) {
         foreach ($fields as $field) {
-          if ($field->getAttribute('type') == 'checkbox') {
-            if (is_bool($value)) {
-              $found = $field->isChecked() == $value;
-            }
-            else {
-              $found = TRUE;
-            }
-          }
-          elseif ($field->getAttribute('value') == $value) {
+          if ($field->getAttribute('value') == $value) {
             // Input element with correct value.
             $found = TRUE;
           }
@@ -628,12 +637,8 @@ protected function assertFieldsByValue($fields, $value = NULL, $message = '') {
             // Select element with an option.
             $found = TRUE;
           }
-          elseif ($field->getTagName() === 'textarea' && $field->getValue() == $value) {
-            // Text area with correct text. Use getValue() here because
-            // getText() would remove any newlines in the value.
-            $found = TRUE;
-          }
-          elseif ($field->getTagName() !== 'input' && $field->getText() == $value) {
+          elseif ($field->getText() == $value) {
+            // Text area with correct text.
             $found = TRUE;
           }
         }
@@ -783,25 +788,6 @@ protected function buildXPathQuery($xpath, array $args = []) {
     return $this->assertSession()->buildXPathQuery($xpath, $args);
   }
 
-  /**
-   * Helper: Constructs an XPath for the given set of attributes and value.
-   *
-   * @param string $attribute
-   *   Field attributes.
-   * @param string $value
-   *   Value of field.
-   *
-   * @return string
-   *   XPath for specified values.
-   *
-   * @deprecated Scheduled for removal in Drupal 9.0.0.
-   *   Use $this->getSession()->getPage()->findField() instead.
-   */
-  protected function constructFieldXpath($attribute, $value) {
-    $xpath = '//textarea[@' . $attribute . '=:value]|//input[@' . $attribute . '=:value]|//select[@' . $attribute . '=:value]';
-    return $this->buildXPathQuery($xpath, [':value' => $value]);
-  }
-
   /**
    * Gets the current raw content.
    *
@@ -813,21 +799,4 @@ protected function getRawContent() {
     return $this->getSession()->getPage()->getContent();
   }
 
-  /**
-   * Get all option elements, including nested options, in a select.
-   *
-   * @param \Behat\Mink\Element\NodeElement $element
-   *   The element for which to get the options.
-   *
-   * @return \Behat\Mink\Element\NodeElement[]
-   *   Option elements in select.
-   *
-   * @deprecated Scheduled for removal in Drupal 9.0.0.
-   *   Use $element->findAll('xpath', 'option') instead.
-   */
-  protected function getAllOptions(NodeElement $element) {
-    @trigger_error('AssertLegacyTrait::getAllOptions() is scheduled for removal in Drupal 9.0.0. Use $element->findAll(\'xpath\', \'option\') instead.', E_USER_DEPRECATED);
-    return $element->findAll('xpath', '//option');
-  }
-
 }
diff --git a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
index 882e6edcd7..2701dcb0bf 100644
--- a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
+++ b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\FunctionalTests;
 
 use Behat\Mink\Exception\ExpectationException;
-use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Url;
 use Drupal\Tests\BrowserTestBase;
@@ -99,18 +98,13 @@ public function testForm() {
 
     // Test drupalPostForm().
     $edit = ['bananas' => 'red'];
-    $result = $this->drupalPostForm('form-test/object-builder', $edit, 'Save');
-    $this->assertSame($this->getSession()->getPage()->getContent(), $result);
+    $this->drupalPostForm('form-test/object-builder', $edit, 'Save');
     $value = $config_factory->get('form_test.object')->get('bananas');
     $this->assertSame('red', $value);
 
     $this->drupalPostForm('form-test/object-builder', NULL, 'Save');
     $value = $config_factory->get('form_test.object')->get('bananas');
     $this->assertSame('', $value);
-
-    // Test drupalPostForm() with no-html response.
-    $values = Json::decode($this->drupalPostForm('form_test/form-state-values-clean', [], t('Submit')));
-    $this->assertTrue(1000, $values['beer']);
   }
 
   /**
@@ -229,7 +223,7 @@ public function testLegacyXpathAsserts() {
       $this->assertNoFieldByXPath("//input[@id = 'edit-name']");
       $this->fail('The "edit-name" field was not found.');
     }
-    catch (ExpectationException $e) {
+    catch (\PHPUnit_Framework_ExpectationFailedException $e) {
       $this->pass('assertNoFieldByXPath correctly failed. The "edit-name" field was found.');
     }
 
@@ -245,7 +239,7 @@ public function testLegacyXpathAsserts() {
   /**
    * Tests legacy field asserts using textfields.
    */
-  public function testLegacyFieldAssertsForTextfields() {
+  public function testLegacyFieldAssertsWithTextfields() {
     $this->drupalGet('test-field-xpath');
 
     // *** 1. assertNoField().
@@ -278,7 +272,7 @@ public function testLegacyFieldAssertsForTextfields() {
       $this->assertField('invalid_name_and_id');
       $this->fail('The "invalid_name_and_id" field was found.');
     }
-    catch (\PHPUnit_Framework_ExpectationFailedException $e) {
+    catch (ExpectationException $e) {
       $this->pass('assertField correctly failed. The "invalid_name_and_id" field was not found.');
     }
 
@@ -367,7 +361,7 @@ public function testLegacyFieldAssertsForTextfields() {
       $this->assertFieldByName('non-existing-name');
       $this->fail('The "non-existing-name" field was found.');
     }
-    catch (\PHPUnit_Framework_ExpectationFailedException $e) {
+    catch (ExpectationException $e) {
       $this->pass('The "non-existing-name" field was not found');
     }
 
@@ -376,18 +370,15 @@ public function testLegacyFieldAssertsForTextfields() {
       $this->assertFieldByName('name', 'not the value');
       $this->fail('The "name" field with incorrect value was found.');
     }
-    catch (\PHPUnit_Framework_ExpectationFailedException $e) {
+    catch (ExpectationException $e) {
       $this->pass('assertFieldByName correctly failed. The "name" field with incorrect value was not found.');
     }
-
-    // Test that text areas can contain new lines.
-    $this->assertFieldsByValue($this->xpath("//textarea[@id = 'edit-test-textarea-with-newline']"), "Test text with\nnewline");
   }
 
   /**
-   * Tests legacy field asserts for options field type.
+   * Tests legacy field asserts on other types of field.
    */
-  public function testLegacyFieldAssertsForOptions() {
+  public function testLegacyFieldAssertsWithNonTextfields() {
     $this->drupalGet('test-field-xpath');
 
     // Option field type.
@@ -435,17 +426,7 @@ public function testLegacyFieldAssertsForOptions() {
       $this->pass($e->getMessage());
     }
 
-    // Test \Drupal\FunctionalTests\AssertLegacyTrait::getAllOptions.
-    $this->drupalGet('/form-test/select');
-    $this->assertCount(6, $this->getAllOptions($this->cssSelect('select[name="opt_groups"]')[0]));
-  }
-
-  /**
-   * Tests legacy field asserts for button field type.
-   */
-  public function testLegacyFieldAssertsForButton() {
-    $this->drupalGet('test-field-xpath');
-
+    // Button field type.
     $this->assertFieldById('edit-save', NULL);
     // Test that the assertion fails correctly if the field value is passed in
     // rather than the id.
@@ -453,7 +434,7 @@ public function testLegacyFieldAssertsForButton() {
       $this->assertFieldById('Save', NULL);
       $this->fail('The field with id of "Save" was found.');
     }
-    catch (\PHPUnit_Framework_ExpectationFailedException $e) {
+    catch (ExpectationException $e) {
       $this->pass($e->getMessage());
     }
 
@@ -468,27 +449,7 @@ public function testLegacyFieldAssertsForButton() {
       $this->pass($e->getMessage());
     }
 
-    // Test that multiple fields with the same name are validated correctly.
-    $this->assertFieldByName('duplicate_button', 'Duplicate button 1');
-    $this->assertFieldByName('duplicate_button', 'Duplicate button 2');
-    $this->assertNoFieldByName('duplicate_button', 'Rabbit');
-
-    try {
-      $this->assertNoFieldByName('duplicate_button', 'Duplicate button 2');
-      $this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.');
-    }
-    catch (ExpectationException $e) {
-      $this->pass('assertNoFieldByName correctly failed. The "duplicate_button" field with the value Duplicate button 2 was found.');
-    }
-  }
-
-  /**
-   * Tests legacy field asserts for checkbox field type.
-   */
-  public function testLegacyFieldAssertsForCheckbox() {
-    $this->drupalGet('test-field-xpath');
-
-    // Part 1 - Test by name.
+    // Checkbox field type.
     // Test that checkboxes are found/not found correctly by name, when using
     // TRUE or FALSE to match their 'checked' state.
     $this->assertFieldByName('checkbox_enabled', TRUE);
@@ -501,24 +462,6 @@ public function testLegacyFieldAssertsForCheckbox() {
     $this->assertFieldByName('checkbox_enabled', NULL);
     $this->assertFieldByName('checkbox_disabled', NULL);
 
-    // Test that checkboxes are found by name when passing no second parameter.
-    $this->assertFieldByName('checkbox_enabled');
-    $this->assertFieldByName('checkbox_disabled');
-
-    // Test that we have legacy support.
-    $this->assertFieldByName('checkbox_enabled', '1');
-    $this->assertFieldByName('checkbox_disabled', '');
-
-    // Test that the assertion fails correctly when using NULL to ignore state.
-    try {
-      $this->assertNoFieldByName('checkbox_enabled', NULL);
-      $this->fail('The "checkbox_enabled" field was not found by name, using NULL value.');
-    }
-    catch (ExpectationException $e) {
-      $this->pass('assertNoFieldByName failed correctly. The "checkbox_enabled" field was found using NULL value.');
-    }
-
-    // Part 2 - Test by ID.
     // Test that checkboxes are found/not found correctly by ID, when using
     // TRUE or FALSE to match their 'checked' state.
     $this->assertFieldById('edit-checkbox-enabled', TRUE);
@@ -526,18 +469,19 @@ public function testLegacyFieldAssertsForCheckbox() {
     $this->assertNoFieldById('edit-checkbox-enabled', FALSE);
     $this->assertNoFieldById('edit-checkbox-disabled', TRUE);
 
-    // Test that checkboxes are found by ID, when using NULL to ignore the
+    // Test that checkboxes are found by by ID, when using NULL to ignore the
     // 'checked' state.
     $this->assertFieldById('edit-checkbox-enabled', NULL);
     $this->assertFieldById('edit-checkbox-disabled', NULL);
 
-    // Test that checkboxes are found by ID when passing no second parameter.
-    $this->assertFieldById('edit-checkbox-enabled');
-    $this->assertFieldById('edit-checkbox-disabled');
-
-    // Test that we have legacy support.
-    $this->assertFieldById('edit-checkbox-enabled', '1');
-    $this->assertFieldById('edit-checkbox-disabled', '');
+    // Test that the assertion fails correctly when using NULL to ignore state.
+    try {
+      $this->assertNoFieldByName('checkbox_enabled', NULL);
+      $this->fail('The "checkbox_enabled" field was not found by name, using NULL value.');
+    }
+    catch (ExpectationException $e) {
+      $this->pass('assertNoFieldByName failed correctly. The "checkbox_enabled" field was found using NULL value.');
+    }
 
     // Test that the assertion fails correctly when using NULL to ignore state.
     try {
@@ -548,7 +492,7 @@ public function testLegacyFieldAssertsForCheckbox() {
       $this->pass('assertNoFieldById failed correctly. The "edit-checkbox-disabled" field was found by ID using NULL value.');
     }
 
-    // Part 3 - Test the specific 'checked' assertions.
+    // Test the specific 'checked' assertions.
     $this->assertFieldChecked('edit-checkbox-enabled');
     $this->assertNoFieldChecked('edit-checkbox-disabled');
 
@@ -615,22 +559,4 @@ public function testLocalTimeZone() {
     $this->assertEquals('Australia/Sydney', $value);
   }
 
-  /**
-   * Tests the ::checkForMetaRefresh() method.
-   */
-  public function testCheckForMetaRefresh() {
-    // Disable following redirects in the client.
-    $this->getSession()->getDriver()->getClient()->followRedirects(FALSE);
-    // Set the maximumMetaRefreshCount to zero to make sure the redirect doesn't
-    // happen when doing a drupalGet.
-    $this->maximumMetaRefreshCount = 0;
-    $this->drupalGet('test-meta-refresh');
-    $this->assertNotEmpty($this->cssSelect('meta[http-equiv="refresh"]'));
-    // Allow one redirect to happen.
-    $this->maximumMetaRefreshCount = 1;
-    $this->checkForMetaRefresh();
-    // Check that we are now on the test page.
-    $this->assertSession()->pageTextContains('Test page text.');
-  }
-
 }
diff --git a/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php b/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php
index e8c8ae5e54..ba30da948a 100644
--- a/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php
+++ b/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php
@@ -75,12 +75,10 @@ public function testCorrectUserInputMappingOnComplexFields() {
     $storage = $this->container->get('entity_type.manager')->getStorage($this->entityTypeId);
 
     /** @var ContentEntityInterface $entity */
-    $entity = $storage->create([
-      $this->fieldName => [
-        ['shape' => 'rectangle', 'color' => 'green'],
-        ['shape' => 'circle', 'color' => 'blue'],
-      ],
-    ]);
+    $entity = $storage->create([$this->fieldName => [
+      ['shape' => 'rectangle', 'color' => 'green'],
+      ['shape' => 'circle', 'color' => 'blue'],
+    ]]);
     $entity->save();
 
     $this->drupalGet($this->entityTypeId . '/manage/' . $entity->id() . '/edit');
diff --git a/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormFieldValidationFilteringTest.php b/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormFieldValidationFilteringTest.php
deleted file mode 100644
index 0f17e6425b..0000000000
--- a/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormFieldValidationFilteringTest.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalTests\Entity;
-
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\TestFileCreationTrait;
-
-/**
- * Tests field validation filtering on content entity forms.
- *
- * @group Entity
- */
-class ContentEntityFormFieldValidationFilteringTest extends BrowserTestBase {
-
-  use TestFileCreationTrait;
-
-  /**
-   * The ID of the type of the entity under test.
-   *
-   * @var string
-   */
-  protected $entityTypeId;
-
-  /**
-   * The single-valued field name being tested with the entity type.
-   *
-   * @var string
-   */
-  protected $fieldNameSingle;
-
-  /**
-   * The multi-valued field name being tested with the entity type.
-   *
-   * @var string
-   */
-  protected $fieldNameMultiple;
-
-  /**
-   * The name of the file field being tested with the entity type.
-   *
-   * @var string
-   */
-  protected $fieldNameFile;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['entity_test', 'field_test', 'file', 'image'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-    $web_user = $this->drupalCreateUser(['administer entity_test content']);
-    $this->drupalLogin($web_user);
-
-    // Create two fields of field type "test_field", one with single cardinality
-    // and one with unlimited cardinality on the entity type "entity_test". It
-    // is important to use this field type because its default widget has a
-    // custom \Drupal\Core\Field\WidgetInterface::errorElement() implementation.
-    $this->entityTypeId = 'entity_test';
-    $this->fieldNameSingle = 'test_single';
-    $this->fieldNameMultiple = 'test_multiple';
-    $this->fieldNameFile = 'test_file';
-
-    FieldStorageConfig::create([
-      'field_name' => $this->fieldNameSingle,
-      'entity_type' => $this->entityTypeId,
-      'type' => 'test_field',
-      'cardinality' => 1,
-    ])->save();
-    FieldConfig::create([
-      'entity_type' => $this->entityTypeId,
-      'field_name' => $this->fieldNameSingle,
-      'bundle' => $this->entityTypeId,
-      'label' => 'Test single',
-      'required' => TRUE,
-      'translatable' => FALSE,
-    ])->save();
-
-    FieldStorageConfig::create([
-      'field_name' => $this->fieldNameMultiple,
-      'entity_type' => $this->entityTypeId,
-      'type' => 'test_field',
-      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
-    ])->save();
-    FieldConfig::create([
-      'entity_type' => $this->entityTypeId,
-      'field_name' => $this->fieldNameMultiple,
-      'bundle' => $this->entityTypeId,
-      'label' => 'Test multiple',
-      'translatable' => FALSE,
-    ])->save();
-
-    // Also create a file field to test its '#limit_validation_errors'
-    // implementation.
-    FieldStorageConfig::create([
-      'field_name' => $this->fieldNameFile,
-      'entity_type' => $this->entityTypeId,
-      'type' => 'file',
-      'cardinality' => 1,
-    ])->save();
-    FieldConfig::create([
-      'entity_type' => $this->entityTypeId,
-      'field_name' => $this->fieldNameFile,
-      'bundle' => $this->entityTypeId,
-      'label' => 'Test file',
-      'translatable' => FALSE,
-    ])->save();
-
-
-    entity_get_form_display($this->entityTypeId, $this->entityTypeId, 'default')
-      ->setComponent($this->fieldNameSingle, ['type' => 'test_field_widget'])
-      ->setComponent($this->fieldNameMultiple, ['type' => 'test_field_widget'])
-      ->setComponent($this->fieldNameFile, ['type' => 'file_generic'])
-      ->save();
-  }
-
-  /**
-   * Tests field widgets with #limit_validation_errors.
-   */
-  public function testFieldWidgetsWithLimitedValidationErrors() {
-    $assert_session = $this->assertSession();
-    $this->drupalGet($this->entityTypeId . '/add');
-
-    // The 'Test multiple' field is the only multi-valued field in the form, so
-    // try to add a new item for it. This tests the '#limit_validation_errors'
-    // property set by \Drupal\Core\Field\WidgetBase::formMultipleElements().
-    $assert_session->elementsCount('css', 'div#edit-test-multiple-wrapper div.form-type-textfield input', 1);
-    $this->drupalPostForm(NULL, [], 'Add another item');
-    $assert_session->elementsCount('css', 'div#edit-test-multiple-wrapper div.form-type-textfield input', 2);
-
-    // Now try to upload a file. This tests the '#limit_validation_errors'
-    // property set by
-    // \Drupal\file\Plugin\Field\FieldWidget\FileWidget::process().
-    $text_file = current($this->getTestFiles('text'));
-    $edit = [
-      'files[test_file_0]' => drupal_realpath($text_file->uri)
-    ];
-    $assert_session->elementNotExists('css', 'input#edit-test-file-0-remove-button');
-    $this->drupalPostForm(NULL, $edit, 'Upload');
-    $assert_session->elementExists('css', 'input#edit-test-file-0-remove-button');
-
-    // Make the 'Test multiple' field required and check that adding another
-    // item throws a validation error.
-    $field_config = FieldConfig::loadByName($this->entityTypeId, $this->entityTypeId, $this->fieldNameMultiple);
-    $field_config->setRequired(TRUE);
-    $field_config->save();
-
-    $this->drupalPostForm($this->entityTypeId . '/add', [], 'Add another item');
-    $assert_session->pageTextContains('Test multiple (value 1) field is required.');
-
-    // Check that saving the form without entering any value for the required
-    // field still throws the proper validation errors.
-    $this->drupalPostForm(NULL, [], 'Save');
-    $assert_session->pageTextContains('Test single field is required.');
-    $assert_session->pageTextContains('Test multiple (value 1) field is required.');
-  }
-
-}
diff --git a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php b/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php
deleted file mode 100644
index 4aca50032b..0000000000
--- a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php
+++ /dev/null
@@ -1,436 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalTests\Update;
-
-use Behat\Mink\Driver\GoutteDriver;
-use Behat\Mink\Mink;
-use Behat\Mink\Selector\SelectorsHandler;
-use Behat\Mink\Session;
-use Drupal\Component\Utility\Crypt;
-use Drupal\Core\Test\TestRunnerKernel;
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\HiddenFieldSelector;
-use Drupal\Tests\SchemaCheckTestTrait;
-use Drupal\Core\Database\Database;
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Language\Language;
-use Drupal\Core\Url;
-use Drupal\user\Entity\User;
-use Symfony\Component\DependencyInjection\Reference;
-use Symfony\Component\HttpFoundation\Request;
-
-/**
- * Provides a base class for writing an update test.
- *
- * To write an update test:
- * - Write the hook_update_N() implementations that you are testing.
- * - Create one or more database dump files, which will set the database to the
- *   "before updates" state. Normally, these will add some configuration data to
- *   the database, set up some tables/fields, etc.
- * - Create a class that extends this class.
- * - In your setUp() method, point the $this->databaseDumpFiles variable to the
- *   database dump files, and then call parent::setUp() to run the base setUp()
- *   method in this class.
- * - In your test method, call $this->runUpdates() to run the necessary updates,
- *   and then use test assertions to verify that the result is what you expect.
- * - In order to test both with a "bare" database dump as well as with a
- *   database dump filled with content, extend your update path test class with
- *   a new test class that overrides the bare database dump. Refer to
- *   UpdatePathTestBaseFilledTest for an example.
- *
- * @ingroup update_api
- *
- * @see hook_update_N()
- */
-abstract class UpdatePathTestBase extends BrowserTestBase {
-
-  use SchemaCheckTestTrait;
-
-  /**
-   * Modules to enable after the database is loaded.
-   */
-  protected static $modules = [];
-
-  /**
-   * The file path(s) to the dumped database(s) to load into the child site.
-   *
-   * The file system/tests/fixtures/update/drupal-8.bare.standard.php.gz is
-   * normally included first -- this sets up the base database from a bare
-   * standard Drupal installation.
-   *
-   * The file system/tests/fixtures/update/drupal-8.filled.standard.php.gz
-   * can also be used in case we want to test with a database filled with
-   * content, and with all core modules enabled.
-   *
-   * @var array
-   */
-  protected $databaseDumpFiles = [];
-
-  /**
-   * The install profile used in the database dump file.
-   *
-   * @var string
-   */
-  protected $installProfile = 'standard';
-
-  /**
-   * Flag that indicates whether the child site has been updated.
-   *
-   * @var bool
-   */
-  protected $upgradedSite = FALSE;
-
-  /**
-   * Array of errors triggered during the update process.
-   *
-   * @var array
-   */
-  protected $upgradeErrors = [];
-
-  /**
-   * Array of modules loaded when the test starts.
-   *
-   * @var array
-   */
-  protected $loadedModules = [];
-
-  /**
-   * Flag to indicate whether zlib is installed or not.
-   *
-   * @var bool
-   */
-  protected $zlibInstalled = TRUE;
-
-  /**
-   * Flag to indicate whether there are pending updates or not.
-   *
-   * @var bool
-   */
-  protected $pendingUpdates = TRUE;
-
-  /**
-   * The update URL.
-   *
-   * @var string
-   */
-  protected $updateUrl;
-
-  /**
-   * Disable strict config schema checking.
-   *
-   * The schema is verified at the end of running the update.
-   *
-   * @var bool
-   */
-  protected $strictConfigSchema = FALSE;
-
-  /**
-   * Fail the test if there are failed updates.
-   *
-   * @var bool
-   */
-  protected $checkFailedUpdates = TRUE;
-
-  /**
-   * Constructs an UpdatePathTestCase object.
-   *
-   * @param $test_id
-   *   (optional) The ID of the test. Tests with the same id are reported
-   *   together.
-   */
-  public function __construct($test_id = NULL) {
-    parent::__construct($test_id);
-    $this->zlibInstalled = function_exists('gzopen');
-  }
-
-  /**
-   * Overrides WebTestBase::setUp() for update testing.
-   *
-   * The main difference in this method is that rather than performing the
-   * installation via the installer, a database is loaded. Additional work is
-   * then needed to set various things such as the config directories and the
-   * container that would normally be done via the installer.
-   */
-  protected function setUp() {
-    $request = Request::createFromGlobals();
-
-    // Boot up Drupal into a state where calling the database API is possible.
-    // This is used to initialize the database system, so we can load the dump
-    // files.
-    $autoloader = require $this->root . '/autoload.php';
-    $kernel = TestRunnerKernel::createFromRequest($request, $autoloader);
-    $kernel->loadLegacyIncludes();
-
-    $this->changeDatabasePrefix();
-    $this->runDbTasks();
-    // Allow classes to set database dump files.
-    $this->setDatabaseDumpFiles();
-
-    // We are going to set a missing zlib requirement property for usage
-    // during the performUpgrade() and tearDown() methods. Also set that the
-    // tests failed.
-    if (!$this->zlibInstalled) {
-      parent::setUp();
-      return;
-    }
-    // Set the update url. This must be set here rather than in
-    // self::__construct() or the old URL generator will leak additional test
-    // sites.
-    $this->updateUrl = Url::fromRoute('system.db_update');
-
-    $this->setupBaseUrl();
-
-    // Install Drupal test site.
-    $this->prepareEnvironment();
-    $this->installDrupal();
-
-    // Add the config directories to settings.php.
-    drupal_install_config_directories();
-
-    // Set the container. parent::rebuildAll() would normally do this, but this
-    // not safe to do here, because the database has not been updated yet.
-    $this->container = \Drupal::getContainer();
-
-    $this->replaceUser1();
-
-    require_once \Drupal::root() . '/core/includes/update.inc';
-
-    // Setup Mink.
-    $session = $this->initMink();
-
-    $cookies = $this->extractCookiesFromRequest(\Drupal::request());
-    foreach ($cookies as $cookie_name => $values) {
-      foreach ($values as $value) {
-        $session->setCookie($cookie_name, $value);
-      }
-    }
-
-    // Set up the browser test output file.
-    $this->initBrowserOutputFile();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function installDrupal() {
-    $this->initUserSession();
-    $this->prepareSettings();
-    $this->doInstall();
-    $this->initSettings();
-
-    $request = Request::createFromGlobals();
-    $container = $this->initKernel($request);
-    $this->initConfig($container);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function doInstall() {
-    $this->runDbTasks();
-    // Allow classes to set database dump files.
-    $this->setDatabaseDumpFiles();
-
-    // Load the database(s).
-    foreach ($this->databaseDumpFiles as $file) {
-      if (substr($file, -3) == '.gz') {
-        $file = "compress.zlib://$file";
-      }
-      require $file;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function initMink() {
-    $driver = $this->getDefaultDriverInstance();
-
-    if ($driver instanceof GoutteDriver) {
-      // Turn off curl timeout. Having a timeout is not a problem in a normal
-      // test running, but it is a problem when debugging. Also, disable SSL
-      // peer verification so that testing under HTTPS always works.
-      /** @var \GuzzleHttp\Client $client */
-      $client = $this->container->get('http_client_factory')->fromOptions([
-        'timeout' => NULL,
-        'verify' => FALSE,
-      ]);
-
-      // Inject a Guzzle middleware to generate debug output for every request
-      // performed in the test.
-      $handler_stack = $client->getConfig('handler');
-      $handler_stack->push($this->getResponseLogHandler());
-
-      $driver->getClient()->setClient($client);
-    }
-
-    $selectors_handler = new SelectorsHandler([
-      'hidden_field_selector' => new HiddenFieldSelector()
-    ]);
-    $session = new Session($driver, $selectors_handler);
-    $this->mink = new Mink();
-    $this->mink->registerSession('default', $session);
-    $this->mink->setDefaultSessionName('default');
-    $this->registerSessions();
-
-    return $session;
-  }
-
-  /**
-   * Set database dump files to be used.
-   */
-  abstract protected function setDatabaseDumpFiles();
-
-  /**
-   * Add settings that are missed since the installer isn't run.
-   */
-  protected function prepareSettings() {
-    parent::prepareSettings();
-
-    // Remember the profile which was used.
-    $settings['settings']['install_profile'] = (object) [
-      'value' => $this->installProfile,
-      'required' => TRUE,
-    ];
-    // Generate a hash salt.
-    $settings['settings']['hash_salt'] = (object) [
-      'value'    => Crypt::randomBytesBase64(55),
-      'required' => TRUE,
-    ];
-
-    // Since the installer isn't run, add the database settings here too.
-    $settings['databases']['default'] = (object) [
-      'value' => Database::getConnectionInfo(),
-      'required' => TRUE,
-    ];
-
-    $this->writeSettings($settings);
-  }
-
-  /**
-   * Helper function to run pending database updates.
-   */
-  protected function runUpdates() {
-    if (!$this->zlibInstalled) {
-      $this->fail('Missing zlib requirement for update tests.');
-      return FALSE;
-    }
-    // The site might be broken at the time so logging in using the UI might
-    // not work, so we use the API itself.
-    drupal_rewrite_settings([
-      'settings' => [
-        'update_free_access' => (object) [
-          'value' => TRUE,
-          'required' => TRUE,
-        ],
-      ],
-    ]);
-
-    $this->drupalGet($this->updateUrl);
-    $this->clickLink(t('Continue'));
-
-    $this->doSelectionTest();
-    // Run the update hooks.
-    $this->clickLink(t('Apply pending updates'));
-    $this->checkForMetaRefresh();
-
-    // Ensure there are no failed updates.
-    if ($this->checkFailedUpdates) {
-      $this->assertNoRaw('<strong>' . t('Failed:') . '</strong>');
-
-      // Ensure that there are no pending updates.
-      foreach (['update', 'post_update'] as $update_type) {
-        switch ($update_type) {
-          case 'update':
-            $all_updates = update_get_update_list();
-            break;
-          case 'post_update':
-            $all_updates = \Drupal::service('update.post_update_registry')->getPendingUpdateInformation();
-            break;
-        }
-        foreach ($all_updates as $module => $updates) {
-          if (!empty($updates['pending'])) {
-            foreach (array_keys($updates['pending']) as $update_name) {
-              $this->fail("The $update_name() update function from the $module module did not run.");
-            }
-          }
-        }
-      }
-      // Reset the static cache of drupal_get_installed_schema_version() so that
-      // more complex update path testing works.
-      drupal_static_reset('drupal_get_installed_schema_version');
-
-      // The config schema can be incorrect while the update functions are being
-      // executed. But once the update has been completed, it needs to be valid
-      // again. Assert the schema of all configuration objects now.
-      $names = $this->container->get('config.storage')->listAll();
-      /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */
-      $typed_config = $this->container->get('config.typed');
-      $typed_config->clearCachedDefinitions();
-      foreach ($names as $name) {
-        $config = $this->config($name);
-        $this->assertConfigSchema($typed_config, $name, $config->get());
-      }
-
-      // Ensure that the update hooks updated all entity schema.
-      $needs_updates = \Drupal::entityDefinitionUpdateManager()->needsUpdates();
-      $this->assertFalse($needs_updates, 'After all updates ran, entity schema is up to date.');
-      if ($needs_updates) {
-        foreach (\Drupal::entityDefinitionUpdateManager()
-          ->getChangeSummary() as $entity_type_id => $summary) {
-          foreach ($summary as $message) {
-            $this->fail($message);
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Runs the install database tasks for the driver used by the test runner.
-   */
-  protected function runDbTasks() {
-    // Create a minimal container so that t() works.
-    // @see install_begin_request()
-    $container = new ContainerBuilder();
-    $container->setParameter('language.default_values', Language::$defaultValues);
-    $container
-      ->register('language.default', 'Drupal\Core\Language\LanguageDefault')
-      ->addArgument('%language.default_values%');
-    $container
-      ->register('string_translation', 'Drupal\Core\StringTranslation\TranslationManager')
-      ->addArgument(new Reference('language.default'));
-    \Drupal::setContainer($container);
-
-    require_once __DIR__ . '/../../../../includes/install.inc';
-    $connection = Database::getConnection();
-    $errors = db_installer_object($connection->driver())->runTasks();
-    if (!empty($errors)) {
-      $this->fail('Failed to run installer database tasks: ' . implode(', ', $errors));
-    }
-  }
-
-  /**
-   * Replace User 1 with the user created here.
-   */
-  protected function replaceUser1() {
-    /** @var \Drupal\user\UserInterface $account */
-    // @todo: Saving the account before the update is problematic.
-    //   https://www.drupal.org/node/2560237
-    $account = User::load(1);
-    $account->setPassword($this->rootUser->pass_raw);
-    $account->setEmail($this->rootUser->getEmail());
-    $account->setUsername($this->rootUser->getUsername());
-    $account->save();
-  }
-
-  /**
-   * Tests the selection page.
-   */
-  protected function doSelectionTest() {
-    // No-op. Tests wishing to do test the selection page or the general
-    // update.php environment before running update.php can override this method
-    // and implement their required tests.
-  }
-
-}
diff --git a/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php b/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
index 13af30f6c0..fa409afc8b 100644
--- a/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
@@ -70,7 +70,7 @@ public function testLibraryUnknown() {
     $build['#attached']['library'][] = 'core/unknown';
     $assets = AttachedAssets::createFromRenderArray($build);
 
-    $this->assertSame([], $this->assetResolver->getJsAssets($assets, FALSE)[0], 'Unknown library was not added to the page.');
+    $this->assertIdentical([], $this->assetResolver->getJsAssets($assets, FALSE)[0], 'Unknown library was not added to the page.');
   }
 
   /**
@@ -435,12 +435,12 @@ public function testDynamicLibrary() {
     $dynamic_library = $library_discovery->getLibraryByName('common_test', 'dynamic_library');
     $this->assertTrue(is_array($dynamic_library));
     if ($this->assertTrue(isset($dynamic_library['version']))) {
-      $this->assertSame('1.0', $dynamic_library['version']);
+      $this->assertIdentical('1.0', $dynamic_library['version']);
     }
     // Make sure the dynamic library definition could be altered.
     // @see common_test_library_info_alter()
     if ($this->assertTrue(isset($dynamic_library['dependencies']))) {
-      $this->assertSame(['core/jquery'], $dynamic_library['dependencies']);
+      $this->assertIdentical(['core/jquery'], $dynamic_library['dependencies']);
     }
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Cache/ChainedFastBackendTest.php b/core/tests/Drupal/KernelTests/Core/Cache/ChainedFastBackendTest.php
index a93b674d5c..3021b041fe 100644
--- a/core/tests/Drupal/KernelTests/Core/Cache/ChainedFastBackendTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Cache/ChainedFastBackendTest.php
@@ -20,7 +20,7 @@ class ChainedFastBackendTest extends GenericCacheBackendUnitTestBase {
    *   A new ChainedFastBackend object.
    */
   protected function createCacheBackend($bin) {
-    $consistent_backend = new DatabaseBackend(\Drupal::service('database'), \Drupal::service('cache_tags.invalidator.checksum'), $bin, 100);
+    $consistent_backend = new DatabaseBackend(\Drupal::service('database'), \Drupal::service('cache_tags.invalidator.checksum'), $bin);
     $fast_backend = new PhpBackend($bin, \Drupal::service('cache_tags.invalidator.checksum'));
     $backend = new ChainedFastBackend($consistent_backend, $fast_backend, $bin);
     // Explicitly register the cache bin as it can not work through the
diff --git a/core/tests/Drupal/KernelTests/Core/Cache/DatabaseBackendTest.php b/core/tests/Drupal/KernelTests/Core/Cache/DatabaseBackendTest.php
index 358b92530c..de8bbda553 100644
--- a/core/tests/Drupal/KernelTests/Core/Cache/DatabaseBackendTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Cache/DatabaseBackendTest.php
@@ -11,13 +11,6 @@
  */
 class DatabaseBackendTest extends GenericCacheBackendUnitTestBase {
 
-  /**
-   * The max rows to use for test bins.
-   *
-   * @var int
-   */
-  protected static $maxRows = 100;
-
   /**
    * Modules to enable.
    *
@@ -32,7 +25,7 @@ class DatabaseBackendTest extends GenericCacheBackendUnitTestBase {
    *   A new DatabaseBackend object.
    */
   protected function createCacheBackend($bin) {
-    return new DatabaseBackend($this->container->get('database'), $this->container->get('cache_tags.invalidator.checksum'), $bin, static::$maxRows);
+    return new DatabaseBackend($this->container->get('database'), $this->container->get('cache_tags.invalidator.checksum'), $bin);
   }
 
   /**
@@ -47,60 +40,12 @@ public function testSetGet() {
     $cid_long = str_repeat('愛€', 500);
     $cached_value_long = $this->randomMachineName();
     $backend->set($cid_long, $cached_value_long);
-    $this->assertSame($cached_value_long, $backend->get($cid_long)->data, "Backend contains the correct value for long, non-ASCII cache id.");
+    $this->assertIdentical($cached_value_long, $backend->get($cid_long)->data, "Backend contains the correct value for long, non-ASCII cache id.");
 
     $cid_short = '愛1€';
     $cached_value_short = $this->randomMachineName();
     $backend->set($cid_short, $cached_value_short);
-    $this->assertSame($cached_value_short, $backend->get($cid_short)->data, "Backend contains the correct value for short, non-ASCII cache id.");
-  }
-
-  /**
-   * Tests the row count limiting of cache bin database tables.
-   */
-  public function testGarbageCollection() {
-    $backend = $this->getCacheBackend();
-    $max_rows = static::$maxRows;
-
-    $this->assertSame(0, (int) $this->getNumRows());
-
-    // Fill to just the limit.
-    for ($i = 0; $i < $max_rows; $i++) {
-      // Ensure that each cache item created happens in a different millisecond,
-      // by waiting 1 ms (1000 microseconds). The garbage collection might
-      // otherwise keep less than exactly 100 records (which is acceptable for
-      // real-world cases, but not for this test).
-      usleep(1000);
-      $backend->set("test$i", $i);
-    }
-    $this->assertSame($max_rows, $this->getNumRows());
-
-    // Garbage collection has no effect.
-    $backend->garbageCollection();
-    $this->assertSame($max_rows, $this->getNumRows());
-
-    // Go one row beyond the limit.
-    $backend->set('test' . ($max_rows + 1), $max_rows + 1);
-    $this->assertSame($max_rows + 1, $this->getNumRows());
-
-    // Garbage collection removes one row: the oldest.
-    $backend->garbageCollection();
-    $this->assertSame($max_rows, $this->getNumRows());
-    $this->assertFalse($backend->get('test0'));
-  }
-
-  /**
-   * Gets the number of rows in the test cache bin database table.
-   *
-   * @return int
-   *   The number of rows in the test cache bin database table.
-   */
-  protected function getNumRows() {
-    $table = 'cache_' . $this->testBin;
-    $connection = $this->container->get('database');
-    $query = $connection->select($table);
-    $query->addExpression('COUNT(cid)', 'cid');
-    return (int) $query->execute()->fetchField();
+    $this->assertIdentical($cached_value_short, $backend->get($cid_short)->data, "Backend contains the correct value for short, non-ASCII cache id.");
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php b/core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php
index a08d0f9ef1..4e57a71f6c 100644
--- a/core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php
+++ b/core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php
@@ -66,7 +66,7 @@ protected function getTestBin() {
    * @return \Drupal\Core\Cache\CacheBackendInterface
    *   Cache backend to test.
    */
-  abstract protected function createCacheBackend($bin);
+  protected abstract function createCacheBackend($bin);
 
   /**
    * Allows specific implementation to change the environment before a test run.
@@ -130,22 +130,22 @@ protected function tearDown() {
   public function testSetGet() {
     $backend = $this->getCacheBackend();
 
-    $this->assertSame(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1.");
+    $this->assertIdentical(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1.");
     $with_backslash = ['foo' => '\Drupal\foo\Bar'];
     $backend->set('test1', $with_backslash);
     $cached = $backend->get('test1');
     $this->assert(is_object($cached), "Backend returned an object for cache id test1.");
-    $this->assertSame($with_backslash, $cached->data);
+    $this->assertIdentical($with_backslash, $cached->data);
     $this->assertTrue($cached->valid, 'Item is marked as valid.');
     // We need to round because microtime may be rounded up in the backend.
     $this->assertTrue($cached->created >= REQUEST_TIME && $cached->created <= round(microtime(TRUE), 3), 'Created time is correct.');
     $this->assertEqual($cached->expire, Cache::PERMANENT, 'Expire time is correct.');
 
-    $this->assertSame(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2.");
+    $this->assertIdentical(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2.");
     $backend->set('test2', ['value' => 3], REQUEST_TIME + 3);
     $cached = $backend->get('test2');
     $this->assert(is_object($cached), "Backend returned an object for cache id test2.");
-    $this->assertSame(['value' => 3], $cached->data);
+    $this->assertIdentical(['value' => 3], $cached->data);
     $this->assertTrue($cached->valid, 'Item is marked as valid.');
     $this->assertTrue($cached->created >= REQUEST_TIME && $cached->created <= round(microtime(TRUE), 3), 'Created time is correct.');
     $this->assertEqual($cached->expire, REQUEST_TIME + 3, 'Expire time is correct.');
@@ -158,22 +158,22 @@ public function testSetGet() {
     $this->assertTrue($cached->created >= REQUEST_TIME && $cached->created <= round(microtime(TRUE), 3), 'Created time is correct.');
     $this->assertEqual($cached->expire, REQUEST_TIME - 3, 'Expire time is correct.');
 
-    $this->assertSame(FALSE, $backend->get('test4'), "Backend does not contain data for cache id test4.");
+    $this->assertIdentical(FALSE, $backend->get('test4'), "Backend does not contain data for cache id test4.");
     $with_eof = ['foo' => "\nEOF\ndata"];
     $backend->set('test4', $with_eof);
     $cached = $backend->get('test4');
     $this->assert(is_object($cached), "Backend returned an object for cache id test4.");
-    $this->assertSame($with_eof, $cached->data);
+    $this->assertIdentical($with_eof, $cached->data);
     $this->assertTrue($cached->valid, 'Item is marked as valid.');
     $this->assertTrue($cached->created >= REQUEST_TIME && $cached->created <= round(microtime(TRUE), 3), 'Created time is correct.');
     $this->assertEqual($cached->expire, Cache::PERMANENT, 'Expire time is correct.');
 
-    $this->assertSame(FALSE, $backend->get('test5'), "Backend does not contain data for cache id test5.");
+    $this->assertIdentical(FALSE, $backend->get('test5'), "Backend does not contain data for cache id test5.");
     $with_eof_and_semicolon = ['foo' => "\nEOF;\ndata"];
     $backend->set('test5', $with_eof_and_semicolon);
     $cached = $backend->get('test5');
     $this->assert(is_object($cached), "Backend returned an object for cache id test5.");
-    $this->assertSame($with_eof_and_semicolon, $cached->data);
+    $this->assertIdentical($with_eof_and_semicolon, $cached->data);
     $this->assertTrue($cached->valid, 'Item is marked as valid.');
     $this->assertTrue($cached->created >= REQUEST_TIME && $cached->created <= round(microtime(TRUE), 3), 'Created time is correct.');
     $this->assertEqual($cached->expire, Cache::PERMANENT, 'Expire time is correct.');
@@ -182,7 +182,7 @@ public function testSetGet() {
     $backend->set('test6', $with_variable);
     $cached = $backend->get('test6');
     $this->assert(is_object($cached), "Backend returned an object for cache id test6.");
-    $this->assertSame($with_variable, $cached->data);
+    $this->assertIdentical($with_variable, $cached->data);
 
     // Make sure that a cached object is not affected by changing the original.
     $data = new \stdClass();
@@ -229,26 +229,26 @@ public function testSetGet() {
   public function testDelete() {
     $backend = $this->getCacheBackend();
 
-    $this->assertSame(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1.");
+    $this->assertIdentical(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1.");
     $backend->set('test1', 7);
     $this->assert(is_object($backend->get('test1')), "Backend returned an object for cache id test1.");
 
-    $this->assertSame(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2.");
+    $this->assertIdentical(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2.");
     $backend->set('test2', 3);
     $this->assert(is_object($backend->get('test2')), "Backend returned an object for cache id %cid.");
 
     $backend->delete('test1');
-    $this->assertSame(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1 after deletion.");
+    $this->assertIdentical(FALSE, $backend->get('test1'), "Backend does not contain data for cache id test1 after deletion.");
 
     $this->assert(is_object($backend->get('test2')), "Backend still has an object for cache id test2.");
 
     $backend->delete('test2');
-    $this->assertSame(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2 after deletion.");
+    $this->assertIdentical(FALSE, $backend->get('test2'), "Backend does not contain data for cache id test2 after deletion.");
 
     $long_cid = str_repeat('a', 300);
     $backend->set($long_cid, 'test');
     $backend->delete($long_cid);
-    $this->assertSame(FALSE, $backend->get($long_cid), "Backend does not contain data for long cache id after deletion.");
+    $this->assertIdentical(FALSE, $backend->get($long_cid), "Backend does not contain data for long cache id after deletion.");
   }
 
   /**
@@ -275,7 +275,7 @@ public function testValueTypeIsKept() {
     foreach ($variables as $cid => $value) {
       $object = $backend->get($cid);
       $this->assert(is_object($object), sprintf("Backend returned an object for cache id %s.", $cid));
-      $this->assertSame($value, $object->data, sprintf("Data of cached id %s kept is identical in type and value", $cid));
+      $this->assertIdentical($value, $object->data, sprintf("Data of cached id %s kept is identical in type and value", $cid));
     }
   }
 
@@ -450,10 +450,10 @@ public function testDeleteMultiple() {
     ]);
 
     // Test if expected keys have been deleted.
-    $this->assertSame(FALSE, $backend->get('test1'), "Cache id test1 deleted.");
-    $this->assertSame(FALSE, $backend->get('test3'), "Cache id test3 deleted.");
-    $this->assertSame(FALSE, $backend->get('test5'), "Cache id test5 deleted.");
-    $this->assertSame(FALSE, $backend->get('test7'), "Cache id test7 deleted.");
+    $this->assertIdentical(FALSE, $backend->get('test1'), "Cache id test1 deleted.");
+    $this->assertIdentical(FALSE, $backend->get('test3'), "Cache id test3 deleted.");
+    $this->assertIdentical(FALSE, $backend->get('test5'), "Cache id test5 deleted.");
+    $this->assertIdentical(FALSE, $backend->get('test7'), "Cache id test7 deleted.");
 
     // Test if expected keys exist.
     $this->assertNotIdentical(FALSE, $backend->get('test2'), "Cache id test2 exists.");
@@ -461,8 +461,8 @@ public function testDeleteMultiple() {
     $this->assertNotIdentical(FALSE, $backend->get('test6'), "Cache id test6 exists.");
 
     // Test if that expected keys do not exist.
-    $this->assertSame(FALSE, $backend->get('test19'), "Cache id test19 does not exist.");
-    $this->assertSame(FALSE, $backend->get('test21'), "Cache id test21 does not exist.");
+    $this->assertIdentical(FALSE, $backend->get('test19'), "Cache id test19 does not exist.");
+    $this->assertIdentical(FALSE, $backend->get('test21'), "Cache id test21 does not exist.");
 
     // Calling deleteMultiple() with an empty array should not cause an error.
     $this->assertFalse($backend->deleteMultiple([]));
diff --git a/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php b/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
index 17b6ae41da..8129410e60 100644
--- a/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
@@ -70,8 +70,7 @@ public function register(ContainerBuilder $container) {
     parent::register($container);
     $container->register('cache_factory', 'Drupal\Core\Cache\DatabaseBackendFactory')
       ->addArgument(new Reference('database'))
-      ->addArgument(new Reference('cache_tags.invalidator.checksum'))
-      ->addArgument(new Reference('settings'));
+      ->addArgument(new Reference('cache_tags.invalidator.checksum'));
   }
 
   /**
@@ -206,8 +205,8 @@ public function testScriptLoad() {
       $this->assertTrue(Database::getConnection()
         ->schema()
         ->tableExists($table), SafeMarkup::format('Table @table created by the database script.', ['@table' => $table]));
-      $this->assertSame($this->originalTableSchemas[$table], $this->getTableSchema($table), SafeMarkup::format('The schema for @table was properly restored.', ['@table' => $table]));
-      $this->assertSame($this->originalTableIndexes[$table], $this->getTableIndexes($table), SafeMarkup::format('The indexes for @table were properly restored.', ['@table' => $table]));
+      $this->assertIdentical($this->originalTableSchemas[$table], $this->getTableSchema($table), SafeMarkup::format('The schema for @table was properly restored.', ['@table' => $table]));
+      $this->assertIdentical($this->originalTableIndexes[$table], $this->getTableIndexes($table), SafeMarkup::format('The indexes for @table were properly restored.', ['@table' => $table]));
     }
 
     // Ensure the test config has been replaced.
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigCRUDTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigCRUDTest.php
index 9f2a1a75ff..a94b1b8c1e 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigCRUDTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigCRUDTest.php
@@ -278,12 +278,12 @@ public function testDataTypes() {
     $this->assertIdentical($storage->read($name), $data);
 
     // Test that schema type enforcement can be overridden by trusting the data.
-    $this->assertSame(99, $config->get('int'));
+    $this->assertIdentical(99, $config->get('int'));
     $config->set('int', '99')->save(TRUE);
-    $this->assertSame('99', $config->get('int'));
+    $this->assertIdentical('99', $config->get('int'));
     // Test that re-saving without testing the data enforces the schema type.
     $config->save();
-    $this->assertSame($data, $config->get());
+    $this->assertIdentical($data, $config->get());
 
     // Test that setting an unsupported type for a config object with a schema
     // fails.
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php
index 84b4e42067..79b01cba5d 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php
@@ -161,13 +161,11 @@ public function testDependencyManagement() {
     $missing_dependencies = $config_manager->findMissingContentDependencies();
     $this->assertEqual([], $missing_dependencies);
 
-    $expected = [
-      $entity_test->uuid() => [
-        'entity_type' => 'entity_test',
-        'bundle' => $entity_test->bundle(),
-        'uuid' => $entity_test->uuid(),
-      ],
-    ];
+    $expected = [$entity_test->uuid() => [
+      'entity_type' => 'entity_test',
+      'bundle' => $entity_test->bundle(),
+      'uuid' => $entity_test->uuid(),
+    ]];
     // Delete the content entity so that is it now missing.
     $entity_test->delete();
     $missing_dependencies = $config_manager->findMissingContentDependencies();
@@ -330,7 +328,7 @@ public function testConfigEntityUninstallComplex(array $entity_id_suffixes) {
 
     $called = \Drupal::state()->get('config_test.on_dependency_removal_called', []);
     $this->assertFalse(in_array($entity_3->id(), $called), 'ConfigEntityInterface::onDependencyRemoval() is not called for entity 3.');
-    $this->assertSame([$entity_1->id(), $entity_4->id(), $entity_2->id()], $called, 'The most dependent entites have ConfigEntityInterface::onDependencyRemoval() called first.');
+    $this->assertIdentical([$entity_1->id(), $entity_4->id(), $entity_2->id()], $called, 'The most dependent entites have ConfigEntityInterface::onDependencyRemoval() called first.');
 
     // Perform a module rebuild so we can know where the node module is located
     // and uninstall it.
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
index 1cd9cb1753..3c3f70b654 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStaticCacheTest.php
@@ -57,7 +57,7 @@ public function testCacheHit() {
     // config_entity_static_cache_test_config_test_load() sets _loadStamp to a
     // random string. If they match, it means $entity_2 was retrieved from the
     // static cache rather than going through a separate load sequence.
-    $this->assertSame($entity_1->_loadStamp, $entity_2->_loadStamp);
+    $this->assertIdentical($entity_1->_loadStamp, $entity_2->_loadStamp);
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
index ce9a928d53..bf41e1de50 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php
@@ -51,18 +51,4 @@ public function testUUIDConflict() {
     $this->assertIdentical($entity->toArray(), $original_properties);
   }
 
-  /**
-   * Tests the hasData() method for config entity storage.
-   *
-   * @covers \Drupal\Core\Config\Entity\ConfigEntityStorage::hasData
-   */
-  public function testHasData() {
-    $storage = \Drupal::entityTypeManager()->getStorage('config_test');
-    $this->assertFalse($storage->hasData());
-
-    // Add a test config entity and check again.
-    $storage->create(['id' => $this->randomMachineName()])->save();
-    $this->assertTrue($storage->hasData());
-  }
-
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php
index 807152bfed..0010da7860 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityUnitTest.php
@@ -80,7 +80,7 @@ public function testStorageMethods() {
     // Compare UUIDs as the objects are not identical since
     // $entity->enforceIsNew is FALSE and $entity_loaded_by_uuid->enforceIsNew
     // is NULL.
-    $this->assertSame($entity->uuid(), $entity_loaded_by_uuid->uuid());
+    $this->assertIdentical($entity->uuid(), $entity_loaded_by_uuid->uuid());
 
     $entities = $this->storage->loadByProperties();
     $this->assertEqual(count($entities), 3, 'Three entities are loaded when no properties are specified.');
@@ -100,12 +100,12 @@ public function testStorageMethods() {
       'style' => 999
     ]);
     $entity->save();
-    $this->assertSame('999', $entity->style);
+    $this->assertIdentical('999', $entity->style);
     $entity->style = 999;
     $entity->trustData()->save();
-    $this->assertSame(999, $entity->style);
+    $this->assertIdentical(999, $entity->style);
     $entity->save();
-    $this->assertSame('999', $entity->style);
+    $this->assertIdentical('999', $entity->style);
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigFileContentTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigFileContentTest.php
index b449064e04..5366629211 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigFileContentTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigFileContentTest.php
@@ -210,22 +210,22 @@ public function testSerialization() {
     $config_parsed = $filestorage->read($name);
 
     $key = 'numeric keys';
-    $this->assertSame($config_data[$key], $config_parsed[$key]);
+    $this->assertIdentical($config_data[$key], $config_parsed[$key]);
 
     $key = 'nested keys';
-    $this->assertSame($config_data[$key], $config_parsed[$key]);
+    $this->assertIdentical($config_data[$key], $config_parsed[$key]);
 
     $key = 'HTML';
-    $this->assertSame($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
+    $this->assertIdentical($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
 
     $key = 'UTF-8';
-    $this->assertSame($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
+    $this->assertIdentical($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
 
     $key = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ';
-    $this->assertSame($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
+    $this->assertIdentical($config_data['nested keys'][$key], $config_parsed['nested keys'][$key]);
 
     $key = 'invalid xml';
-    $this->assertSame($config_data[$key], $config_parsed[$key]);
+    $this->assertIdentical($config_data[$key], $config_parsed[$key]);
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRecreateTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRecreateTest.php
index c69f9febb4..0523ee85bf 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRecreateTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRecreateTest.php
@@ -92,7 +92,7 @@ public function testRecreateEntity() {
     $this->assertEqual(5, count($creates), 'There are 5 configuration items to create.');
     $this->assertEqual(5, count($deletes), 'There are 5 configuration items to delete.');
     $this->assertEqual(0, count($this->configImporter->getUnprocessedConfiguration('update')), 'There are no configuration items to update.');
-    $this->assertSame($creates, array_reverse($deletes), 'Deletes and creates contain the same configuration names in opposite orders due to dependencies.');
+    $this->assertIdentical($creates, array_reverse($deletes), 'Deletes and creates contain the same configuration names in opposite orders due to dependencies.');
 
     $this->configImporter->import();
 
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRenameValidationTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRenameValidationTest.php
index cbb2e958bf..e755d5fd88 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRenameValidationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigImportRenameValidationTest.php
@@ -95,7 +95,7 @@ public function testRenameValidation() {
       'node.type.' . $content_type->id() . '::config_test.dynamic.' . $test_entity_id,
     ];
     $renames = $this->configImporter->getUnprocessedConfiguration('rename');
-    $this->assertSame($expected, $renames);
+    $this->assertIdentical($expected, $renames);
 
     // Try to import the configuration. We expect an exception to be thrown
     // because the staged entity is of a different type.
@@ -138,7 +138,7 @@ public function testRenameSimpleConfigValidation() {
       'config_test.old::config_test.new'
     ];
     $renames = $this->configImporter->getUnprocessedConfiguration('rename');
-    $this->assertSame($expected, $renames);
+    $this->assertIdentical($expected, $renames);
 
     // Try to import the configuration. We expect an exception to be thrown
     // because the rename is for simple configuration.
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
index 9d3989cf18..0ecc38c181 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
@@ -351,7 +351,7 @@ public function testSecondaryUpdateDeletedDeleterFirst() {
       $name_deletee,
       $name_other,
     ];
-    $this->assertSame($expected, $updates);
+    $this->assertIdentical($expected, $updates);
 
     // Import.
     $this->configImporter->import();
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigInstallTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigInstallTest.php
index 9e473c29ff..8ba0ae1620 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigInstallTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigInstallTest.php
@@ -146,7 +146,7 @@ public function testCollectionInstallationCollections() {
     $this->assertEqual($collections, $active_storage->getAllCollectionNames());
     $collection_storage = $active_storage->createCollection('entity');
     $data = $collection_storage->read('config_test.dynamic.dotted.default');
-    $this->assertSame(['label' => 'entity'], $data);
+    $this->assertIdentical(['label' => 'entity'], $data);
 
     // Test that the config manager uninstalls configuration from collections
     // as expected.
@@ -185,7 +185,7 @@ public function testCollectionInstallationCollectionConfigEntity() {
     $data = $active_storage->read($name);
     $this->assertTrue(isset($data['uuid']));
     $data = $collection_storage->read($name);
-    $this->assertSame(['label' => 'entity'], $data);
+    $this->assertIdentical(['label' => 'entity'], $data);
   }
 
   /**
@@ -227,7 +227,7 @@ public function testDependencyChecking() {
     $this->assertTrue($entity, 'The config_test.dynamic.other_module_test_with_dependency configuration has been created during install.');
     // Ensure that dependencies can be added during module installation by
     // hooks.
-    $this->assertSame('config_install_dependency_test', $entity->getDependencies()['module'][0]);
+    $this->assertIdentical('config_install_dependency_test', $entity->getDependencies()['module'][0]);
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php
index 5ded4842b5..e2e02e1dc8 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php
@@ -40,7 +40,7 @@ protected function setUp() {
    */
   public function testSchemaMapping() {
     // Nonexistent configuration key will have Undefined as metadata.
-    $this->assertSame(FALSE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.no_such_key'));
+    $this->assertIdentical(FALSE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.no_such_key'));
     $definition = \Drupal::service('config.typed')->getDefinition('config_schema_test.no_such_key');
     $expected = [];
     $expected['label'] = 'Undefined';
@@ -51,12 +51,12 @@ public function testSchemaMapping() {
     $this->assertEqual($definition, $expected, 'Retrieved the right metadata for nonexistent configuration.');
 
     // Configuration file without schema will return Undefined as well.
-    $this->assertSame(FALSE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.noschema'));
+    $this->assertIdentical(FALSE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.noschema'));
     $definition = \Drupal::service('config.typed')->getDefinition('config_schema_test.noschema');
     $this->assertEqual($definition, $expected, 'Retrieved the right metadata for configuration with no schema.');
 
     // Configuration file with only some schema.
-    $this->assertSame(TRUE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.someschema'));
+    $this->assertIdentical(TRUE, \Drupal::service('config.typed')->hasConfigSchema('config_schema_test.someschema'));
     $definition = \Drupal::service('config.typed')->getDefinition('config_schema_test.someschema');
     $expected = [];
     $expected['label'] = 'Schema test data';
@@ -504,8 +504,8 @@ public function testSchemaFallback() {
 
     $definition2 = \Drupal::service('config.typed')->getDefinition('config_schema_test.wildcard_fallback.something.something');
     // This should be the schema of config_schema_test.wildcard_fallback.* as
-    // well.
-    $this->assertSame($definition, $definition2);
+    //well.
+    $this->assertIdentical($definition, $definition2);
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Config/Storage/ConfigStorageTestBase.php b/core/tests/Drupal/KernelTests/Core/Config/Storage/ConfigStorageTestBase.php
index 5bdbc74deb..54d0164178 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/Storage/ConfigStorageTestBase.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/Storage/ConfigStorageTestBase.php
@@ -189,7 +189,7 @@ public function testCollection() {
     $data = ['foo' => 'bar'];
     $result = $this->storage->write($name, $data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($data, $this->storage->read($name));
+    $this->assertIdentical($data, $this->storage->read($name));
 
     // Create configuration in a new collection.
     $new_storage = $this->storage->createCollection('collection.sub.new');
@@ -197,13 +197,13 @@ public function testCollection() {
     $this->assertEqual([], $new_storage->listAll());
     $new_storage->write($name, $data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($data, $new_storage->read($name));
+    $this->assertIdentical($data, $new_storage->read($name));
     $this->assertEqual([$name], $new_storage->listAll());
     $this->assertTrue($new_storage->exists($name));
     $new_data = ['foo' => 'baz'];
     $new_storage->write($name, $new_data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($new_data, $new_storage->read($name));
+    $this->assertIdentical($new_data, $new_storage->read($name));
 
     // Create configuration in another collection.
     $another_storage = $this->storage->createCollection('collection.sub.another');
@@ -211,7 +211,7 @@ public function testCollection() {
     $this->assertEqual([], $another_storage->listAll());
     $another_storage->write($name, $new_data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($new_data, $another_storage->read($name));
+    $this->assertIdentical($new_data, $another_storage->read($name));
     $this->assertEqual([$name], $another_storage->listAll());
     $this->assertTrue($another_storage->exists($name));
 
@@ -219,18 +219,18 @@ public function testCollection() {
     $alt_storage = $this->storage->createCollection('alternate');
     $alt_storage->write($name, $new_data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($new_data, $alt_storage->read($name));
+    $this->assertIdentical($new_data, $alt_storage->read($name));
 
     // Switch back to the collection-less mode and check the data still exists
     // add has not been touched.
-    $this->assertSame($data, $this->storage->read($name));
+    $this->assertIdentical($data, $this->storage->read($name));
 
     // Check that the getAllCollectionNames() method works.
-    $this->assertSame(['alternate', 'collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
+    $this->assertIdentical(['alternate', 'collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
 
     // Check that the collections are removed when they are empty.
     $alt_storage->delete($name);
-    $this->assertSame(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
+    $this->assertIdentical(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
 
     // Create configuration in collection called 'collection'. This ensures that
     // FileStorage's collection storage works regardless of its use of
@@ -240,19 +240,19 @@ public function testCollection() {
     $this->assertEqual([], $parent_storage->listAll());
     $parent_storage->write($name, $new_data);
     $this->assertIdentical($result, TRUE);
-    $this->assertSame($new_data, $parent_storage->read($name));
+    $this->assertIdentical($new_data, $parent_storage->read($name));
     $this->assertEqual([$name], $parent_storage->listAll());
     $this->assertTrue($parent_storage->exists($name));
-    $this->assertSame(['collection', 'collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
+    $this->assertIdentical(['collection', 'collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
     $parent_storage->deleteAll();
-    $this->assertSame(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
+    $this->assertIdentical(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
 
     // Check that the having an empty collection-less storage does not break
     // anything. Before deleting check that the previous delete did not affect
     // data in another collection.
-    $this->assertSame($data, $this->storage->read($name));
+    $this->assertIdentical($data, $this->storage->read($name));
     $this->storage->delete($name);
-    $this->assertSame(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
+    $this->assertIdentical(['collection.sub.another', 'collection.sub.new'], $this->storage->getAllCollectionNames());
   }
 
   abstract protected function read($name);
diff --git a/core/tests/Drupal/KernelTests/Core/Config/Storage/FileStorageTest.php b/core/tests/Drupal/KernelTests/Core/Config/Storage/FileStorageTest.php
index 805af8aedd..23bd5ea626 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/Storage/FileStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/Storage/FileStorageTest.php
@@ -68,8 +68,8 @@ public function testlistAll() {
     // @todo https://www.drupal.org/node/2666954 FileStorage::listAll() is
     //   case-sensitive. However, \Drupal\Core\Config\DatabaseStorage::listAll()
     //   is case-insensitive.
-    $this->assertSame(['system.performance'], $this->storage->listAll('system'), 'The FileStorage::listAll() with prefix works.');
-    $this->assertSame([], $this->storage->listAll('System'), 'The FileStorage::listAll() is case sensitive.');
+    $this->assertIdentical(['system.performance'], $this->storage->listAll('system'), 'The FileStorage::listAll() with prefix works.');
+    $this->assertIdentical([], $this->storage->listAll('System'), 'The FileStorage::listAll() is case sensitive.');
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Database/CaseSensitivityTest.php b/core/tests/Drupal/KernelTests/Core/Database/CaseSensitivityTest.php
index abd9d4c07d..c3e766fab4 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/CaseSensitivityTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/CaseSensitivityTest.php
@@ -23,7 +23,7 @@ public function testCaseSensitiveInsert() {
       ->execute();
 
     $num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
-    $this->assertSame($num_records_before + 1, (int) $num_records_after, 'Record inserts correctly.');
+    $this->assertIdentical($num_records_before + 1, (int) $num_records_after, 'Record inserts correctly.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'john'])->fetchField();
     $this->assertIdentical($saved_age, '2', 'Can retrieve after inserting.');
   }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php b/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php
index e195f36f08..e95afe0387 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php
@@ -32,18 +32,18 @@ public function testConnectionRouting() {
     // Try to open those targets another time, that should return the same objects.
     $db1b = Database::getConnection('default', 'default');
     $db2b = Database::getConnection('replica', 'default');
-    $this->assertSame($db1, $db1b, 'A second call to getConnection() returns the same object.');
-    $this->assertSame($db2, $db2b, 'A second call to getConnection() returns the same object.');
+    $this->assertIdentical($db1, $db1b, 'A second call to getConnection() returns the same object.');
+    $this->assertIdentical($db2, $db2b, 'A second call to getConnection() returns the same object.');
 
     // Try to open an unknown target.
     $unknown_target = $this->randomMachineName();
     $db3 = Database::getConnection($unknown_target, 'default');
     $this->assertNotNull($db3, 'Opening an unknown target returns a real connection object.');
-    $this->assertSame($db1, $db3, 'An unknown target opens the default connection.');
+    $this->assertIdentical($db1, $db3, 'An unknown target opens the default connection.');
 
     // Try to open that unknown target another time, that should return the same object.
     $db3b = Database::getConnection($unknown_target, 'default');
-    $this->assertSame($db3, $db3b, 'A second call to getConnection() returns the same object.');
+    $this->assertIdentical($db3, $db3b, 'A second call to getConnection() returns the same object.');
   }
 
   /**
@@ -61,7 +61,7 @@ public function testConnectionRoutingOverride() {
     $db1 = Database::getConnection('default', 'default');
     $db2 = Database::getConnection('replica', 'default');
 
-    $this->assertSame($db1, $db2, 'Both targets refer to the same connection.');
+    $this->assertIdentical($db1, $db2, 'Both targets refer to the same connection.');
   }
 
   /**
@@ -131,7 +131,7 @@ public function testMultipleStatementsForNewPhp() {
     try {
       $db->query('SELECT * FROM {test}; SELECT * FROM {test_people}',
         [],
-        ['allow_delimiter_in_query' => TRUE ]
+        [ 'allow_delimiter_in_query' => TRUE ]
       );
       $this->fail('No PDO exception thrown for multiple statements.');
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/InsertDefaultsTest.php b/core/tests/Drupal/KernelTests/Core/Database/InsertDefaultsTest.php
index b5963cf420..5b6c03e927 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/InsertDefaultsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/InsertDefaultsTest.php
@@ -40,7 +40,7 @@ public function testDefaultEmptyInsert() {
     }
 
     $num_records_after = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
-    $this->assertSame($num_records_before, $num_records_after, 'Do nothing as no fields are specified.');
+    $this->assertIdentical($num_records_before, $num_records_after, 'Do nothing as no fields are specified.');
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Database/InsertTest.php b/core/tests/Drupal/KernelTests/Core/Database/InsertTest.php
index dc5f075a5e..1c2c21df82 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/InsertTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/InsertTest.php
@@ -26,7 +26,7 @@ public function testSimpleInsert() {
     $query->execute();
 
     $num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
-    $this->assertSame($num_records_before + 1, (int) $num_records_after, 'Record inserts correctly.');
+    $this->assertIdentical($num_records_before + 1, (int) $num_records_after, 'Record inserts correctly.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Yoko'])->fetchField();
     $this->assertIdentical($saved_age, '29', 'Can retrieve after inserting.');
   }
@@ -61,7 +61,7 @@ public function testMultiInsert() {
     $query->execute();
 
     $num_records_after = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
-    $this->assertSame($num_records_before + 3, $num_records_after, 'Record inserts correctly.');
+    $this->assertIdentical($num_records_before + 3, $num_records_after, 'Record inserts correctly.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Larry'])->fetchField();
     $this->assertIdentical($saved_age, '30', 'Can retrieve after inserting.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Curly'])->fetchField();
@@ -103,7 +103,7 @@ public function testRepeatedInsert() {
     $query->execute();
 
     $num_records_after = db_query('SELECT COUNT(*) FROM {test}')->fetchField();
-    $this->assertSame((int) $num_records_before + 3, (int) $num_records_after, 'Record inserts correctly.');
+    $this->assertIdentical((int) $num_records_before + 3, (int) $num_records_after, 'Record inserts correctly.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Larry'])->fetchField();
     $this->assertIdentical($saved_age, '30', 'Can retrieve after inserting.');
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Curly'])->fetchField();
diff --git a/core/tests/Drupal/KernelTests/Core/Database/LoggingTest.php b/core/tests/Drupal/KernelTests/Core/Database/LoggingTest.php
index 28d9ff2bd8..0216d3ed56 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/LoggingTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/LoggingTest.php
@@ -64,7 +64,7 @@ public function testEnableTargetLogging() {
 
     db_query('SELECT name FROM {test} WHERE age > :age', [':age' => 25])->fetchCol();
 
-    db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'], ['target' => 'replica'])->fetchCol();
+    db_query('SELECT age FROM {test} WHERE name = :name', [':name' => 'Ringo'], ['target' => 'replica']);//->fetchCol();
 
     $queries1 = Database::getLog('testing1');
 
diff --git a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
index 66eed0ae92..db4c7deda6 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
@@ -30,31 +30,31 @@ public function testRegression_310447() {
       ])->execute();
 
     $from_database = db_query('SELECT job FROM {test} WHERE job = :job', [':job' => $job])->fetchField();
-    $this->assertSame($job, $from_database, 'The database handles UTF-8 characters cleanly.');
+    $this->assertIdentical($job, $from_database, 'The database handles UTF-8 characters cleanly.');
   }
 
   /**
    * Tests the db_table_exists() function.
    */
   public function testDBTableExists() {
-    $this->assertSame(TRUE, db_table_exists('test'), 'Returns true for existent table.');
-    $this->assertSame(FALSE, db_table_exists('nosuchtable'), 'Returns false for nonexistent table.');
+    $this->assertIdentical(TRUE, db_table_exists('test'), 'Returns true for existent table.');
+    $this->assertIdentical(FALSE, db_table_exists('nosuchtable'), 'Returns false for nonexistent table.');
   }
 
   /**
    * Tests the db_field_exists() function.
    */
   public function testDBFieldExists() {
-    $this->assertSame(TRUE, db_field_exists('test', 'name'), 'Returns true for existent column.');
-    $this->assertSame(FALSE, db_field_exists('test', 'nosuchcolumn'), 'Returns false for nonexistent column.');
+    $this->assertIdentical(TRUE, db_field_exists('test', 'name'), 'Returns true for existent column.');
+    $this->assertIdentical(FALSE, db_field_exists('test', 'nosuchcolumn'), 'Returns false for nonexistent column.');
   }
 
   /**
    * Tests the db_index_exists() function.
    */
   public function testDBIndexExists() {
-    $this->assertSame(TRUE, db_index_exists('test', 'ages'), 'Returns true for existent index.');
-    $this->assertSame(FALSE, db_index_exists('test', 'nosuchindex'), 'Returns false for nonexistent index.');
+    $this->assertIdentical(TRUE, db_index_exists('test', 'ages'), 'Returns true for existent index.');
+    $this->assertIdentical(FALSE, db_index_exists('test', 'nosuchindex'), 'Returns false for nonexistent index.');
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php b/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
index 3472e2bc4b..0d332d0314 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
@@ -496,7 +496,8 @@ public function testRegexCondition() {
     ];
     $test_groups[] = [
       'regex' => '#Singer',
-      'expected' => [],
+      'expected' => [
+      ],
     ];
 
     foreach ($test_groups as $test_group) {
diff --git a/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php b/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php
index b5cb96b8cc..722bdd2451 100644
--- a/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php
+++ b/core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php
@@ -137,7 +137,7 @@ public function testCompileDIC() {
     // Check that the container itself is not among the persist IDs because it
     // does not make sense to persist the container itself.
     $persist_ids = $container->getParameter('persist_ids');
-    $this->assertSame(FALSE, array_search('service_container', $persist_ids));
+    $this->assertIdentical(FALSE, array_search('service_container', $persist_ids));
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
index 56050a7dc4..87ba10480f 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
@@ -572,33 +572,6 @@ public function testDotted() {
       ->condition('*.level1.level2', 41)
       ->execute();
     $this->assertResults([]);
-    // Make sure that "IS NULL" and "IS NOT NULL" work correctly with
-    // array-valued fields/keys.
-    $all = ['1', '2', '3', '4', '5'];
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->exists('array.level1.level2')
-      ->execute();
-    $this->assertResults($all);
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->exists('array.level1')
-      ->execute();
-    $this->assertResults($all);
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->exists('array')
-      ->execute();
-    $this->assertResults($all);
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->notExists('array.level1.level2')
-      ->execute();
-    $this->assertResults([]);
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->notExists('array.level1')
-      ->execute();
-    $this->assertResults([]);
-    $this->queryResults = $this->factory->get('config_query_test')
-      ->notExists('array')
-      ->execute();
-    $this->assertResults([]);
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNullStorageTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNullStorageTest.php
index 6da9bb3baa..697f1be15d 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNullStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNullStorageTest.php
@@ -30,10 +30,10 @@ class ContentEntityNullStorageTest extends KernelTestBase {
    * @see \Drupal\Core\Entity\Query\Null\Query
    */
   public function testEntityQuery() {
-    $this->assertSame(0, \Drupal::entityQuery('contact_message')->count()->execute(), 'Counting a null storage returns 0.');
-    $this->assertSame([], \Drupal::entityQuery('contact_message')->execute(), 'Querying a null storage returns an empty array.');
-    $this->assertSame([], \Drupal::entityQuery('contact_message')->condition('contact_form', 'test')->execute(), 'Querying a null storage returns an empty array and conditions are ignored.');
-    $this->assertSame([], \Drupal::entityQueryAggregate('contact_message')->aggregate('name', 'AVG')->execute(), 'Aggregate querying a null storage returns an empty array');
+    $this->assertIdentical(0, \Drupal::entityQuery('contact_message')->count()->execute(), 'Counting a null storage returns 0.');
+    $this->assertIdentical([], \Drupal::entityQuery('contact_message')->execute(), 'Querying a null storage returns an empty array.');
+    $this->assertIdentical([], \Drupal::entityQuery('contact_message')->condition('contact_form', 'test')->execute(), 'Querying a null storage returns an empty array and conditions are ignored.');
+    $this->assertIdentical([], \Drupal::entityQueryAggregate('contact_message')->aggregate('name', 'AVG')->execute(), 'Aggregate querying a null storage returns an empty array');
 
   }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/CreateSampleEntityTest.php b/core/tests/Drupal/KernelTests/Core/Entity/CreateSampleEntityTest.php
deleted file mode 100644
index b5bcd487f2..0000000000
--- a/core/tests/Drupal/KernelTests/Core/Entity/CreateSampleEntityTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests\Core\Entity;
-
-use Drupal\Core\Entity\FieldableEntityInterface;
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\node\Entity\NodeType;
-use Drupal\taxonomy\Entity\Vocabulary;
-
-/**
- * Tests the ContentEntityStorageBase::createWithSampleValues method.
- *
- * @coversDefaultClass \Drupal\Core\Entity\ContentEntityStorageBase
- * @group Entity
- */
-class CreateSampleEntityTest extends KernelTestBase {
-
-  /**
-   * The entity type manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static $modules = ['system', 'field', 'filter', 'text', 'file', 'user', 'node', 'comment', 'taxonomy'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setup();
-
-    $this->installEntitySchema('file');
-    $this->installEntitySchema('user');
-    $this->installEntitySchema('node');
-    $this->installEntitySchema('node_type');
-    $this->installEntitySchema('file');
-    $this->installEntitySchema('comment');
-    $this->installEntitySchema('comment_type');
-    $this->installEntitySchema('taxonomy_vocabulary');
-    $this->installEntitySchema('taxonomy_term');
-    $this->entityTypeManager = $this->container->get('entity_type.manager');
-    NodeType::create(['type' => 'article', 'name' => 'Article'])->save();
-    NodeType::create(['type' => 'page', 'name' => 'Page'])->save();
-    Vocabulary::create(['name' => 'Tags', 'vid' => 'tags'])->save();
-  }
-
-  /**
-   * Tests sample value content entity creation of all types.
-   *
-   * @covers ::createWithSampleValues
-   */
-  public function testSampleValueContentEntity() {
-    foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $definition) {
-      if ($definition->entityClassImplements(FieldableEntityInterface::class)) {
-        $label = $definition->getKey('label');
-        $values = [];
-        if ($label) {
-          $title = $this->randomString();
-          $values[$label] = $title;
-        }
-        // Create sample entities with bundles.
-        if ($bundle_type = $definition->getBundleEntityType()) {
-          foreach ($this->entityTypeManager->getStorage($bundle_type)->loadMultiple() as $bundle) {
-            $entity = $this->entityTypeManager->getStorage($entity_type_id)->createWithSampleValues($bundle->id(), $values);
-            $violations = $entity->validate();
-            $this->assertCount(0, $violations);
-            if ($label) {
-              $this->assertEquals($title, $entity->label());
-            }
-          }
-        }
-        // Create sample entities without bundles.
-        else {
-          $entity = $this->entityTypeManager->getStorage($entity_type_id)->createWithSampleValues(FALSE, $values);
-          $violations = $entity->validate();
-          $this->assertCount(0, $violations);
-          if ($label) {
-            $this->assertEquals($title, $entity->label());
-          }
-        }
-      }
-    }
-  }
-
-}
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php b/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php
index c18910e21d..5d7ea0eb8e 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php
@@ -179,12 +179,12 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
+  public function submitForm(array &$form, FormStateInterface $form_state) { }
 
   /**
    * {@inheritdoc}
    */
-  public function validateForm(array &$form, FormStateInterface $form_state) {}
+  public function validateForm(array &$form, FormStateInterface $form_state) { }
 
   /**
    * Tests valid entries in the EntityAutocomplete Form API element.
@@ -353,7 +353,7 @@ public function testEntityAutocompleteAccess() {
   public function testEntityAutocompleteIdInput() {
     /** @var \Drupal\Core\Form\FormBuilderInterface $form_builder */
     $form_builder = $this->container->get('form_builder');
-    // $form = $form_builder->getForm($this);
+    //$form = $form_builder->getForm($this);
     $form_state = (new FormState())
       ->setMethod('GET')
       ->setValues([
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
index b3af27fba2..d7644b2059 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
@@ -9,9 +9,7 @@
 use Drupal\Core\Session\AnonymousUserSession;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\entity_test\Entity\EntityTestDefaultAccess;
-use Drupal\entity_test\Entity\EntityTestNoUuid;
 use Drupal\entity_test\Entity\EntityTestLabel;
-use Drupal\entity_test\Entity\EntityTestRev;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\user\Entity\User;
 
@@ -22,16 +20,6 @@
  */
 class EntityAccessControlHandlerTest extends EntityLanguageTestBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('entity_test_no_uuid');
-    $this->installEntitySchema('entity_test_rev');
-  }
-
   /**
    * Asserts entity access correctly grants or denies access.
    */
@@ -211,64 +199,6 @@ public function testEntityTranslationAccess() {
     ], $translation);
   }
 
-  /**
-   * Ensures the static access cache works correctly in the absence of an UUID.
-   *
-   * @see entity_test_entity_access()
-   */
-  public function testEntityWithoutUuidAccessCache() {
-    $account = $this->createUser();
-
-    $entity1 = EntityTestNoUuid::create([
-      'name' => 'Accessible',
-    ]);
-    $entity1->save();
-
-    $entity2 = EntityTestNoUuid::create([
-      'name' => 'Inaccessible',
-    ]);
-    $entity2->save();
-
-    $this->assertTrue($entity1->access('delete', $account), 'Entity 1 can be deleted.');
-    $this->assertFalse($entity2->access('delete', $account), 'Entity 2 CANNOT be deleted.');
-
-    $entity1
-      ->setName('Inaccessible')
-      ->setNewRevision();
-    $entity1->save();
-
-    $this->assertFalse($entity1->access('delete', $account), 'Entity 1 revision 2 CANNOT be deleted.');
-  }
-
-  /**
-   * Ensures the static access cache works correctly with a UUID and revisions.
-   *
-   * @see entity_test_entity_access()
-   */
-  public function testEntityWithUuidAccessCache() {
-    $account = $this->createUser();
-
-    $entity1 = EntityTestRev::create([
-      'name' => 'Accessible',
-    ]);
-    $entity1->save();
-
-    $entity2 = EntityTestRev::create([
-      'name' => 'Inaccessible',
-    ]);
-    $entity2->save();
-
-    $this->assertTrue($entity1->access('delete', $account), 'Entity 1 can be deleted.');
-    $this->assertFalse($entity2->access('delete', $account), 'Entity 2 CANNOT be deleted.');
-
-    $entity1
-      ->setName('Inaccessible')
-      ->setNewRevision();
-    $entity1->save();
-
-    $this->assertFalse($entity1->access('delete', $account), 'Entity 1 revision 2 CANNOT be deleted.');
-  }
-
   /**
    * Tests hook invocations.
    */
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
index 7d7ea76e90..a066616f63 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
@@ -115,7 +115,7 @@ public function testEntityTypeUpdateWithoutData() {
         t('The %field_name field needs to be installed.', ['%field_name' => 'Revision ID']),
       ],
     ];
-    $this->assertEqual($this->entityDefinitionUpdateManager->getChangeSummary(), $expected); // , 'EntityDefinitionUpdateManager reports the expected change summary.');
+    $this->assertEqual($this->entityDefinitionUpdateManager->getChangeSummary(), $expected); //, 'EntityDefinitionUpdateManager reports the expected change summary.');
 
     // Run the update and ensure the revision table is created.
     $this->entityDefinitionUpdateManager->applyUpdates();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
index 31b1f9e9e9..e0bf6551ff 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
@@ -16,7 +16,6 @@
 use Drupal\Core\TypedData\ListInterface;
 use Drupal\Core\TypedData\Type\StringInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
-use Drupal\entity_test\Entity\EntityTestComputedField;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
 
@@ -472,30 +471,30 @@ protected function doTestIntrospection($entity_type) {
 
     // Make sure provided contextual information is right.
     $entity_adapter = $entity->getTypedData();
-    $this->assertSame($entity_adapter->getRoot(), $entity_adapter, 'Entity is root object.');
+    $this->assertIdentical($entity_adapter->getRoot(), $entity_adapter, 'Entity is root object.');
     $this->assertEqual($entity_adapter->getPropertyPath(), '');
     $this->assertEqual($entity_adapter->getName(), '');
     $this->assertEqual($entity_adapter->getParent(), NULL);
 
     $field = $entity->user_id;
-    $this->assertSame($field->getRoot()->getValue(), $entity, 'Entity is root object.');
-    $this->assertSame($field->getEntity(), $entity, 'getEntity() returns the entity.');
+    $this->assertIdentical($field->getRoot()->getValue(), $entity, 'Entity is root object.');
+    $this->assertIdentical($field->getEntity(), $entity, 'getEntity() returns the entity.');
     $this->assertEqual($field->getPropertyPath(), 'user_id');
     $this->assertEqual($field->getName(), 'user_id');
-    $this->assertSame($field->getParent()->getValue(), $entity, 'Parent object matches.');
+    $this->assertIdentical($field->getParent()->getValue(), $entity, 'Parent object matches.');
 
     $field_item = $field[0];
-    $this->assertSame($field_item->getRoot()->getValue(), $entity, 'Entity is root object.');
-    $this->assertSame($field_item->getEntity(), $entity, 'getEntity() returns the entity.');
+    $this->assertIdentical($field_item->getRoot()->getValue(), $entity, 'Entity is root object.');
+    $this->assertIdentical($field_item->getEntity(), $entity, 'getEntity() returns the entity.');
     $this->assertEqual($field_item->getPropertyPath(), 'user_id.0');
     $this->assertEqual($field_item->getName(), '0');
-    $this->assertSame($field_item->getParent(), $field, 'Parent object matches.');
+    $this->assertIdentical($field_item->getParent(), $field, 'Parent object matches.');
 
     $item_value = $field_item->get('entity');
-    $this->assertSame($item_value->getRoot()->getValue(), $entity, 'Entity is root object.');
+    $this->assertIdentical($item_value->getRoot()->getValue(), $entity, 'Entity is root object.');
     $this->assertEqual($item_value->getPropertyPath(), 'user_id.0.entity');
     $this->assertEqual($item_value->getName(), 'entity');
-    $this->assertSame($item_value->getParent(), $field_item, 'Parent object matches.');
+    $this->assertIdentical($item_value->getParent(), $field_item, 'Parent object matches.');
   }
 
   /**
@@ -738,16 +737,6 @@ public function testComputedProperties() {
     }
   }
 
-  /**
-   * Test computed fields.
-   */
-  public function testComputedFields() {
-    \Drupal::state()->set('entity_test_computed_field_item_list_value', ['foo computed']);
-
-    $entity = EntityTestComputedField::create([]);
-    $this->assertEquals($entity->computed_string_field->value, 'foo computed');
-  }
-
   /**
    * Executes the computed properties tests for the given entity type.
    *
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
index ec33f67e87..043036912b 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
@@ -7,7 +7,6 @@
 use Drupal\entity_test\Entity\EntityTestMulRev;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\taxonomy\Entity\Term;
 use Drupal\taxonomy\Entity\Vocabulary;
@@ -20,8 +19,6 @@
  */
 class EntityQueryTest extends EntityKernelTestBase {
 
-  use EntityReferenceTestTrait;
-
   /**
    * Modules to enable.
    *
@@ -97,27 +94,23 @@ protected function setUp() {
     }
     // Each unit is a list of field name, langcode and a column-value array.
     $units[] = [$figures, 'en', [
-        'color' => 'red',
-        'shape' => 'triangle',
-      ],
-    ];
+      'color' => 'red',
+      'shape' => 'triangle',
+    ]];
     $units[] = [$figures, 'en', [
-        'color' => 'blue',
-        'shape' => 'circle',
-      ],
-    ];
+      'color' => 'blue',
+      'shape' => 'circle',
+    ]];
     // To make it easier to test sorting, the greetings get formats according
     // to their langcode.
     $units[] = [$greetings, 'tr', [
-        'value' => 'merhaba',
-        'format' => 'format-tr',
-      ],
-    ];
+      'value' => 'merhaba',
+      'format' => 'format-tr'
+    ]];
     $units[] = [$greetings, 'pl', [
-        'value' => 'siema',
-        'format' => 'format-pl',
-      ],
-    ];
+      'value' => 'siema',
+      'format' => 'format-pl'
+    ]];
     // Make these languages available to the greetings field.
     ConfigurableLanguage::createFromLangcode('tr')->save();
     ConfigurableLanguage::createFromLangcode('pl')->save();
@@ -873,8 +866,7 @@ public function testBaseFieldMultipleColumns() {
       'description' => [
         'value' => $this->randomString(),
         'format' => 'format1',
-      ],
-    ]);
+      ]]);
     $term1->save();
 
     $term2 = Term::create([
@@ -883,8 +875,7 @@ public function testBaseFieldMultipleColumns() {
       'description' => [
         'value' => $this->randomString(),
         'format' => 'format2',
-      ],
-    ]);
+      ]]);
     $term2->save();
 
     $ids = \Drupal::entityQuery('taxonomy_term')
@@ -955,54 +946,4 @@ public function testInjectionInCondition() {
     }
   }
 
-  /**
-   * Tests that EntityQuery works when querying the same entity from two fields.
-   */
-  public function testWithTwoEntityReferenceFieldsToSameEntityType() {
-    // Create two entity reference fields referring 'entity_test' entities.
-    $this->createEntityReferenceField('entity_test', 'entity_test', 'ref1', $this->randomMachineName(), 'entity_test');
-    $this->createEntityReferenceField('entity_test', 'entity_test', 'ref2', $this->randomMachineName(), 'entity_test');
-
-    // Create two entities to be referred.
-    $ref1 = EntityTest::create(['type' => 'entity_test']);
-    $ref1->save();
-    $ref2 = EntityTest::create(['type' => 'entity_test']);
-    $ref2->save();
-
-    // Create a main entity referring the previous created entities.
-    $entity = EntityTest::create([
-      'type' => 'entity_test',
-      'ref1' => $ref1->id(),
-      'ref2' => $ref2->id(),
-    ]);
-    $entity->save();
-
-    // Check that works when referring with "{$field_name}".
-    $result = $this->factory->get('entity_test')
-      ->condition('type', 'entity_test')
-      ->condition('ref1', $ref1->id())
-      ->condition('ref2', $ref2->id())
-      ->execute();
-    $this->assertCount(1, $result);
-    $this->assertEquals($entity->id(), reset($result));
-
-    // Check that works when referring with "{$field_name}.target_id".
-    $result = $this->factory->get('entity_test')
-      ->condition('type', 'entity_test')
-      ->condition('ref1.target_id', $ref1->id())
-      ->condition('ref2.target_id', $ref2->id())
-      ->execute();
-    $this->assertCount(1, $result);
-    $this->assertEquals($entity->id(), reset($result));
-
-    // Check that works when referring with "{$field_name}.entity.id".
-    $result = $this->factory->get('entity_test')
-      ->condition('type', 'entity_test')
-      ->condition('ref1.entity.id', $ref1->id())
-      ->condition('ref2.entity.id', $ref2->id())
-      ->execute();
-    $this->assertCount(1, $result);
-    $this->assertEquals($entity->id(), reset($result));
-  }
-
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php
index b2c72b99d9..eb13d0e491 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php
@@ -96,11 +96,13 @@ public function testSort() {
     $selection_options = [
       'target_type' => 'node',
       'handler' => 'default',
-      'target_bundles' => NULL,
-      // Add sorting.
-      'sort' => [
-        'field' => 'field_text.value',
-        'direction' => 'DESC',
+      'handler_settings' => [
+        'target_bundles' => NULL,
+        // Add sorting.
+        'sort' => [
+          'field' => 'field_text.value',
+          'direction' => 'DESC',
+        ],
       ],
     ];
     $handler = $this->container->get('plugin.manager.entity_reference_selection')->getInstance($selection_options);
@@ -115,7 +117,7 @@ public function testSort() {
     $this->assertIdentical($result['article'], $expected_result, 'Query sorted by field returned expected values.');
 
     // Assert sort by base field.
-    $selection_options['sort'] = [
+    $selection_options['handler_settings']['sort'] = [
       'field' => 'nid',
       'direction' => 'ASC',
     ];
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
index bcd702ae02..fe8bcc015d 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php
@@ -341,12 +341,12 @@ protected function doTestEntityTranslationAPI($entity_type) {
     // retrieve a translation referring to it.
     $translation = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED);
     $this->assertFalse($translation->isNewTranslation(), 'Existing translations are not marked as new.');
-    $this->assertSame($entity, $translation, 'The translation object corresponding to a non-default language is the entity object itself when the entity is language-neutral.');
+    $this->assertIdentical($entity, $translation, 'The translation object corresponding to a non-default language is the entity object itself when the entity is language-neutral.');
     $entity->{$langcode_key}->value = $default_langcode;
     $translation = $entity->getTranslation($default_langcode);
-    $this->assertSame($entity, $translation, 'The translation object corresponding to the default language (explicit) is the entity object itself.');
+    $this->assertIdentical($entity, $translation, 'The translation object corresponding to the default language (explicit) is the entity object itself.');
     $translation = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT);
-    $this->assertSame($entity, $translation, 'The translation object corresponding to the default language (implicit) is the entity object itself.');
+    $this->assertIdentical($entity, $translation, 'The translation object corresponding to the default language (implicit) is the entity object itself.');
     $this->assertTrue($entity->{$default_langcode_key}->value, 'The translation object is the default one.');
 
     // Verify that trying to retrieve a translation for a locked language when
@@ -657,7 +657,7 @@ protected function doTestLanguageFallback($entity_type) {
     $translation = $this->entityManager->getTranslationFromContext($entity2, $default_langcode);
     $translation_build = $controller->view($translation);
     $translation_output = (string) $renderer->renderRoot($translation_build);
-    $this->assertSame($entity2_output, $translation_output, 'When the entity has no translation no fallback is applied.');
+    $this->assertIdentical($entity2_output, $translation_output, 'When the entity has no translation no fallback is applied.');
 
     // Checks that entity translations are rendered properly.
     $controller = $this->entityManager->getViewBuilder($entity_type);
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php
index a58b47c1ce..51286be3ca 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php
@@ -41,7 +41,7 @@ public function testConstraintDefinition() {
     $this->assertEqual($default_constraints + $extra_constraints, $entity_type->getConstraints());
 
     // Test altering constraints.
-    $altered_constraints = ['Test' => ['some_setting' => TRUE]];
+    $altered_constraints = ['Test' => [ 'some_setting' => TRUE]];
     $this->state->set('entity_test_constraints.alter', $altered_constraints);
     // Clear the cache in state instance in the Drupal container, so it can pick
     // up the modified value.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
index 3f182c91e8..a365ea5809 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
@@ -3,15 +3,6 @@
 namespace Drupal\KernelTests\Core\Entity;
 
 use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\entity_test\Entity\EntityTest;
-use Drupal\field\Entity\FieldConfig;
-use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
-use Drupal\node\Entity\Node;
-use Drupal\node\NodeInterface;
-use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
-use Drupal\user\Entity\Role;
-use Drupal\user\Entity\User;
 
 /**
  * Tests validation constraints for ValidReferenceConstraintValidator.
@@ -20,9 +11,6 @@
  */
 class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase {
 
-  use EntityReferenceTestTrait;
-  use ContentTypeCreationTrait;
-
   /**
    * The typed data manager to use.
    *
@@ -33,7 +21,7 @@ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['field', 'node', 'user'];
+  public static $modules = ['field', 'user'];
 
   /**
    * {@inheritdoc}
@@ -41,12 +29,7 @@ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase {
   protected function setUp() {
     parent::setUp();
     $this->installSchema('user', ['users_data']);
-    $this->installSchema('node', ['node_access']);
-    $this->installConfig('node');
     $this->typedData = $this->container->get('typed_data_manager');
-
-    $this->createContentType(['type' => 'article', 'name' => 'Article']);
-    $this->createContentType(['type' => 'page', 'name' => 'Basic page']);
   }
 
   /**
@@ -83,152 +66,4 @@ public function testValidation() {
     $this->assertEqual($violation->getRoot(), $typed_data, 'Violation root is correct.');
   }
 
-  /**
-   * Tests the validation of pre-existing items in an entity reference field.
-   */
-  public function testPreExistingItemsValidation() {
-    // Create two types of users, with and without access to bypass content
-    // access.
-    /** @var \Drupal\user\RoleInterface $role_with_access */
-    $role_with_access = Role::create(['id' => 'role_with_access']);
-    $role_with_access->grantPermission('access content');
-    $role_with_access->grantPermission('bypass node access');
-    $role_with_access->save();
-
-    /** @var \Drupal\user\RoleInterface $role_without_access */
-    $role_without_access = Role::create(['id' => 'role_without_access']);
-    $role_without_access->grantPermission('access content');
-    $role_without_access->save();
-
-    $user_with_access = User::create(['roles' => ['role_with_access']]);
-    $user_without_access = User::create(['roles' => ['role_without_access']]);
-
-    // Add an entity reference field.
-    $this->createEntityReferenceField(
-      'entity_test',
-      'entity_test',
-      'field_test',
-      'Field test',
-      'node',
-      'default',
-      ['target_bundles' => ['article', 'page']],
-      FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED
-    );
-
-    // Create four test nodes.
-    $published_node = Node::create([
-      'title' => 'Test published node',
-      'type' => 'article',
-      'status' => NodeInterface::PUBLISHED,
-    ]);
-    $published_node->save();
-
-    $unpublished_node = Node::create([
-      'title' => 'Test unpublished node',
-      'type' => 'article',
-      'status' => NodeInterface::NOT_PUBLISHED,
-    ]);
-    $unpublished_node->save();
-
-    $different_bundle_node = Node::create([
-      'title' => 'Test page node',
-      'type' => 'page',
-      'status' => NodeInterface::PUBLISHED,
-    ]);
-    $different_bundle_node->save();
-
-    $deleted_node = Node::create([
-      'title' => 'Test deleted node',
-      'type' => 'article',
-      'status' => NodeInterface::PUBLISHED,
-    ]);
-    $deleted_node->save();
-
-    $referencing_entity = EntityTest::create([
-      'field_test' => [
-        ['entity' => $published_node],
-        ['entity' => $unpublished_node],
-        ['entity' => $different_bundle_node],
-        ['entity' => $deleted_node],
-      ]
-    ]);
-
-    // Check that users with access are able pass the validation for fields
-    // without pre-existing content.
-    $this->container->get('account_switcher')->switchTo($user_with_access);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(0, $violations);
-
-    // Check that users without access are not able pass the validation for
-    // fields without pre-existing content.
-    $this->container->get('account_switcher')->switchTo($user_without_access);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(1, $violations);
-    $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [
-      '%type' => 'node',
-      '%id' => $unpublished_node->id(),
-    ]), $violations[0]->getMessage());
-
-    // Now save the referencing entity which will create a pre-existing state
-    // for it and repeat the checks. This time, the user without access should
-    // be able to pass the validation as well because it's not changing the
-    // pre-existing state.
-    $referencing_entity->save();
-
-    $this->container->get('account_switcher')->switchTo($user_with_access);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(0, $violations);
-
-    // Check that users without access are able pass the validation for fields
-    // with pre-existing content.
-    $this->container->get('account_switcher')->switchTo($user_without_access);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(0, $violations);
-
-    // Re-save the referencing entity and check that the referenced entity is
-    // not affected.
-    $referencing_entity->name->value = $this->randomString();
-    $referencing_entity->save();
-    $this->assertEquals($published_node->id(), $referencing_entity->field_test[0]->target_id);
-    $this->assertEquals($unpublished_node->id(), $referencing_entity->field_test[1]->target_id);
-    $this->assertEquals($different_bundle_node->id(), $referencing_entity->field_test[2]->target_id);
-    $this->assertEquals($deleted_node->id(), $referencing_entity->field_test[3]->target_id);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(0, $violations);
-
-    // Remove one of the referencable bundles and check that a pre-existing node
-    // of that bundle can not be referenced anymore.
-    $field = FieldConfig::loadByName('entity_test', 'entity_test', 'field_test');
-    $field->setSetting('handler_settings', ['target_bundles' => ['article']]);
-    $field->save();
-    $referencing_entity = $this->reloadEntity($referencing_entity);
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(1, $violations);
-    $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [
-      '%type' => 'node',
-      '%id' => $different_bundle_node->id(),
-    ]), $violations[0]->getMessage());
-
-    // Delete the last node and check that the pre-existing reference is not
-    // valid anymore.
-    $deleted_node->delete();
-
-    $violations = $referencing_entity->field_test->validate();
-    $this->assertCount(2, $violations);
-    $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [
-      '%type' => 'node',
-      '%id' => $different_bundle_node->id(),
-    ]), $violations[0]->getMessage());
-    $this->assertEquals(t('The referenced entity (%type: %id) does not exist.', [
-      '%type' => 'node',
-      '%id' => $deleted_node->id(),
-    ]), $violations[1]->getMessage());
-  }
-
 }
diff --git a/core/tests/Drupal/KernelTests/Core/EventSubscriber/IgnoreReplicaSubscriberTest.php b/core/tests/Drupal/KernelTests/Core/EventSubscriber/IgnoreReplicaSubscriberTest.php
index 7ce994a944..4206ceab8e 100644
--- a/core/tests/Drupal/KernelTests/Core/EventSubscriber/IgnoreReplicaSubscriberTest.php
+++ b/core/tests/Drupal/KernelTests/Core/EventSubscriber/IgnoreReplicaSubscriberTest.php
@@ -37,7 +37,7 @@ public function testSystemInitIgnoresSecondaries() {
     $db1 = Database::getConnection('default', 'default');
     $db2 = Database::getConnection('replica', 'default');
 
-    $this->assertSame($db1, $db2, 'System Init ignores secondaries when requested.');
+    $this->assertIdentical($db1, $db2, 'System Init ignores secondaries when requested.');
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Field/FieldSettingsTest.php b/core/tests/Drupal/KernelTests/Core/Field/FieldSettingsTest.php
index 590a96cd5f..583e55b7c4 100644
--- a/core/tests/Drupal/KernelTests/Core/Field/FieldSettingsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Field/FieldSettingsTest.php
@@ -46,34 +46,6 @@ public function testBaseFieldSettings() {
     $this->assertEqual($base_field->getSettings(), $expected_settings);
   }
 
-  /**
-   * Tests the base field settings on a cloned base field definition object.
-   */
-  public function testBaseFieldSettingsOnClone() {
-    $base_field = BaseFieldDefinition::create('test_field');
-
-    // Check that the default settings have been populated.
-    $expected_settings = [
-      'test_field_storage_setting' => 'dummy test string',
-      'changeable' => 'a changeable field storage setting',
-      'unchangeable' => 'an unchangeable field storage setting',
-      'translatable_storage_setting' => 'a translatable field storage setting',
-      'test_field_setting' => 'dummy test string',
-      'translatable_field_setting' => 'a translatable field setting',
-    ];
-    $this->assertEquals($expected_settings, $base_field->getSettings());
-
-    // Clone the base field object and change one single setting using
-    // setSettings() on the cloned base field and check that it has been
-    // changed only on the cloned object.
-    $clone_base_field = clone $base_field;
-    $expected_settings_clone = $expected_settings;
-    $expected_settings_clone['changeable'] = $expected_settings['changeable'] . ' (clone)';
-    $clone_base_field->setSetting('changeable', $expected_settings_clone['changeable']);
-    $this->assertEquals($expected_settings, $base_field->getSettings());
-    $this->assertEquals($expected_settings_clone, $clone_base_field->getSettings());
-  }
-
   /**
    * @covers \Drupal\field\Entity\FieldStorageConfig::getSettings
    * @covers \Drupal\field\Entity\FieldStorageConfig::setSettings
diff --git a/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php b/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
index 2e5d09473a..422f294a35 100644
--- a/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
+++ b/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
@@ -59,7 +59,7 @@ public function testMungeNullByte() {
   public function testMungeIgnoreInsecure() {
     $this->config('system.file')->set('allow_insecure_uploads', 1)->save();
     $munged_name = file_munge_filename($this->name, '');
-    $this->assertSame($munged_name, $this->name, format_string('The original filename (%original) matches the munged filename (%munged) when insecure uploads are enabled.', ['%munged' => $munged_name, '%original' => $this->name]));
+    $this->assertIdentical($munged_name, $this->name, format_string('The original filename (%original) matches the munged filename (%munged) when insecure uploads are enabled.', ['%munged' => $munged_name, '%original' => $this->name]));
   }
 
   /**
@@ -69,10 +69,10 @@ public function testMungeIgnoreWhitelisted() {
     // Declare our extension as whitelisted. The declared extensions should
     // be case insensitive so test using one with a different case.
     $munged_name = file_munge_filename($this->nameWithUcExt, $this->badExtension);
-    $this->assertSame($munged_name, $this->nameWithUcExt, format_string('The new filename (%munged) matches the original (%original) once the extension has been whitelisted.', ['%munged' => $munged_name, '%original' => $this->nameWithUcExt]));
+    $this->assertIdentical($munged_name, $this->nameWithUcExt, format_string('The new filename (%munged) matches the original (%original) once the extension has been whitelisted.', ['%munged' => $munged_name, '%original' => $this->nameWithUcExt]));
     // The allowed extensions should also be normalized.
     $munged_name = file_munge_filename($this->name, strtoupper($this->badExtension));
-    $this->assertSame($munged_name, $this->name, format_string('The new filename (%munged) matches the original (%original) also when the whitelisted extension is in uppercase.', ['%munged' => $munged_name, '%original' => $this->name]));
+    $this->assertIdentical($munged_name, $this->name, format_string('The new filename (%munged) matches the original (%original) also when the whitelisted extension is in uppercase.', ['%munged' => $munged_name, '%original' => $this->name]));
   }
 
   /**
@@ -81,7 +81,7 @@ public function testMungeIgnoreWhitelisted() {
   public function testUnMunge() {
     $munged_name = file_munge_filename($this->name, '', FALSE);
     $unmunged_name = file_unmunge_filename($munged_name);
-    $this->assertSame($unmunged_name, $this->name, format_string('The unmunged (%unmunged) filename matches the original (%original)', ['%unmunged' => $unmunged_name, '%original' => $this->name]));
+    $this->assertIdentical($unmunged_name, $this->name, format_string('The unmunged (%unmunged) filename matches the original (%original)', ['%unmunged' => $unmunged_name, '%original' => $this->name]));
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/File/UrlRewritingTest.php b/core/tests/Drupal/KernelTests/Core/File/UrlRewritingTest.php
index bdf66bdd30..35d2ca0246 100644
--- a/core/tests/Drupal/KernelTests/Core/File/UrlRewritingTest.php
+++ b/core/tests/Drupal/KernelTests/Core/File/UrlRewritingTest.php
@@ -106,13 +106,13 @@ public function testRelativeFileURL() {
     // Shipped file.
     $filepath = 'core/assets/vendor/jquery/jquery.min.js';
     $url = file_create_url($filepath);
-    $this->assertSame(base_path() . $filepath, file_url_transform_relative($url));
+    $this->assertIdentical(base_path() . $filepath, file_url_transform_relative($url));
 
     // Managed file.
     $uri = $this->createUri();
     $url = file_create_url($uri);
     $public_directory_path = \Drupal::service('stream_wrapper_manager')->getViaScheme('public')->getDirectoryPath();
-    $this->assertSame(base_path() . $public_directory_path . '/' . rawurlencode(drupal_basename($uri)), file_url_transform_relative($url));
+    $this->assertIdentical(base_path() . $public_directory_path . '/' . rawurlencode(drupal_basename($uri)), file_url_transform_relative($url));
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php b/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php
index 0c01af1050..bb2e481104 100644
--- a/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php
@@ -365,7 +365,7 @@ public function testManipulations() {
             if ($image->getToolkit()->getType() == $image_original_type || $corner != $this->transparent) {
               $correct_colors = $this->colorsAreEqual($color, $corner);
               $this->assertTrue($correct_colors, SafeMarkup::format('Image %file object after %action action has the correct color placement at corner %corner.',
-                ['%file' => $file, '%action' => $op, '%corner' => $key]));
+                ['%file'   => $file, '%action' => $op, '%corner' => $key]));
             }
           }
         }
diff --git a/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php b/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
index 26a1abeff1..2d543cbf01 100644
--- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
+++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
@@ -78,7 +78,7 @@ public function testCRUDWithExpiration() {
     // Ensure that an item with the same name exists in the other collection.
     $stores[1]->set('foo', $this->objects[5]);
     $result = $stores[0]->getAll();
-    // Not using assertSame(), since the order is not defined for getAll().
+    // Not using assertIdentical(), since the order is not defined for getAll().
     $this->assertEqual(count($result), count($values));
     foreach ($result as $key => $value) {
       $this->assertEqual($values[$key], $value);
diff --git a/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php b/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php
index 875ca7a4fa..e0badd88d1 100644
--- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php
@@ -39,7 +39,7 @@ public function testGarbageCollection() {
     for ($i = 0; $i <= 3; $i++) {
       $store->setWithExpire('key_' . $i, $this->randomObject(), rand(500, 100000));
     }
-    $this->assertIdentical(count($store->getAll()), 4, 'Four items were written to the storage.');
+    $this->assertIdentical(sizeof($store->getAll()), 4, 'Four items were written to the storage.');
 
     // Manually expire the data.
     for ($i = 0; $i <= 3; $i++) {
diff --git a/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php b/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php
index 98850055a5..31300dbcd7 100644
--- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php
@@ -31,15 +31,9 @@ protected function setUp() {
 
   /**
    * Tests CRUD operations.
-   *
-   * @covers \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage::hasData
    */
   public function testCRUD() {
     $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->getId();
-
-    $storage = \Drupal::entityTypeManager()->getStorage('entity_test_label');
-    $this->assertFalse($storage->hasData());
-
     // Verify default properties on a newly created empty entity.
     $empty = EntityTestLabel::create();
     $this->assertIdentical($empty->id->value, NULL);
@@ -114,9 +108,6 @@ public function testCRUD() {
       $this->fail('EntityMalformedException was not thrown.');
     }
 
-    // Verify that hasData() returns the expected result.
-    $this->assertTrue($storage->hasData());
-
     // Verify that the correct status is returned and properties did not change.
     $this->assertIdentical($status, SAVED_NEW);
     $this->assertIdentical($entity_test->id(), $expected['id']);
@@ -166,12 +157,4 @@ public function testCRUD() {
     }
   }
 
-  /**
-   * Tests uninstallation of a module that does not use the SQL entity storage.
-   */
-  public function testUninstall() {
-    $uninstall_validator_reasons = \Drupal::service('content_uninstall_validator')->validate('keyvalue_test');
-    $this->assertEmpty($uninstall_validator_reasons);
-  }
-
 }
diff --git a/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php b/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
index 48af84d54a..7651234268 100644
--- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
+++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
@@ -102,7 +102,7 @@ public function testCRUD() {
     // Ensure that an item with the same name exists in the other collection.
     $stores[1]->set('foo', $this->objects[5]);
     $result = $stores[0]->getAll();
-    // Not using assertSame(), since the order is not defined for getAll().
+    // Not using assertIdentical(), since the order is not defined for getAll().
     $this->assertEqual(count($result), count($values));
     foreach ($result as $key => $value) {
       $this->assertEqual($values[$key], $value);
diff --git a/core/tests/Drupal/KernelTests/Core/Path/AliasTest.php b/core/tests/Drupal/KernelTests/Core/Path/AliasTest.php
index 1f49b09ffd..704863279f 100644
--- a/core/tests/Drupal/KernelTests/Core/Path/AliasTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Path/AliasTest.php
@@ -16,16 +16,16 @@
 class AliasTest extends PathUnitTestBase {
 
   public function testCRUD() {
-    // Prepare database table.
+    //Prepare database table.
     $connection = Database::getConnection();
     $this->fixtures->createTables($connection);
 
-    // Create Path object.
+    //Create Path object.
     $aliasStorage = new AliasStorage($connection, $this->container->get('module_handler'));
 
     $aliases = $this->fixtures->sampleUrlAliases();
 
-    // Create a few aliases
+    //Create a few aliases
     foreach ($aliases as $idx => $alias) {
       $aliasStorage->save($alias['source'], $alias['alias'], $alias['langcode']);
 
@@ -34,11 +34,11 @@ public function testCRUD() {
 
       $this->assertEqual(count($rows), 1, format_string('Created an entry for %alias.', ['%alias' => $alias['alias']]));
 
-      // Cache the pid for further tests.
+      //Cache the pid for further tests.
       $aliases[$idx]['pid'] = $rows[0]->pid;
     }
 
-    // Load a few aliases
+    //Load a few aliases
     foreach ($aliases as $alias) {
       $pid = $alias['pid'];
       $loadedAlias = $aliasStorage->load(['pid' => $pid]);
@@ -49,7 +49,7 @@ public function testCRUD() {
     $loadedAlias = $aliasStorage->load(['source' => '/node/1']);
     $this->assertEqual($loadedAlias['alias'], '/alias_for_node_1_und', 'The last created alias loaded by default.');
 
-    // Update a few aliases
+    //Update a few aliases
     foreach ($aliases as $alias) {
       $fields = $aliasStorage->save($alias['source'], $alias['alias'] . '_updated', $alias['langcode'], $alias['pid']);
 
@@ -61,7 +61,7 @@ public function testCRUD() {
       $this->assertEqual($pid, $alias['pid'], format_string('Updated entry for pid %pid.', ['%pid' => $pid]));
     }
 
-    // Delete a few aliases
+    //Delete a few aliases
     foreach ($aliases as $alias) {
       $pid = $alias['pid'];
       $aliasStorage->delete(['pid' => $pid]);
@@ -74,11 +74,11 @@ public function testCRUD() {
   }
 
   public function testLookupPath() {
-    // Prepare database table.
+    //Prepare database table.
     $connection = Database::getConnection();
     $this->fixtures->createTables($connection);
 
-    // Create AliasManager and Path object.
+    //Create AliasManager and Path object.
     $aliasManager = $this->container->get('path.alias_manager');
     $aliasStorage = new AliasStorage($connection, $this->container->get('module_handler'));
 
diff --git a/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php b/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
index a9ec4b8c77..bd3bba53d0 100644
--- a/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
@@ -59,7 +59,7 @@ public function testContext() {
       $plugin->getContextValue('user');
     }
     catch (ContextException $e) {
-      $this->assertSame("The 'entity:user' context is required and not present.", $e->getMessage(), 'Requesting a non-set value of a required context should throw a context exception.');
+      $this->assertIdentical("The 'entity:user' context is required and not present.", $e->getMessage(), 'Requesting a non-set value of a required context should throw a context exception.');
     }
 
     // Try to pass the wrong class type as a context value.
diff --git a/core/tests/Drupal/KernelTests/Core/Queue/QueueTest.php b/core/tests/Drupal/KernelTests/Core/Queue/QueueTest.php
index cd2ed517e2..8bf48340aa 100644
--- a/core/tests/Drupal/KernelTests/Core/Queue/QueueTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Queue/QueueTest.php
@@ -24,7 +24,7 @@ public function testSystemQueue() {
     $queue2 = new DatabaseQueue($this->randomMachineName(), Database::getConnection());
     $queue2->createQueue();
 
-    $this->runQueueTest($queue1, $queue2);
+    $this->queueTest($queue1, $queue2);
   }
 
   /**
@@ -37,7 +37,7 @@ public function testMemoryQueue() {
     $queue2 = new Memory($this->randomMachineName());
     $queue2->createQueue();
 
-    $this->runQueueTest($queue1, $queue2);
+    $this->queueTest($queue1, $queue2);
   }
 
   /**
@@ -48,7 +48,7 @@ public function testMemoryQueue() {
    * @param \Drupal\Core\Queue\QueueInterface $queue2
    *   An instantiated queue object.
    */
-  protected function runQueueTest($queue1, $queue2) {
+  protected function queueTest($queue1, $queue2) {
     // Create four items.
     $data = [];
     for ($i = 0; $i < 4; $i++) {
diff --git a/core/tests/Drupal/KernelTests/Core/Test/BrowserTestBaseTest.php b/core/tests/Drupal/KernelTests/Core/Test/BrowserTestBaseTest.php
deleted file mode 100644
index c93069c8e4..0000000000
--- a/core/tests/Drupal/KernelTests/Core/Test/BrowserTestBaseTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests\Core\Test;
-
-use Drupal\FunctionalTests\BrowserMissingDependentModuleMethodTest;
-use Drupal\FunctionalTests\BrowserMissingDependentModuleTest;
-use Drupal\KernelTests\KernelTestBase;
-
-/**
- * @group Test
- * @group FunctionalTests
- *
- * @coversDefaultClass \Drupal\Tests\BrowserTestBase
- */
-class BrowserTestBaseTest extends KernelTestBase {
-
-  /**
-   * Tests that a test method is skipped when it requires a module not present.
-   *
-   * In order to catch checkRequirements() regressions, we have to make a new
-   * test object and run checkRequirements() here.
-   *
-   * @covers ::checkRequirements
-   * @covers ::checkModuleRequirements
-   */
-  public function testMethodRequiresModule() {
-    require __DIR__ . '/../../../../fixtures/BrowserMissingDependentModuleMethodTest.php';
-
-    $stub_test = new BrowserMissingDependentModuleMethodTest();
-    // We have to setName() to the method name we're concerned with.
-    $stub_test->setName('testRequiresModule');
-
-    // We cannot use $this->setExpectedException() because PHPUnit would skip
-    // the test before comparing the exception type.
-    try {
-      $stub_test->publicCheckRequirements();
-      $this->fail('Missing required module throws skipped test exception.');
-    }
-    catch (\PHPUnit_Framework_SkippedTestError $e) {
-      $this->assertEqual('Required modules: module_does_not_exist', $e->getMessage());
-    }
-  }
-
-  /**
-   * Tests that a test case is skipped when it requires a module not present.
-   *
-   * In order to catch checkRequirements() regressions, we have to make a new
-   * test object and run checkRequirements() here.
-   *
-   * @covers ::checkRequirements
-   * @covers ::checkModuleRequirements
-   */
-  public function testRequiresModule() {
-    require __DIR__ . '/../../../../fixtures/BrowserMissingDependentModuleTest.php';
-
-    $stub_test = new BrowserMissingDependentModuleTest();
-    // We have to setName() to the method name we're concerned with.
-    $stub_test->setName('testRequiresModule');
-
-    // We cannot use $this->setExpectedException() because PHPUnit would skip
-    // the test before comparing the exception type.
-    try {
-      $stub_test->publicCheckRequirements();
-      $this->fail('Missing required module throws skipped test exception.');
-    }
-    catch (\PHPUnit_Framework_SkippedTestError $e) {
-      $this->assertEqual('Required modules: module_does_not_exist', $e->getMessage());
-    }
-  }
-
-}
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/RegistryTest.php b/core/tests/Drupal/KernelTests/Core/Theme/RegistryTest.php
index a20798e198..a962fecc58 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/RegistryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/RegistryTest.php
@@ -77,7 +77,7 @@ public function testMultipleSubThemes() {
     $registry_base_theme->setThemeManager(\Drupal::theme());
 
     $preprocess_functions = $registry_subsub_theme->get()['theme_test_template_test']['preprocess functions'];
-    $this->assertSame([
+    $this->assertIdentical([
       'template_preprocess',
       'test_basetheme_preprocess_theme_test_template_test',
       'test_subtheme_preprocess_theme_test_template_test',
@@ -85,20 +85,20 @@ public function testMultipleSubThemes() {
     ], $preprocess_functions);
 
     $preprocess_functions = $registry_sub_theme->get()['theme_test_template_test']['preprocess functions'];
-    $this->assertSame([
+    $this->assertIdentical([
       'template_preprocess',
       'test_basetheme_preprocess_theme_test_template_test',
       'test_subtheme_preprocess_theme_test_template_test',
     ], $preprocess_functions);
 
     $preprocess_functions = $registry_base_theme->get()['theme_test_template_test']['preprocess functions'];
-    $this->assertSame([
+    $this->assertIdentical([
       'template_preprocess',
       'test_basetheme_preprocess_theme_test_template_test',
     ], $preprocess_functions);
 
     $preprocess_functions = $registry_base_theme->get()['theme_test_function_suggestions']['preprocess functions'];
-    $this->assertSame([
+    $this->assertIdentical([
        'template_preprocess_theme_test_function_suggestions',
        'test_basetheme_preprocess_theme_test_function_suggestions',
     ], $preprocess_functions, "Theme functions don't have template_preprocess but do have template_preprocess_HOOK");
@@ -125,7 +125,7 @@ public function testSuggestionPreprocessFunctions() {
       $hook .= "$suggestion";
       $expected_preprocess_functions[] = "test_theme_preprocess_$hook";
       $preprocess_functions = $registry_theme->get()[$hook]['preprocess functions'];
-      $this->assertSame($expected_preprocess_functions, $preprocess_functions, "$hook has correct preprocess functions.");
+      $this->assertIdentical($expected_preprocess_functions, $preprocess_functions, "$hook has correct preprocess functions.");
     } while ($suggestion = array_shift($suggestions));
 
     $expected_preprocess_functions = [
@@ -136,10 +136,10 @@ public function testSuggestionPreprocessFunctions() {
     ];
 
     $preprocess_functions = $registry_theme->get()['theme_test_preprocess_suggestions__kitten__meerkat']['preprocess functions'];
-    $this->assertSame($expected_preprocess_functions, $preprocess_functions, 'Suggestion implemented as a function correctly inherits preprocess functions.');
+    $this->assertIdentical($expected_preprocess_functions, $preprocess_functions, 'Suggestion implemented as a function correctly inherits preprocess functions.');
 
     $preprocess_functions = $registry_theme->get()['theme_test_preprocess_suggestions__kitten__bearcat']['preprocess functions'];
-    $this->assertSame($expected_preprocess_functions, $preprocess_functions, 'Suggestion implemented as a template correctly inherits preprocess functions.');
+    $this->assertIdentical($expected_preprocess_functions, $preprocess_functions, 'Suggestion implemented as a template correctly inherits preprocess functions.');
 
     $this->assertTrue(isset($registry_theme->get()['theme_test_preprocess_suggestions__kitten__meerkat__tarsier__moose']), 'Preprocess function with an unimplemented lower-level suggestion is added to the registry.');
   }
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php b/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
index c44cc1c814..627b903cb6 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
@@ -134,4 +134,4 @@ public function testBubblingMetadataWithRenderable() {
 
 }
 
-class NonPrintable {}
+class NonPrintable { }
diff --git a/core/tests/Drupal/KernelTests/KernelTestBase.php b/core/tests/Drupal/KernelTests/KernelTestBase.php
index d2e61ee7e5..6a35f15373 100644
--- a/core/tests/Drupal/KernelTests/KernelTestBase.php
+++ b/core/tests/Drupal/KernelTests/KernelTestBase.php
@@ -18,10 +18,9 @@
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Test\TestDatabase;
 use Drupal\simpletest\AssertContentTrait;
-use Drupal\Tests\AssertHelperTrait;
+use Drupal\simpletest\AssertHelperTrait;
 use Drupal\Tests\ConfigTestTrait;
 use Drupal\Tests\RandomGeneratorTrait;
-use Drupal\Tests\TestRequirementsTrait;
 use Drupal\simpletest\TestServiceProvider;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\DependencyInjection\Reference;
@@ -47,6 +46,9 @@
  *
  * @see \Drupal\Tests\KernelTestBase::$modules
  * @see \Drupal\Tests\KernelTestBase::enableModules()
+ *
+ * @todo Extend ::setRequirementsFromAnnotation() and ::checkRequirements() to
+ *   account for '@requires module'.
  */
 abstract class KernelTestBase extends TestCase implements ServiceProviderInterface {
 
@@ -55,7 +57,6 @@
   use AssertHelperTrait;
   use RandomGeneratorTrait;
   use ConfigTestTrait;
-  use TestRequirementsTrait;
 
   /**
    * {@inheritdoc}
@@ -211,6 +212,15 @@ public static function setUpBeforeClass() {
     chdir(static::getDrupalRoot());
   }
 
+  /**
+   * Returns the drupal root directory.
+   *
+   * @return string
+   */
+  protected static function getDrupalRoot() {
+    return dirname(dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__))));
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -804,7 +814,7 @@ protected function enableModules(array $modules) {
 
     foreach ($modules as $module) {
       if ($module_handler->moduleExists($module)) {
-        continue;
+        throw new \LogicException("$module module is already enabled.");
       }
       $module_handler->addModule($module, $module_list[$module]->getPath());
       // Maintain the list of enabled modules in configuration.
diff --git a/core/tests/Drupal/KernelTests/KernelTestBaseTest.php b/core/tests/Drupal/KernelTests/KernelTestBaseTest.php
index f44c9650f6..a503019c54 100644
--- a/core/tests/Drupal/KernelTests/KernelTestBaseTest.php
+++ b/core/tests/Drupal/KernelTests/KernelTestBaseTest.php
@@ -9,7 +9,6 @@
 
 /**
  * @coversDefaultClass \Drupal\KernelTests\KernelTestBase
- *
  * @group PHPUnit
  * @group Test
  * @group KernelTests
@@ -223,60 +222,6 @@ public function testLocalTimeZone() {
     $this->assertEquals('Australia/Sydney', date_default_timezone_get());
   }
 
-  /**
-   * Tests that a test method is skipped when it requires a module not present.
-   *
-   * In order to catch checkRequirements() regressions, we have to make a new
-   * test object and run checkRequirements() here.
-   *
-   * @covers ::checkRequirements
-   * @covers ::checkModuleRequirements
-   */
-  public function testMethodRequiresModule() {
-    require __DIR__ . '/../../fixtures/KernelMissingDependentModuleMethodTest.php';
-
-    $stub_test = new KernelMissingDependentModuleMethodTest();
-    // We have to setName() to the method name we're concerned with.
-    $stub_test->setName('testRequiresModule');
-
-    // We cannot use $this->setExpectedException() because PHPUnit would skip
-    // the test before comparing the exception type.
-    try {
-      $stub_test->publicCheckRequirements();
-      $this->fail('Missing required module throws skipped test exception.');
-    }
-    catch (\PHPUnit_Framework_SkippedTestError $e) {
-      $this->assertEqual('Required modules: module_does_not_exist', $e->getMessage());
-    }
-  }
-
-  /**
-   * Tests that a test case is skipped when it requires a module not present.
-   *
-   * In order to catch checkRequirements() regressions, we have to make a new
-   * test object and run checkRequirements() here.
-   *
-   * @covers ::checkRequirements
-   * @covers ::checkModuleRequirements
-   */
-  public function testRequiresModule() {
-    require __DIR__ . '/../../fixtures/KernelMissingDependentModuleTest.php';
-
-    $stub_test = new KernelMissingDependentModuleTest();
-    // We have to setName() to the method name we're concerned with.
-    $stub_test->setName('testRequiresModule');
-
-    // We cannot use $this->setExpectedException() because PHPUnit would skip
-    // the test before comparing the exception type.
-    try {
-      $stub_test->publicCheckRequirements();
-      $this->fail('Missing required module throws skipped test exception.');
-    }
-    catch (\PHPUnit_Framework_SkippedTestError $e) {
-      $this->assertEqual('Required modules: module_does_not_exist', $e->getMessage());
-    }
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/tests/Drupal/Tests/AssertHelperTrait.php b/core/tests/Drupal/Tests/AssertHelperTrait.php
deleted file mode 100644
index ba814d9641..0000000000
--- a/core/tests/Drupal/Tests/AssertHelperTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\Tests;
-
-use Drupal\Component\Render\MarkupInterface;
-
-/**
- * Provides helper methods for assertions.
- */
-trait AssertHelperTrait {
-
-  /**
-   * Casts MarkupInterface objects into strings.
-   *
-   * @param string|array $value
-   *   The value to act on.
-   *
-   * @return mixed
-   *   The input value, with MarkupInterface objects casted to string.
-   */
-  protected static function castSafeStrings($value) {
-    if ($value instanceof MarkupInterface) {
-      $value = (string) $value;
-    }
-    if (is_array($value)) {
-      array_walk_recursive($value, function (&$item) {
-        if ($item instanceof MarkupInterface) {
-          $item = (string) $item;
-        }
-      });
-    }
-    return $value;
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/BrowserTestBase.php b/core/tests/Drupal/Tests/BrowserTestBase.php
index abdedd9c03..bd50c23b48 100644
--- a/core/tests/Drupal/Tests/BrowserTestBase.php
+++ b/core/tests/Drupal/Tests/BrowserTestBase.php
@@ -14,19 +14,24 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Session\AnonymousUserSession;
+use Drupal\Core\Site\Settings;
+use Drupal\Core\StreamWrapper\StreamWrapperInterface;
 use Drupal\Core\Test\FunctionalTestSetupTrait;
+use Drupal\Core\Test\TestRunnerKernel;
 use Drupal\Core\Test\TestSetupTrait;
 use Drupal\Core\Url;
 use Drupal\Core\Utility\Error;
 use Drupal\FunctionalTests\AssertLegacyTrait;
-use Drupal\Tests\block\Traits\BlockCreationTrait;
-use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
-use Drupal\Tests\node\Traits\NodeCreationTrait;
-use Drupal\Tests\user\Traits\UserCreationTrait;
+use Drupal\simpletest\AssertHelperTrait;
+use Drupal\simpletest\BlockCreationTrait;
+use Drupal\simpletest\ContentTypeCreationTrait;
+use Drupal\simpletest\NodeCreationTrait;
+use Drupal\simpletest\UserCreationTrait;
 use PHPUnit\Framework\TestCase;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Symfony\Component\CssSelector\CssSelectorConverter;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Provides a test case for functional Drupal tests.
@@ -56,7 +61,6 @@
     createContentType as drupalCreateContentType;
   }
   use ConfigTestTrait;
-  use TestRequirementsTrait;
   use UserCreationTrait {
     createRole as drupalCreateRole;
     createUser as drupalCreateUser;
@@ -257,32 +261,6 @@
    */
   protected $metaRefreshCount = 0;
 
-  /**
-   * The app root.
-   *
-   * @var string
-   */
-  protected $root;
-
-  /**
-   * The original container.
-   *
-   * Move this to \Drupal\Core\Test\FunctionalTestSetupTrait once TestBase no
-   * longer provides the same value.
-   *
-   * @var \Symfony\Component\DependencyInjection\ContainerInterface
-   */
-  protected $originalContainer;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct($name = NULL, array $data = [], $dataName = '') {
-    parent::__construct($name, $data, $dataName);
-
-    $this->root = dirname(dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__))));
-  }
-
   /**
    * Initializes Mink sessions.
    */
@@ -366,30 +344,6 @@ protected function getDefaultDriverInstance() {
     return $driver;
   }
 
-  /**
-   * Creates the directory to store browser output.
-   *
-   * Creates the directory to store browser output in if a file to write
-   * URLs to has been created by \Drupal\Tests\Listeners\HtmlOutputPrinter.
-   */
-  protected function initBrowserOutputFile() {
-    $browser_output_file = getenv('BROWSERTEST_OUTPUT_FILE');
-    $this->htmlOutputEnabled = is_file($browser_output_file);
-    if ($this->htmlOutputEnabled) {
-      $this->htmlOutputFile = $browser_output_file;
-      $this->htmlOutputClassName = str_replace("\\", "_", get_called_class());
-      $this->htmlOutputDirectory = DRUPAL_ROOT . '/sites/simpletest/browser_output';
-      if (file_prepare_directory($this->htmlOutputDirectory, FILE_CREATE_DIRECTORY) && !file_exists($this->htmlOutputDirectory . '/.htaccess')) {
-        file_put_contents($this->htmlOutputDirectory . '/.htaccess', "<IfModule mod_expires.c>\nExpiresActive Off\n</IfModule>\n");
-      }
-      $this->htmlOutputCounterStorage = $this->htmlOutputDirectory . '/' . $this->htmlOutputClassName . '.counter';
-      $this->htmlOutputTestId = str_replace('sites/simpletest/', '', $this->siteDirectory);
-      if (is_file($this->htmlOutputCounterStorage)) {
-        $this->htmlOutputCounter = max(1, (int) file_get_contents($this->htmlOutputCounterStorage)) + 1;
-      }
-    }
-  }
-
   /**
    * Provides a Guzzle middleware handler to log every response received.
    *
@@ -446,9 +400,43 @@ protected function registerSessions() {}
    * {@inheritdoc}
    */
   protected function setUp() {
+    global $base_url;
     parent::setUp();
 
-    $this->setupBaseUrl();
+    // Get and set the domain of the environment we are running our test
+    // coverage against.
+    $base_url = getenv('SIMPLETEST_BASE_URL');
+    if (!$base_url) {
+      throw new \Exception(
+        'You must provide a SIMPLETEST_BASE_URL environment variable to run some PHPUnit based functional tests.'
+      );
+    }
+
+    // Setup $_SERVER variable.
+    $parsed_url = parse_url($base_url);
+    $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
+    $path = isset($parsed_url['path']) ? rtrim(rtrim($parsed_url['path']), '/') : '';
+    $port = isset($parsed_url['port']) ? $parsed_url['port'] : 80;
+
+    $this->baseUrl = $base_url;
+
+    // If the passed URL schema is 'https' then setup the $_SERVER variables
+    // properly so that testing will run under HTTPS.
+    if ($parsed_url['scheme'] === 'https') {
+      $_SERVER['HTTPS'] = 'on';
+    }
+    $_SERVER['HTTP_HOST'] = $host;
+    $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+    $_SERVER['SERVER_ADDR'] = '127.0.0.1';
+    $_SERVER['SERVER_PORT'] = $port;
+    $_SERVER['SERVER_SOFTWARE'] = NULL;
+    $_SERVER['SERVER_NAME'] = 'localhost';
+    $_SERVER['REQUEST_URI'] = $path . '/';
+    $_SERVER['REQUEST_METHOD'] = 'GET';
+    $_SERVER['SCRIPT_NAME'] = $path . '/index.php';
+    $_SERVER['SCRIPT_FILENAME'] = $path . '/index.php';
+    $_SERVER['PHP_SELF'] = $path . '/index.php';
+    $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line';
 
     // Install Drupal test site.
     $this->prepareEnvironment();
@@ -464,8 +452,23 @@ protected function setUp() {
       }
     }
 
-    // Set up the browser test output file.
-    $this->initBrowserOutputFile();
+    // Creates the directory to store browser output in if a file to write
+    // URLs to has been created by \Drupal\Tests\Listeners\HtmlOutputPrinter.
+    $browser_output_file = getenv('BROWSERTEST_OUTPUT_FILE');
+    $this->htmlOutputEnabled = is_file($browser_output_file);
+    if ($this->htmlOutputEnabled) {
+      $this->htmlOutputFile = $browser_output_file;
+      $this->htmlOutputClassName = str_replace("\\", "_", get_called_class());
+      $this->htmlOutputDirectory = DRUPAL_ROOT . '/sites/simpletest/browser_output';
+      if (file_prepare_directory($this->htmlOutputDirectory, FILE_CREATE_DIRECTORY) && !file_exists($this->htmlOutputDirectory . '/.htaccess')) {
+        file_put_contents($this->htmlOutputDirectory . '/.htaccess', "<IfModule mod_expires.c>\nExpiresActive Off\n</IfModule>\n");
+      }
+      $this->htmlOutputCounterStorage = $this->htmlOutputDirectory . '/' . $this->htmlOutputClassName . '.counter';
+      $this->htmlOutputTestId = str_replace('sites/simpletest/', '', $this->siteDirectory);
+      if (is_file($this->htmlOutputCounterStorage)) {
+        $this->htmlOutputCounter = max(1, (int) file_get_contents($this->htmlOutputCounterStorage)) + 1;
+      }
+    }
   }
 
   /**
@@ -733,6 +736,7 @@ protected function drupalLogin(AccountInterface $account) {
     }
 
     $this->drupalGet('user/login');
+    $this->assertSession()->statusCodeEquals(200);
     $this->submitForm([
       'name' => $account->getUsername(),
       'pass' => $account->passRaw,
@@ -757,6 +761,7 @@ protected function drupalLogout() {
     // screen.
     $assert_session = $this->assertSession();
     $this->drupalGet('user/logout', ['query' => ['destination' => 'user']]);
+    $assert_session->statusCodeEquals(200);
     $assert_session->fieldExists('name');
     $assert_session->fieldExists('pass');
 
@@ -915,11 +920,6 @@ protected function submitForm(array $edit, $submit, $form_html_id = NULL) {
    *   POST data.
    * @param array $options
    *   Options to be forwarded to the url generator.
-   *
-   * @return string
-   *   (deprecated) The response content after submit form. It is necessary for
-   *   backwards compatibility and will be removed before Drupal 9.0. You should
-   *   just use the webAssert object for your assertions.
    */
   protected function drupalPostForm($path, $edit, $submit, array $options = []) {
     if (is_object($submit)) {
@@ -938,8 +938,6 @@ protected function drupalPostForm($path, $edit, $submit, array $options = []) {
     }
 
     $this->submitForm($edit, $submit);
-
-    return $this->getSession()->getPage()->getContent();
   }
 
   /**
@@ -981,6 +979,134 @@ public function installDrupal() {
     $this->rebuildAll();
   }
 
+  /**
+   * Returns the parameters that will be used when Simpletest installs Drupal.
+   *
+   * @see install_drupal()
+   * @see install_state_defaults()
+   */
+  protected function installParameters() {
+    $connection_info = Database::getConnectionInfo();
+    $driver = $connection_info['default']['driver'];
+    $connection_info['default']['prefix'] = $connection_info['default']['prefix']['default'];
+    unset($connection_info['default']['driver']);
+    unset($connection_info['default']['namespace']);
+    unset($connection_info['default']['pdo']);
+    unset($connection_info['default']['init_commands']);
+    $parameters = [
+      'interactive' => FALSE,
+      'parameters' => [
+        'profile' => $this->profile,
+        'langcode' => 'en',
+      ],
+      'forms' => [
+        'install_settings_form' => [
+          'driver' => $driver,
+          $driver => $connection_info['default'],
+        ],
+        'install_configure_form' => [
+          'site_name' => 'Drupal',
+          'site_mail' => 'simpletest@example.com',
+          'account' => [
+            'name' => $this->rootUser->name,
+            'mail' => $this->rootUser->getEmail(),
+            'pass' => [
+              'pass1' => $this->rootUser->pass_raw,
+              'pass2' => $this->rootUser->pass_raw,
+            ],
+          ],
+          // form_type_checkboxes_value() requires NULL instead of FALSE values
+          // for programmatic form submissions to disable a checkbox.
+          'enable_update_status_module' => NULL,
+          'enable_update_status_emails' => NULL,
+        ],
+      ],
+    ];
+    return $parameters;
+  }
+
+  /**
+   * Prepares the current environment for running the test.
+   *
+   * Also sets up new resources for the testing environment, such as the public
+   * filesystem and configuration directories.
+   *
+   * This method is private as it must only be called once by
+   * BrowserTestBase::setUp() (multiple invocations for the same test would have
+   * unpredictable consequences) and it must not be callable or overridable by
+   * test classes.
+   */
+  protected function prepareEnvironment() {
+    // Bootstrap Drupal so we can use Drupal's built in functions.
+    $this->classLoader = require __DIR__ . '/../../../../autoload.php';
+    $request = Request::createFromGlobals();
+    $kernel = TestRunnerKernel::createFromRequest($request, $this->classLoader);
+    // TestRunnerKernel expects the working directory to be DRUPAL_ROOT.
+    chdir(DRUPAL_ROOT);
+    $kernel->prepareLegacyRequest($request);
+    $this->prepareDatabasePrefix();
+
+    $this->originalSite = $kernel->findSitePath($request);
+
+    // Create test directory ahead of installation so fatal errors and debug
+    // information can be logged during installation process.
+    file_prepare_directory($this->siteDirectory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
+
+    // Prepare filesystem directory paths.
+    $this->publicFilesDirectory = $this->siteDirectory . '/files';
+    $this->privateFilesDirectory = $this->siteDirectory . '/private';
+    $this->tempFilesDirectory = $this->siteDirectory . '/temp';
+    $this->translationFilesDirectory = $this->siteDirectory . '/translations';
+
+    // Ensure the configImporter is refreshed for each test.
+    $this->configImporter = NULL;
+
+    // Unregister all custom stream wrappers of the parent site.
+    $wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers(StreamWrapperInterface::ALL);
+    foreach ($wrappers as $scheme => $info) {
+      stream_wrapper_unregister($scheme);
+    }
+
+    // Reset statics.
+    drupal_static_reset();
+
+    // Ensure there is no service container.
+    $this->container = NULL;
+    \Drupal::unsetContainer();
+
+    // Unset globals.
+    unset($GLOBALS['config_directories']);
+    unset($GLOBALS['config']);
+    unset($GLOBALS['conf']);
+
+    // Log fatal errors.
+    ini_set('log_errors', 1);
+    ini_set('error_log', DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log');
+
+    // Change the database prefix.
+    $this->changeDatabasePrefix();
+
+    // After preparing the environment and changing the database prefix, we are
+    // in a valid test environment.
+    drupal_valid_test_ua($this->databasePrefix);
+
+    // Reset settings.
+    new Settings([
+      // For performance, simply use the database prefix as hash salt.
+      'hash_salt' => $this->databasePrefix,
+    ]);
+
+    drupal_set_time_limit($this->timeLimit);
+
+    // Save and clean the shutdown callbacks array because it is static cached
+    // and will be changed by the test run. Otherwise it will contain callbacks
+    // from both environments and the testing environment will try to call the
+    // handlers defined by the original one.
+    $callbacks = &drupal_register_shutdown_function();
+    $this->originalShutdownCallbacks = $callbacks;
+    $callbacks = [];
+  }
+
   /**
    * Returns whether a given user account is logged in.
    *
@@ -1275,13 +1401,13 @@ protected function getTestMethodCaller() {
    * Checks for meta refresh tag and if found call drupalGet() recursively.
    *
    * This function looks for the http-equiv attribute to be set to "Refresh" and
-   * is case-insensitive.
+   * is case-sensitive.
    *
    * @return string|false
    *   Either the new page content or FALSE.
    */
   protected function checkForMetaRefresh() {
-    $refresh = $this->cssSelect('meta[http-equiv="Refresh"], meta[http-equiv="refresh"]');
+    $refresh = $this->cssSelect('meta[http-equiv="Refresh"]');
     if (!empty($refresh) && (!isset($this->maximumMetaRefreshCount) || $this->metaRefreshCount < $this->maximumMetaRefreshCount)) {
       // Parse the content attribute of the meta tag for the format:
       // "[delay]: URL=[page_to_redirect_to]".
diff --git a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index 9cf0722aeb..2becc97a46 100644
--- a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -804,17 +804,4 @@ public function testValidateFormat() {
     $date = DateTimePlus::createFromFormat('Y-m-d H:i:s', '11-03-31 17:44:00', 'UTC', ['validate_format' => TRUE]);
   }
 
-
-  /**
-   * Tests setting the default time for date-only objects.
-   */
-  public function testDefaultDateTime() {
-    $utc = new \DateTimeZone('UTC');
-
-    $date = DateTimePlus::createFromFormat('Y-m-d H:i:s', '2017-05-23 22:58:00', $utc);
-    $this->assertEquals('22:58:00', $date->format('H:i:s'));
-    $date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $date->format('H:i:s'));
-  }
-
 }
diff --git a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
index 7b8fc87d78..f78304bb03 100644
--- a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
+++ b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
@@ -715,18 +715,12 @@ protected function getMockContainerDefinition() {
       ]),
       'properties' => $this->getCollection(['_someProperty' => 'foo']),
       'calls' => [
-        [
-          'setContainer',
-          $this->getCollection([
-            $this->getServiceCall('service_container'),
-          ]),
-        ],
-        [
-          'setOtherConfigParameter',
-          $this->getCollection([
-            $this->getParameterCall('some_other_config'),
-          ]),
-        ],
+        ['setContainer', $this->getCollection([
+          $this->getServiceCall('service_container'),
+        ])],
+        ['setOtherConfigParameter', $this->getCollection([
+          $this->getParameterCall('some_other_config'),
+        ])],
       ],
       'priority' => 0,
     ];
@@ -830,12 +824,9 @@ protected function getMockContainerDefinition() {
         [NULL, 'bar'],
       ],
       'calls' => [
-        [
-          'setContainer',
-          $this->getCollection([
-            $this->getServiceCall('service_container'),
-          ]),
-        ],
+        ['setContainer', $this->getCollection([
+          $this->getServiceCall('service_container'),
+        ])],
       ],
     ];
 
diff --git a/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php b/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php
index c317bd84a4..4fe9d3ca09 100644
--- a/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php
+++ b/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php
@@ -105,54 +105,51 @@ public function configurationDataProvider() {
     $class = get_class($file_cache);
 
     // Test fallback configuration.
-    $data['fallback-configuration'] = [
-      [],
-      [],
-      FileCache::class,
-    ];
+    $data['fallback-configuration'] = [[
+    ], [], FileCache::class];
 
     // Test default configuration.
-    $data['default-configuration'] = [
-      ['default' => ['class' => $class]],
-      [],
-      $class,
-    ];
+    $data['default-configuration'] = [[
+      'default' => [
+        'class' => $class,
+      ],
+    ], [], $class];
 
     // Test specific per collection setting.
-    $data['collection-setting'] = [
-      ['test_foo_settings' => ['class' => $class]],
-      [],
-      $class,
-    ];
+    $data['collection-setting'] = [[
+      'test_foo_settings' => [
+        'class' => $class,
+      ],
+    ], [], $class];
 
 
     // Test default configuration plus specific per collection setting.
-    $data['default-plus-collection-setting'] = [
-      [
-        'default' => ['class' => '\stdClass'],
-        'test_foo_settings' => ['class' => $class],
+    $data['default-plus-collection-setting'] = [[
+      'default' => [
+        'class' => '\stdClass',
       ],
-      [],
-      $class,
-    ];
+      'test_foo_settings' => [
+        'class' => $class,
+      ],
+    ], [], $class];
 
     // Test default configuration plus class specific override.
-    $data['default-plus-class-override'] = [
-      ['default' => ['class' => '\stdClass']],
-      ['class' => $class],
-      $class,
-    ];
+    $data['default-plus-class-override'] = [[
+      'default' => [
+        'class' => '\stdClass',
+      ],
+    ], [ 'class' => $class ], $class];
 
     // Test default configuration plus class specific override plus specific
     // per collection setting.
-    $data['default-plus-class-plus-collection-setting'] = [
-      [
-        'default' => ['class' => '\stdClass'],
-        'test_foo_settings' => ['class' => $class],
+    $data['default-plus-class-plus-collection-setting'] = [[
+      'default' => [
+        'class' => '\stdClass',
+      ],
+      'test_foo_settings' => [
+        'class' => $class,
       ],
-      ['class' => '\stdClass'],
-      $class,
-  ];
+    ], [ 'class' => '\stdClass'], $class];
 
     return $data;
   }
diff --git a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
index caae2d8279..144cc5118b 100644
--- a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
+++ b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
@@ -279,8 +279,7 @@ public function providerTestPluralsFormula() {
           193 => 1,
           194 => 1,
           'default' => 2,
-        ],
-      ],
+        ], ],
       [
         'nplurals=4; plural=(((n==1)||(n==11))?(0):(((n==2)||(n==12))?(1):(((n>2)&&(n<20))?(2):3)));',
         [
diff --git a/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php b/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
index 0c92331197..0dae6ed9c2 100644
--- a/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
@@ -96,9 +96,9 @@ public function testGetWildcardArgument() {
    * Tests getArgument() with a Route, Request, and Account object.
    */
   public function testGetArgumentOrder() {
-    $a1 = $this->getMock('\Drupal\Tests\Component\Utility\Test1Interface');
+    $a1 = $this->getMock('\Drupal\Tests\Component\Utility\TestInterface1');
     $a2 = $this->getMock('\Drupal\Tests\Component\Utility\TestClass');
-    $a3 = $this->getMock('\Drupal\Tests\Component\Utility\Test2Interface');
+    $a3 = $this->getMock('\Drupal\Tests\Component\Utility\TestInterface2');
 
     $objects = [
       't1' => $a1,
@@ -107,12 +107,12 @@ public function testGetArgumentOrder() {
     $wildcards = [$a3];
     $resolver = new ArgumentsResolver([], $objects, $wildcards);
 
-    $callable = function(Test1Interface $t1, TestClass $tc, Test2Interface $t2) {};
+    $callable = function(TestInterface1 $t1, TestClass $tc, TestInterface2 $t2) {};
     $arguments = $resolver->getArguments($callable);
     $this->assertSame([$a1, $a2, $a3], $arguments);
 
     // Test again, but with the arguments in a different order.
-    $callable = function(Test2Interface $t2, TestClass $tc, Test1Interface $t1) {};
+    $callable = function(TestInterface2 $t2, TestClass $tc, TestInterface1 $t1) {};
     $arguments = $resolver->getArguments($callable);
     $this->assertSame([$a3, $a2, $a1], $arguments);
   }
@@ -123,7 +123,7 @@ public function testGetArgumentOrder() {
    * Without the typehint, the wildcard object will not be passed to the callable.
    */
   public function testGetWildcardArgumentNoTypehint() {
-    $a = $this->getMock('\Drupal\Tests\Component\Utility\Test1Interface');
+    $a = $this->getMock('\Drupal\Tests\Component\Utility\TestInterface1');
     $wildcards = [$a];
     $resolver = new ArgumentsResolver([], [], $wildcards);
 
@@ -196,13 +196,13 @@ public function access($foo) {
 /**
  * Provides a test interface.
  */
-interface Test1Interface {
+interface TestInterface1 {
 }
 
 /**
  * Provides a different test interface.
  */
-interface Test2Interface {
+interface TestInterface2 {
 }
 
 function test_access_arguments_resolver_access($foo) {
diff --git a/core/tests/Drupal/Tests/Component/Utility/CryptRandomFallbackTest.php b/core/tests/Drupal/Tests/Component/Utility/CryptRandomFallbackTest.php
index c87af872b3..52d91de33f 100644
--- a/core/tests/Drupal/Tests/Component/Utility/CryptRandomFallbackTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/CryptRandomFallbackTest.php
@@ -52,7 +52,7 @@ public function testRandomBytesFallback() {
 
 namespace Drupal\Component\Utility;
 
-use  Drupal\Tests\Component\Utility\CryptRandomFallbackTest;
+use  \Drupal\Tests\Component\Utility\CryptRandomFallbackTest;
 
 /**
  * Defines a function in same namespace as Drupal\Component\Utility\Crypt.
diff --git a/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php b/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php
index 80fc7ddf33..9601e81f51 100644
--- a/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php
@@ -268,21 +268,13 @@ public function providerTestFilter() {
       [0, 1, '', TRUE], NULL, [1 => 1, 3 => TRUE]
     ];
     $data['1d-array-callable'] = [
-      [0, 1, '', TRUE],
-      function ($element) {
-        return $element === '';
-      },
-      [2 => ''],
+      [0, 1, '', TRUE], function ($element) { return $element === ''; }, [2 => '']
     ];
     $data['2d-array'] = [
       [[0, 1, '', TRUE], [0, 1, 2, 3]], NULL, [0 => [1 => 1, 3 => TRUE], 1 => [1 => 1, 2 => 2, 3 => 3]],
     ];
     $data['2d-array-callable'] = [
-      [[0, 1, '', TRUE], [0, 1, 2, 3]],
-      function ($element) {
-        return is_array($element) || $element === 3;
-      },
-      [0 => [], 1 => [3 => 3]],
+      [[0, 1, '', TRUE], [0, 1, 2, 3]], function ($element) { return is_array($element) || $element === 3; }, [0 => [], 1 => [3 => 3]],
     ];
 
     return $data;
diff --git a/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php b/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php
index d154ac5c6e..af6f9a515c 100644
--- a/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php
@@ -99,4227 +99,4227 @@ public function testRotateDimensions($width, $height, $angle, $exp_width, $exp_h
    */
   public function providerPhp55RotateDimensions() {
     return [
-      [40, 20, -360, 40, 20 ],
-      [40, 20, -359, 39, 20 ],
-      [40, 20, -358, 40, 21 ],
-      [40, 20, -357, 40, 22 ],
-      [40, 20, -356, 40, 22 ],
-      [40, 20, -355, 41, 23 ],
-      [40, 20, -354, 41, 24 ],
-      [40, 20, -353, 41, 24 ],
-      [40, 20, -352, 42, 25 ],
-      [40, 20, -351, 42, 26 ],
-      [40, 20, -350, 42, 26 ],
-      [40, 20, -349, 43, 27 ],
-      [40, 20, -348, 43, 28 ],
-      [40, 20, -347, 42, 27 ],
-      [40, 20, -346, 43, 28 ],
-      [40, 20, -345, 43, 29 ],
-      [40, 20, -344, 44, 30 ],
-      [40, 20, -343, 44, 30 ],
-      [40, 20, -342, 44, 31 ],
-      [40, 20, -341, 44, 32 ],
-      [40, 20, -340, 44, 32 ],
-      [40, 20, -339, 44, 33 ],
-      [40, 20, -338, 44, 33 ],
-      [40, 20, -337, 44, 33 ],
-      [40, 20, -336, 44, 34 ],
-      [40, 20, -335, 44, 34 ],
-      [40, 20, -334, 44, 35 ],
-      [40, 20, -333, 44, 36 ],
-      [40, 20, -332, 44, 36 ],
-      [40, 20, -331, 44, 36 ],
-      [40, 20, -330, 44, 36 ],
-      [40, 20, -329, 44, 37 ],
-      [40, 20, -328, 44, 38 ],
-      [40, 20, -327, 44, 38 ],
-      [40, 20, -326, 44, 39 ],
-      [40, 20, -325, 43, 38 ],
-      [40, 20, -324, 44, 39 ],
-      [40, 20, -323, 43, 40 ],
-      [40, 20, -322, 43, 40 ],
-      [40, 20, -321, 44, 41 ],
-      [40, 20, -320, 43, 40 ],
-      [40, 20, -319, 43, 41 ],
-      [40, 20, -318, 42, 41 ],
-      [40, 20, -317, 43, 42 ],
-      [40, 20, -316, 42, 41 ],
-      [40, 20, -315, 42, 42 ],
-      [40, 20, -314, 41, 42 ],
-      [40, 20, -313, 42, 43 ],
-      [40, 20, -312, 41, 42 ],
-      [40, 20, -311, 41, 43 ],
-      [40, 20, -310, 40, 43 ],
-      [40, 20, -309, 41, 44 ],
-      [40, 20, -308, 40, 43 ],
-      [40, 20, -307, 40, 43 ],
-      [40, 20, -306, 39, 44 ],
-      [40, 20, -305, 38, 43 ],
-      [40, 20, -304, 39, 44 ],
-      [40, 20, -303, 38, 44 ],
-      [40, 20, -302, 38, 44 ],
-      [40, 20, -301, 37, 44 ],
-      [40, 20, -300, 36, 44 ],
-      [40, 20, -299, 36, 44 ],
-      [40, 20, -298, 36, 44 ],
-      [40, 20, -297, 36, 44 ],
-      [40, 20, -296, 35, 44 ],
-      [40, 20, -295, 34, 44 ],
-      [40, 20, -294, 34, 44 ],
-      [40, 20, -293, 33, 44 ],
-      [40, 20, -292, 33, 44 ],
-      [40, 20, -291, 33, 44 ],
-      [40, 20, -290, 32, 44 ],
-      [40, 20, -289, 32, 44 ],
-      [40, 20, -288, 31, 44 ],
-      [40, 20, -287, 30, 44 ],
-      [40, 20, -286, 30, 44 ],
-      [40, 20, -285, 29, 43 ],
-      [40, 20, -284, 28, 43 ],
-      [40, 20, -283, 27, 42 ],
-      [40, 20, -282, 28, 43 ],
-      [40, 20, -281, 27, 43 ],
-      [40, 20, -280, 26, 42 ],
-      [40, 20, -279, 26, 42 ],
-      [40, 20, -278, 25, 42 ],
-      [40, 20, -277, 24, 41 ],
-      [40, 20, -276, 24, 41 ],
-      [40, 20, -275, 23, 41 ],
-      [40, 20, -274, 22, 40 ],
-      [40, 20, -273, 22, 40 ],
-      [40, 20, -272, 21, 40 ],
-      [40, 20, -271, 20, 39 ],
-      [40, 20, -270, 20, 40 ],
-      [40, 20, -269, 20, 39 ],
-      [40, 20, -268, 21, 39 ],
-      [40, 20, -267, 22, 39 ],
-      [40, 20, -266, 22, 39 ],
-      [40, 20, -265, 23, 40 ],
-      [40, 20, -264, 24, 40 ],
-      [40, 20, -263, 24, 40 ],
-      [40, 20, -262, 25, 41 ],
-      [40, 20, -261, 26, 41 ],
-      [40, 20, -260, 26, 41 ],
-      [40, 20, -259, 27, 42 ],
-      [40, 20, -258, 28, 42 ],
-      [40, 20, -257, 27, 41 ],
-      [40, 20, -256, 28, 42 ],
-      [40, 20, -255, 29, 42 ],
-      [40, 20, -254, 30, 43 ],
-      [40, 20, -253, 30, 43 ],
-      [40, 20, -252, 31, 43 ],
-      [40, 20, -251, 32, 43 ],
-      [40, 20, -250, 32, 43 ],
-      [40, 20, -249, 33, 43 ],
-      [40, 20, -248, 33, 43 ],
-      [40, 20, -247, 33, 43 ],
-      [40, 20, -246, 34, 43 ],
-      [40, 20, -245, 34, 43 ],
-      [40, 20, -244, 35, 43 ],
-      [40, 20, -243, 36, 43 ],
-      [40, 20, -242, 36, 43 ],
-      [40, 20, -241, 36, 43 ],
-      [40, 20, -240, 36, 43 ],
-      [40, 20, -239, 37, 43 ],
-      [40, 20, -238, 38, 43 ],
-      [40, 20, -237, 38, 43 ],
-      [40, 20, -236, 39, 43 ],
-      [40, 20, -235, 38, 42 ],
-      [40, 20, -234, 39, 43 ],
-      [40, 20, -233, 40, 42 ],
-      [40, 20, -232, 40, 42 ],
-      [40, 20, -231, 41, 43 ],
-      [40, 20, -230, 40, 42 ],
-      [40, 20, -229, 41, 42 ],
-      [40, 20, -228, 41, 41 ],
-      [40, 20, -227, 42, 42 ],
-      [40, 20, -226, 41, 41 ],
-      [40, 20, -225, 42, 41 ],
-      [40, 20, -224, 42, 40 ],
-      [40, 20, -223, 43, 41 ],
-      [40, 20, -222, 42, 40 ],
-      [40, 20, -221, 43, 40 ],
-      [40, 20, -220, 43, 39 ],
-      [40, 20, -219, 44, 40 ],
-      [40, 20, -218, 43, 39 ],
-      [40, 20, -217, 43, 39 ],
-      [40, 20, -216, 44, 38 ],
-      [40, 20, -215, 43, 37 ],
-      [40, 20, -214, 44, 38 ],
-      [40, 20, -213, 44, 37 ],
-      [40, 20, -212, 44, 37 ],
-      [40, 20, -211, 44, 36 ],
-      [40, 20, -210, 44, 35 ],
-      [40, 20, -209, 44, 35 ],
-      [40, 20, -208, 44, 35 ],
-      [40, 20, -207, 44, 35 ],
-      [40, 20, -206, 44, 34 ],
-      [40, 20, -205, 44, 33 ],
-      [40, 20, -204, 44, 33 ],
-      [40, 20, -203, 44, 32 ],
-      [40, 20, -202, 44, 32 ],
-      [40, 20, -201, 44, 32 ],
-      [40, 20, -200, 44, 31 ],
-      [40, 20, -199, 44, 31 ],
-      [40, 20, -198, 44, 30 ],
-      [40, 20, -197, 44, 29 ],
-      [40, 20, -196, 44, 29 ],
-      [40, 20, -195, 43, 28 ],
-      [40, 20, -194, 43, 27 ],
-      [40, 20, -193, 42, 26 ],
-      [40, 20, -192, 43, 27 ],
-      [40, 20, -191, 43, 26 ],
-      [40, 20, -190, 42, 25 ],
-      [40, 20, -189, 42, 25 ],
-      [40, 20, -188, 42, 24 ],
-      [40, 20, -187, 41, 23 ],
-      [40, 20, -186, 41, 23 ],
-      [40, 20, -185, 41, 22 ],
-      [40, 20, -184, 40, 21 ],
-      [40, 20, -183, 40, 21 ],
-      [40, 20, -182, 40, 20 ],
-      [40, 20, -181, 39, 19 ],
-      [40, 20, -180, 40, 20 ],
-      [40, 20, -179, 39, 19 ],
-      [40, 20, -178, 39, 20 ],
-      [40, 20, -177, 39, 21 ],
-      [40, 20, -176, 39, 21 ],
-      [40, 20, -175, 40, 22 ],
-      [40, 20, -174, 40, 23 ],
-      [40, 20, -173, 40, 23 ],
-      [40, 20, -172, 41, 24 ],
-      [40, 20, -171, 41, 25 ],
-      [40, 20, -170, 41, 25 ],
-      [40, 20, -169, 42, 26 ],
-      [40, 20, -168, 42, 27 ],
-      [40, 20, -167, 41, 26 ],
-      [40, 20, -166, 42, 27 ],
-      [40, 20, -165, 42, 28 ],
-      [40, 20, -164, 43, 29 ],
-      [40, 20, -163, 43, 29 ],
-      [40, 20, -162, 43, 30 ],
-      [40, 20, -161, 43, 31 ],
-      [40, 20, -160, 43, 31 ],
-      [40, 20, -159, 43, 32 ],
-      [40, 20, -158, 43, 32 ],
-      [40, 20, -157, 43, 32 ],
-      [40, 20, -156, 43, 33 ],
-      [40, 20, -155, 43, 33 ],
-      [40, 20, -154, 43, 34 ],
-      [40, 20, -153, 43, 35 ],
-      [40, 20, -152, 43, 35 ],
-      [40, 20, -151, 43, 35 ],
-      [40, 20, -150, 43, 36 ],
-      [40, 20, -149, 43, 36 ],
-      [40, 20, -148, 43, 37 ],
-      [40, 20, -147, 43, 37 ],
-      [40, 20, -146, 43, 38 ],
-      [40, 20, -145, 42, 37 ],
-      [40, 20, -144, 43, 38 ],
-      [40, 20, -143, 42, 39 ],
-      [40, 20, -142, 42, 39 ],
-      [40, 20, -141, 43, 40 ],
-      [40, 20, -140, 42, 39 ],
-      [40, 20, -139, 42, 40 ],
-      [40, 20, -138, 41, 40 ],
-      [40, 20, -137, 42, 41 ],
-      [40, 20, -136, 41, 40 ],
-      [40, 20, -135, 41, 41 ],
-      [40, 20, -134, 40, 41 ],
-      [40, 20, -133, 41, 42 ],
-      [40, 20, -132, 40, 41 ],
-      [40, 20, -131, 40, 42 ],
-      [40, 20, -130, 39, 42 ],
-      [40, 20, -129, 40, 43 ],
-      [40, 20, -128, 39, 42 ],
-      [40, 20, -127, 39, 42 ],
-      [40, 20, -126, 38, 43 ],
-      [40, 20, -125, 37, 42 ],
-      [40, 20, -124, 38, 43 ],
-      [40, 20, -123, 37, 43 ],
-      [40, 20, -122, 37, 43 ],
-      [40, 20, -121, 36, 43 ],
-      [40, 20, -120, 36, 43 ],
-      [40, 20, -119, 35, 43 ],
-      [40, 20, -118, 35, 43 ],
-      [40, 20, -117, 35, 43 ],
-      [40, 20, -116, 34, 43 ],
-      [40, 20, -115, 33, 43 ],
-      [40, 20, -114, 33, 43 ],
-      [40, 20, -113, 32, 43 ],
-      [40, 20, -112, 32, 43 ],
-      [40, 20, -111, 32, 43 ],
-      [40, 20, -110, 31, 43 ],
-      [40, 20, -109, 31, 43 ],
-      [40, 20, -108, 30, 43 ],
-      [40, 20, -107, 29, 43 ],
-      [40, 20, -106, 29, 43 ],
-      [40, 20, -105, 28, 42 ],
-      [40, 20, -104, 27, 42 ],
-      [40, 20, -103, 26, 41 ],
-      [40, 20, -102, 27, 42 ],
-      [40, 20, -101, 26, 42 ],
-      [40, 20, -100, 25, 41 ],
-      [40, 20, -99, 25, 41 ],
-      [40, 20, -98, 24, 41 ],
-      [40, 20, -97, 23, 40 ],
-      [40, 20, -96, 23, 40 ],
-      [40, 20, -95, 22, 40 ],
-      [40, 20, -94, 21, 39 ],
-      [40, 20, -93, 21, 39 ],
-      [40, 20, -92, 20, 39 ],
-      [40, 20, -91, 19, 39 ],
-      [40, 20, -90, 20, 40 ],
-      [40, 20, -89, 19, 39 ],
-      [40, 20, -88, 20, 40 ],
-      [40, 20, -87, 21, 40 ],
-      [40, 20, -86, 21, 40 ],
-      [40, 20, -85, 22, 41 ],
-      [40, 20, -84, 23, 41 ],
-      [40, 20, -83, 23, 41 ],
-      [40, 20, -82, 24, 42 ],
-      [40, 20, -81, 25, 42 ],
-      [40, 20, -80, 25, 42 ],
-      [40, 20, -79, 26, 43 ],
-      [40, 20, -78, 27, 43 ],
-      [40, 20, -77, 26, 42 ],
-      [40, 20, -76, 27, 43 ],
-      [40, 20, -75, 28, 43 ],
-      [40, 20, -74, 29, 44 ],
-      [40, 20, -73, 29, 44 ],
-      [40, 20, -72, 30, 44 ],
-      [40, 20, -71, 31, 44 ],
-      [40, 20, -70, 31, 44 ],
-      [40, 20, -69, 32, 44 ],
-      [40, 20, -68, 32, 44 ],
-      [40, 20, -67, 32, 44 ],
-      [40, 20, -66, 33, 44 ],
-      [40, 20, -65, 33, 44 ],
-      [40, 20, -64, 34, 44 ],
-      [40, 20, -63, 35, 44 ],
-      [40, 20, -62, 35, 44 ],
-      [40, 20, -61, 35, 44 ],
-      [40, 20, -60, 35, 44 ],
-      [40, 20, -59, 36, 44 ],
-      [40, 20, -58, 37, 44 ],
-      [40, 20, -57, 37, 44 ],
-      [40, 20, -56, 38, 44 ],
-      [40, 20, -55, 37, 43 ],
-      [40, 20, -54, 38, 44 ],
-      [40, 20, -53, 39, 43 ],
-      [40, 20, -52, 39, 43 ],
-      [40, 20, -51, 40, 44 ],
-      [40, 20, -50, 39, 43 ],
-      [40, 20, -49, 40, 43 ],
-      [40, 20, -48, 40, 42 ],
-      [40, 20, -47, 41, 43 ],
-      [40, 20, -46, 40, 42 ],
-      [40, 20, -45, 41, 42 ],
-      [40, 20, -44, 41, 41 ],
-      [40, 20, -43, 42, 42 ],
-      [40, 20, -42, 41, 41 ],
-      [40, 20, -41, 42, 41 ],
-      [40, 20, -40, 42, 40 ],
-      [40, 20, -39, 43, 41 ],
-      [40, 20, -38, 42, 40 ],
-      [40, 20, -37, 42, 40 ],
-      [40, 20, -36, 43, 39 ],
-      [40, 20, -35, 42, 38 ],
-      [40, 20, -34, 43, 39 ],
-      [40, 20, -33, 43, 38 ],
-      [40, 20, -32, 43, 38 ],
-      [40, 20, -31, 43, 37 ],
-      [40, 20, -30, 43, 37 ],
-      [40, 20, -29, 43, 36 ],
-      [40, 20, -28, 43, 36 ],
-      [40, 20, -27, 43, 36 ],
-      [40, 20, -26, 43, 35 ],
-      [40, 20, -25, 43, 34 ],
-      [40, 20, -24, 43, 34 ],
-      [40, 20, -23, 43, 33 ],
-      [40, 20, -22, 43, 33 ],
-      [40, 20, -21, 43, 33 ],
-      [40, 20, -20, 43, 32 ],
-      [40, 20, -19, 43, 32 ],
-      [40, 20, -18, 43, 31 ],
-      [40, 20, -17, 43, 30 ],
-      [40, 20, -16, 43, 30 ],
-      [40, 20, -15, 42, 29 ],
-      [40, 20, -14, 42, 28 ],
-      [40, 20, -13, 41, 27 ],
-      [40, 20, -12, 42, 28 ],
-      [40, 20, -11, 42, 27 ],
-      [40, 20, -10, 41, 26 ],
-      [40, 20, -9, 41, 26 ],
-      [40, 20, -8, 41, 25 ],
-      [40, 20, -7, 40, 24 ],
-      [40, 20, -6, 40, 24 ],
-      [40, 20, -5, 40, 23 ],
-      [40, 20, -4, 39, 22 ],
-      [40, 20, -3, 39, 22 ],
-      [40, 20, -2, 39, 21 ],
-      [40, 20, -1, 39, 20 ],
-      [40, 20, 0, 40, 20 ],
-      [40, 20, 1, 39, 20 ],
-      [40, 20, 2, 40, 21 ],
-      [40, 20, 3, 40, 22 ],
-      [40, 20, 4, 40, 22 ],
-      [40, 20, 5, 41, 23 ],
-      [40, 20, 6, 41, 24 ],
-      [40, 20, 7, 41, 24 ],
-      [40, 20, 8, 42, 25 ],
-      [40, 20, 9, 42, 26 ],
-      [40, 20, 10, 42, 26 ],
-      [40, 20, 11, 43, 27 ],
-      [40, 20, 12, 43, 28 ],
-      [40, 20, 13, 42, 27 ],
-      [40, 20, 14, 43, 28 ],
-      [40, 20, 15, 43, 29 ],
-      [40, 20, 16, 44, 30 ],
-      [40, 20, 17, 44, 30 ],
-      [40, 20, 18, 44, 31 ],
-      [40, 20, 19, 44, 32 ],
-      [40, 20, 20, 44, 32 ],
-      [40, 20, 21, 44, 33 ],
-      [40, 20, 22, 44, 33 ],
-      [40, 20, 23, 44, 33 ],
-      [40, 20, 24, 44, 34 ],
-      [40, 20, 25, 44, 34 ],
-      [40, 20, 26, 44, 35 ],
-      [40, 20, 27, 44, 36 ],
-      [40, 20, 28, 44, 36 ],
-      [40, 20, 29, 44, 36 ],
-      [40, 20, 30, 44, 36 ],
-      [40, 20, 31, 44, 37 ],
-      [40, 20, 32, 44, 38 ],
-      [40, 20, 33, 44, 38 ],
-      [40, 20, 34, 44, 39 ],
-      [40, 20, 35, 43, 38 ],
-      [40, 20, 36, 44, 39 ],
-      [40, 20, 37, 43, 40 ],
-      [40, 20, 38, 43, 40 ],
-      [40, 20, 39, 44, 41 ],
-      [40, 20, 40, 43, 40 ],
-      [40, 20, 41, 43, 41 ],
-      [40, 20, 42, 42, 41 ],
-      [40, 20, 43, 43, 42 ],
-      [40, 20, 44, 42, 41 ],
-      [40, 20, 45, 42, 42 ],
-      [40, 20, 46, 41, 42 ],
-      [40, 20, 47, 42, 43 ],
-      [40, 20, 48, 41, 42 ],
-      [40, 20, 49, 41, 43 ],
-      [40, 20, 50, 40, 43 ],
-      [40, 20, 51, 41, 44 ],
-      [40, 20, 52, 40, 43 ],
-      [40, 20, 53, 40, 43 ],
-      [40, 20, 54, 39, 44 ],
-      [40, 20, 55, 38, 43 ],
-      [40, 20, 56, 39, 44 ],
-      [40, 20, 57, 38, 44 ],
-      [40, 20, 58, 38, 44 ],
-      [40, 20, 59, 37, 44 ],
-      [40, 20, 60, 36, 44 ],
-      [40, 20, 61, 36, 44 ],
-      [40, 20, 62, 36, 44 ],
-      [40, 20, 63, 36, 44 ],
-      [40, 20, 64, 35, 44 ],
-      [40, 20, 65, 34, 44 ],
-      [40, 20, 66, 34, 44 ],
-      [40, 20, 67, 33, 44 ],
-      [40, 20, 68, 33, 44 ],
-      [40, 20, 69, 33, 44 ],
-      [40, 20, 70, 32, 44 ],
-      [40, 20, 71, 32, 44 ],
-      [40, 20, 72, 31, 44 ],
-      [40, 20, 73, 30, 44 ],
-      [40, 20, 74, 30, 44 ],
-      [40, 20, 75, 29, 43 ],
-      [40, 20, 76, 28, 43 ],
-      [40, 20, 77, 27, 42 ],
-      [40, 20, 78, 28, 43 ],
-      [40, 20, 79, 27, 43 ],
-      [40, 20, 80, 26, 42 ],
-      [40, 20, 81, 26, 42 ],
-      [40, 20, 82, 25, 42 ],
-      [40, 20, 83, 24, 41 ],
-      [40, 20, 84, 24, 41 ],
-      [40, 20, 85, 23, 41 ],
-      [40, 20, 86, 22, 40 ],
-      [40, 20, 87, 22, 40 ],
-      [40, 20, 88, 21, 40 ],
-      [40, 20, 89, 20, 39 ],
-      [40, 20, 90, 20, 40 ],
-      [40, 20, 91, 20, 39 ],
-      [40, 20, 92, 21, 39 ],
-      [40, 20, 93, 22, 39 ],
-      [40, 20, 94, 22, 39 ],
-      [40, 20, 95, 23, 40 ],
-      [40, 20, 96, 24, 40 ],
-      [40, 20, 97, 24, 40 ],
-      [40, 20, 98, 25, 41 ],
-      [40, 20, 99, 26, 41 ],
-      [40, 20, 100, 26, 41 ],
-      [40, 20, 101, 27, 42 ],
-      [40, 20, 102, 28, 42 ],
-      [40, 20, 103, 27, 41 ],
-      [40, 20, 104, 28, 42 ],
-      [40, 20, 105, 29, 42 ],
-      [40, 20, 106, 30, 43 ],
-      [40, 20, 107, 30, 43 ],
-      [40, 20, 108, 31, 43 ],
-      [40, 20, 109, 32, 43 ],
-      [40, 20, 110, 32, 43 ],
-      [40, 20, 111, 33, 43 ],
-      [40, 20, 112, 33, 43 ],
-      [40, 20, 113, 33, 43 ],
-      [40, 20, 114, 34, 43 ],
-      [40, 20, 115, 34, 43 ],
-      [40, 20, 116, 35, 43 ],
-      [40, 20, 117, 36, 43 ],
-      [40, 20, 118, 36, 43 ],
-      [40, 20, 119, 36, 43 ],
-      [40, 20, 120, 36, 43 ],
-      [40, 20, 121, 37, 43 ],
-      [40, 20, 122, 38, 43 ],
-      [40, 20, 123, 38, 43 ],
-      [40, 20, 124, 39, 43 ],
-      [40, 20, 125, 38, 42 ],
-      [40, 20, 126, 39, 43 ],
-      [40, 20, 127, 40, 42 ],
-      [40, 20, 128, 40, 42 ],
-      [40, 20, 129, 41, 43 ],
-      [40, 20, 130, 40, 42 ],
-      [40, 20, 131, 41, 42 ],
-      [40, 20, 132, 41, 41 ],
-      [40, 20, 133, 42, 42 ],
-      [40, 20, 134, 41, 41 ],
-      [40, 20, 135, 42, 41 ],
-      [40, 20, 136, 42, 40 ],
-      [40, 20, 137, 43, 41 ],
-      [40, 20, 138, 42, 40 ],
-      [40, 20, 139, 43, 40 ],
-      [40, 20, 140, 43, 39 ],
-      [40, 20, 141, 44, 40 ],
-      [40, 20, 142, 43, 39 ],
-      [40, 20, 143, 43, 39 ],
-      [40, 20, 144, 44, 38 ],
-      [40, 20, 145, 43, 37 ],
-      [40, 20, 146, 44, 38 ],
-      [40, 20, 147, 44, 37 ],
-      [40, 20, 148, 44, 37 ],
-      [40, 20, 149, 44, 36 ],
-      [40, 20, 150, 44, 35 ],
-      [40, 20, 151, 44, 35 ],
-      [40, 20, 152, 44, 35 ],
-      [40, 20, 153, 44, 35 ],
-      [40, 20, 154, 44, 34 ],
-      [40, 20, 155, 44, 33 ],
-      [40, 20, 156, 44, 33 ],
-      [40, 20, 157, 44, 32 ],
-      [40, 20, 158, 44, 32 ],
-      [40, 20, 159, 44, 32 ],
-      [40, 20, 160, 44, 31 ],
-      [40, 20, 161, 44, 31 ],
-      [40, 20, 162, 44, 30 ],
-      [40, 20, 163, 44, 29 ],
-      [40, 20, 164, 44, 29 ],
-      [40, 20, 165, 43, 28 ],
-      [40, 20, 166, 43, 27 ],
-      [40, 20, 167, 42, 26 ],
-      [40, 20, 168, 43, 27 ],
-      [40, 20, 169, 43, 26 ],
-      [40, 20, 170, 42, 25 ],
-      [40, 20, 171, 42, 25 ],
-      [40, 20, 172, 42, 24 ],
-      [40, 20, 173, 41, 23 ],
-      [40, 20, 174, 41, 23 ],
-      [40, 20, 175, 41, 22 ],
-      [40, 20, 176, 40, 21 ],
-      [40, 20, 177, 40, 21 ],
-      [40, 20, 178, 40, 20 ],
-      [40, 20, 179, 39, 19 ],
-      [40, 20, 180, 40, 20 ],
-      [40, 20, 181, 39, 19 ],
-      [40, 20, 182, 39, 20 ],
-      [40, 20, 183, 39, 21 ],
-      [40, 20, 184, 39, 21 ],
-      [40, 20, 185, 40, 22 ],
-      [40, 20, 186, 40, 23 ],
-      [40, 20, 187, 40, 23 ],
-      [40, 20, 188, 41, 24 ],
-      [40, 20, 189, 41, 25 ],
-      [40, 20, 190, 41, 25 ],
-      [40, 20, 191, 42, 26 ],
-      [40, 20, 192, 42, 27 ],
-      [40, 20, 193, 41, 26 ],
-      [40, 20, 194, 42, 27 ],
-      [40, 20, 195, 42, 28 ],
-      [40, 20, 196, 43, 29 ],
-      [40, 20, 197, 43, 29 ],
-      [40, 20, 198, 43, 30 ],
-      [40, 20, 199, 43, 31 ],
-      [40, 20, 200, 43, 31 ],
-      [40, 20, 201, 43, 32 ],
-      [40, 20, 202, 43, 32 ],
-      [40, 20, 203, 43, 32 ],
-      [40, 20, 204, 43, 33 ],
-      [40, 20, 205, 43, 33 ],
-      [40, 20, 206, 43, 34 ],
-      [40, 20, 207, 43, 35 ],
-      [40, 20, 208, 43, 35 ],
-      [40, 20, 209, 43, 35 ],
-      [40, 20, 210, 43, 36 ],
-      [40, 20, 211, 43, 36 ],
-      [40, 20, 212, 43, 37 ],
-      [40, 20, 213, 43, 37 ],
-      [40, 20, 214, 43, 38 ],
-      [40, 20, 215, 42, 37 ],
-      [40, 20, 216, 43, 38 ],
-      [40, 20, 217, 42, 39 ],
-      [40, 20, 218, 42, 39 ],
-      [40, 20, 219, 43, 40 ],
-      [40, 20, 220, 42, 39 ],
-      [40, 20, 221, 42, 40 ],
-      [40, 20, 222, 41, 40 ],
-      [40, 20, 223, 42, 41 ],
-      [40, 20, 224, 41, 40 ],
-      [40, 20, 225, 41, 41 ],
-      [40, 20, 226, 40, 41 ],
-      [40, 20, 227, 41, 42 ],
-      [40, 20, 228, 40, 41 ],
-      [40, 20, 229, 40, 42 ],
-      [40, 20, 230, 39, 42 ],
-      [40, 20, 231, 40, 43 ],
-      [40, 20, 232, 39, 42 ],
-      [40, 20, 233, 39, 42 ],
-      [40, 20, 234, 38, 43 ],
-      [40, 20, 235, 37, 42 ],
-      [40, 20, 236, 38, 43 ],
-      [40, 20, 237, 37, 43 ],
-      [40, 20, 238, 37, 43 ],
-      [40, 20, 239, 36, 43 ],
-      [40, 20, 240, 36, 43 ],
-      [40, 20, 241, 35, 43 ],
-      [40, 20, 242, 35, 43 ],
-      [40, 20, 243, 35, 43 ],
-      [40, 20, 244, 34, 43 ],
-      [40, 20, 245, 33, 43 ],
-      [40, 20, 246, 33, 43 ],
-      [40, 20, 247, 32, 43 ],
-      [40, 20, 248, 32, 43 ],
-      [40, 20, 249, 32, 43 ],
-      [40, 20, 250, 31, 43 ],
-      [40, 20, 251, 31, 43 ],
-      [40, 20, 252, 30, 43 ],
-      [40, 20, 253, 29, 43 ],
-      [40, 20, 254, 29, 43 ],
-      [40, 20, 255, 28, 42 ],
-      [40, 20, 256, 27, 42 ],
-      [40, 20, 257, 26, 41 ],
-      [40, 20, 258, 27, 42 ],
-      [40, 20, 259, 26, 42 ],
-      [40, 20, 260, 25, 41 ],
-      [40, 20, 261, 25, 41 ],
-      [40, 20, 262, 24, 41 ],
-      [40, 20, 263, 23, 40 ],
-      [40, 20, 264, 23, 40 ],
-      [40, 20, 265, 22, 40 ],
-      [40, 20, 266, 21, 39 ],
-      [40, 20, 267, 21, 39 ],
-      [40, 20, 268, 20, 39 ],
-      [40, 20, 269, 19, 39 ],
-      [40, 20, 270, 20, 40 ],
-      [40, 20, 271, 19, 39 ],
-      [40, 20, 272, 20, 40 ],
-      [40, 20, 273, 21, 40 ],
-      [40, 20, 274, 21, 40 ],
-      [40, 20, 275, 22, 41 ],
-      [40, 20, 276, 23, 41 ],
-      [40, 20, 277, 23, 41 ],
-      [40, 20, 278, 24, 42 ],
-      [40, 20, 279, 25, 42 ],
-      [40, 20, 280, 25, 42 ],
-      [40, 20, 281, 26, 43 ],
-      [40, 20, 282, 27, 43 ],
-      [40, 20, 283, 26, 42 ],
-      [40, 20, 284, 27, 43 ],
-      [40, 20, 285, 28, 43 ],
-      [40, 20, 286, 29, 44 ],
-      [40, 20, 287, 29, 44 ],
-      [40, 20, 288, 30, 44 ],
-      [40, 20, 289, 31, 44 ],
-      [40, 20, 290, 31, 44 ],
-      [40, 20, 291, 32, 44 ],
-      [40, 20, 292, 32, 44 ],
-      [40, 20, 293, 32, 44 ],
-      [40, 20, 294, 33, 44 ],
-      [40, 20, 295, 33, 44 ],
-      [40, 20, 296, 34, 44 ],
-      [40, 20, 297, 35, 44 ],
-      [40, 20, 298, 35, 44 ],
-      [40, 20, 299, 35, 44 ],
-      [40, 20, 300, 35, 44 ],
-      [40, 20, 301, 36, 44 ],
-      [40, 20, 302, 37, 44 ],
-      [40, 20, 303, 37, 44 ],
-      [40, 20, 304, 38, 44 ],
-      [40, 20, 305, 37, 43 ],
-      [40, 20, 306, 38, 44 ],
-      [40, 20, 307, 39, 43 ],
-      [40, 20, 308, 39, 43 ],
-      [40, 20, 309, 40, 44 ],
-      [40, 20, 310, 39, 43 ],
-      [40, 20, 311, 40, 43 ],
-      [40, 20, 312, 40, 42 ],
-      [40, 20, 313, 41, 43 ],
-      [40, 20, 314, 40, 42 ],
-      [40, 20, 315, 41, 42 ],
-      [40, 20, 316, 41, 41 ],
-      [40, 20, 317, 42, 42 ],
-      [40, 20, 318, 41, 41 ],
-      [40, 20, 319, 42, 41 ],
-      [40, 20, 320, 42, 40 ],
-      [40, 20, 321, 43, 41 ],
-      [40, 20, 322, 42, 40 ],
-      [40, 20, 323, 42, 40 ],
-      [40, 20, 324, 43, 39 ],
-      [40, 20, 325, 42, 38 ],
-      [40, 20, 326, 43, 39 ],
-      [40, 20, 327, 43, 38 ],
-      [40, 20, 328, 43, 38 ],
-      [40, 20, 329, 43, 37 ],
-      [40, 20, 330, 43, 37 ],
-      [40, 20, 331, 43, 36 ],
-      [40, 20, 332, 43, 36 ],
-      [40, 20, 333, 43, 36 ],
-      [40, 20, 334, 43, 35 ],
-      [40, 20, 335, 43, 34 ],
-      [40, 20, 336, 43, 34 ],
-      [40, 20, 337, 43, 33 ],
-      [40, 20, 338, 43, 33 ],
-      [40, 20, 339, 43, 33 ],
-      [40, 20, 340, 43, 32 ],
-      [40, 20, 341, 43, 32 ],
-      [40, 20, 342, 43, 31 ],
-      [40, 20, 343, 43, 30 ],
-      [40, 20, 344, 43, 30 ],
-      [40, 20, 345, 42, 29 ],
-      [40, 20, 346, 42, 28 ],
-      [40, 20, 347, 41, 27 ],
-      [40, 20, 348, 42, 28 ],
-      [40, 20, 349, 42, 27 ],
-      [40, 20, 350, 41, 26 ],
-      [40, 20, 351, 41, 26 ],
-      [40, 20, 352, 41, 25 ],
-      [40, 20, 353, 40, 24 ],
-      [40, 20, 354, 40, 24 ],
-      [40, 20, 355, 40, 23 ],
-      [40, 20, 356, 39, 22 ],
-      [40, 20, 357, 39, 22 ],
-      [40, 20, 358, 39, 21 ],
-      [40, 20, 359, 39, 20 ],
-      [40, 20, 360, 40, 20 ],
-      [40, 20, 110.1, 32, 43 ],
-      [40, 20, 344.9, 42, 29 ],
-      [40, 20, 142.85, 43, 39 ],
-      [40, 20, -106.52, 29, 43 ],
-      [40, 20, -295.78, 35, 45 ],
-      [40, 20, 287.58, 30, 44 ],
-      [40, 20, -3.62, 39, 22 ],
-      [40, 20, -33.96, 43, 39 ],
-      [40, 20, 136.46, 42, 40 ],
-      [40, 20, -293.72, 34, 44 ],
-      [40, 20, 10.71, 43, 27 ],
-      [40, 20, -80.02, 25, 42 ],
-      [40, 20, 258.53, 26, 42 ],
-      [40, 20, -110.41, 31, 43 ],
-      [40, 20, 340.87, 43, 32 ],
-      [40, 20, 347.4, 42, 28 ],
-      [40, 20, -277.97, 25, 42 ],
-      [40, 20, 126.74, 39, 43 ],
-      [40, 20, 70.99, 32, 44 ],
-      [40, 20, 57.54, 38, 44 ],
-      [40, 20, 251.66, 30, 42 ],
-      [40, 20, -91.15, 19, 39 ],
-      [40, 20, 164.92, 43, 28 ],
-      [40, 20, -27.14, 43, 36 ],
-      [40, 20, 230.28, 39, 42 ],
-      [40, 20, 271.37, 19, 39 ],
-      [40, 20, -207.19, 44, 35 ],
-      [40, 20, -58.19, 37, 44 ],
-      [40, 20, -339.34, 44, 33 ],
-      [40, 20, 352.45, 41, 25 ],
-      [40, 20, -245.62, 34, 43 ],
-      [40, 20, 130.77, 41, 42 ],
-      [40, 20, 337.34, 43, 33 ],
-      [40, 20, 257.24, 27, 42 ],
-      [40, 20, -335.75, 44, 34 ],
-      [40, 20, -318.44, 42, 41 ],
-      [40, 20, 184.82, 40, 22 ],
-      [40, 20, 20.64, 44, 33 ],
-      [40, 20, 7.6, 42, 25 ],
-      [40, 20, -38.72, 43, 41 ],
-      [40, 20, 86.92, 22, 40 ],
-      [40, 20, -341.69, 43, 31 ],
-      [40, 20, 241.26, 36, 44 ],
-      [40, 20, -14.56, 42, 29 ],
-      [40, 20, -92.1, 20, 39 ],
-      [40, 20, 222.12, 41, 40 ],
-      [40, 20, -27.16, 43, 36 ],
-      [40, 20, -10.06, 41, 26 ],
-      [40, 20, -11.15, 42, 27 ],
-      [40, 20, -316.18, 42, 41 ],
-      [40, 20, -312.53, 42, 43 ],
-      [40, 20, -119.49, 35, 43 ],
-      [40, 20, -47.32, 41, 43 ],
-      [40, 20, 212.4, 43, 37 ],
-      [40, 20, 213.37, 43, 38 ],
-      [40, 20, -177.05, 39, 21 ],
-      [40, 20, 123.76, 39, 43 ],
-      [40, 20, -353.82, 41, 24 ],
-      [40, 20, 124.76, 38, 42 ],
-      [40, 20, 144.43, 44, 38 ],
-      [40, 20, 358.63, 39, 20 ],
-      [40, 20, 239.15, 36, 43 ],
-      [40, 20, -84.81, 22, 41 ],
-      [40, 20, 335.97, 43, 34 ],
-      [40, 20, 136.38, 42, 40 ],
-      [40, 20, -60.55, 35, 44 ],
-      [40, 20, -342.47, 44, 31 ],
-      [40, 20, -38.8, 43, 41 ],
-      [40, 20, 320.09, 42, 40 ],
-      [40, 20, 25.13, 44, 34 ],
-      [40, 20, 282.48, 27, 43 ],
-      [40, 20, 47, 42, 43 ],
-      [40, 20, 43.45, 43, 42 ],
-      [40, 20, 163.73, 44, 29 ],
-      [40, 20, -327.56, 44, 38 ],
-      [40, 20, 311.35, 40, 43 ],
-      [40, 20, 25.85, 44, 35 ],
-      [40, 20, 5.28, 41, 23 ],
-      [40, 20, -58.72, 36, 44 ],
-      [40, 20, -345.3, 43, 29 ],
-      [40, 20, 49.11, 41, 43 ],
-      [40, 20, -11.25, 42, 27 ],
-      [40, 20, -104.78, 28, 42 ],
-      [40, 20, -358.22, 40, 21 ],
-      [40, 20, -158.86, 43, 32 ],
-      [40, 20, -251.42, 31, 42 ],
-      [40, 20, -175.27, 40, 22 ],
-      [40, 20, 324.91, 42, 38 ],
-      [40, 20, -245.24, 34, 43 ],
-      [40, 20, 309.5, 39, 43 ],
-      [40, 20, 109.34, 32, 43 ],
-      [40, 20, -246.61, 33, 43 ],
-      [40, 20, 188.64, 41, 25 ],
-      [40, 20, -335.47, 44, 34 ],
-      [40, 20, -270.64, 20, 39 ],
-      [40, 20, -34.98, 42, 38 ],
-      [40, 20, -36.02, 43, 39 ],
-      [40, 20, -253.11, 30, 43 ],
-      [40, 20, 286.22, 29, 44 ],
-      [40, 20, -75.94, 27, 43 ],
-      [40, 20, 132.03, 41, 41 ],
-      [40, 20, 208.69, 44, 36 ],
-      [40, 20, 331.07, 44, 37 ],
-      [40, 20, -184.53, 41, 22 ],
-      [40, 20, 12.42, 43, 28 ],
-      [40, 20, -356.5, 40, 22 ],
-      [40, 20, -233.19, 39, 43 ],
-      [40, 20, -321.73, 43, 40 ],
-      [40, 20, 8.78, 42, 26 ],
-      [40, 20, 68.1, 33, 44 ],
-      [40, 20, -307.02, 40, 43 ],
-      [40, 20, -302.11, 38, 44 ],
-      [40, 20, -303.15, 38, 44 ],
-      [40, 20, -51.8, 39, 43 ],
-      [40, 20, -300.33, 37, 44 ],
-      [40, 20, -102, 27, 42 ],
-      [40, 20, 56.78, 38, 44 ],
-      [40, 20, -115.59, 34, 44 ],
-      [40, 20, -137.09, 42, 41 ],
-      [40, 20, 171.55, 42, 24 ],
-      [40, 20, -166.1, 42, 27 ],
-      [40, 20, 332.25, 43, 36 ],
-      [40, 20, 284.95, 28, 43 ],
-      [40, 20, -337.46, 44, 33 ],
-      [40, 20, 356.79, 39, 22 ],
-      [40, 20, -345.7, 43, 28 ],
-      [40, 20, -12.44, 42, 28 ],
-      [40, 20, -39.24, 42, 40 ],
-      [40, 20, -238.81, 37, 43 ],
-      [40, 20, -86.22, 21, 40 ],
-      [40, 20, 244.83, 34, 44 ],
-      [40, 20, 253.22, 29, 43 ],
-      [40, 20, -237.53, 38, 43 ],
-      [40, 20, 215.89, 43, 38 ],
-      [40, 20, -291.31, 33, 44 ],
-      [40, 20, 134.89, 42, 41 ],
-      [40, 20, 219.39, 42, 39 ],
-      [40, 20, -164.5, 42, 28 ],
-      [40, 20, 173.17, 41, 23 ],
-      [40, 20, -131.83, 40, 41 ],
-      [40, 20, 263.61, 23, 40 ],
-      [40, 20, 226.15, 40, 41 ],
-      [40, 20, -73.94, 29, 44 ],
-      [40, 20, 320.47, 42, 40 ],
-      [40, 20, -185.65, 41, 22 ],
-      [40, 20, -14.26, 42, 28 ],
-      [40, 20, -141.54, 42, 39 ],
-      [40, 20, 231.14, 40, 43 ],
-      [40, 20, 230.15, 39, 42 ],
-      [40, 20, 81.38, 25, 42 ],
-      [40, 20, 42.68, 43, 42 ],
-      [40, 20, -295.95, 35, 44 ],
-      [40, 20, 53.63, 39, 44 ],
-      [40, 20, -32.37, 43, 38 ],
-      [40, 20, -273.41, 22, 40 ],
-      [40, 20, 50.41, 40, 43 ],
-      [40, 20, -18.07, 43, 31 ],
-      [40, 20, 74.16, 29, 43 ],
-      [40, 20, -348.83, 43, 27 ],
-      [40, 20, 103.13, 28, 42 ],
-      [40, 20, 347.94, 42, 28 ],
-      [40, 20, 256.01, 27, 42 ],
-      [40, 20, -3.66, 39, 22 ],
-      [40, 20, -249.59, 32, 43 ],
-      [40, 20, 111.89, 33, 43 ],
-      [40, 20, 65.03, 34, 44 ],
-      [40, 20, 245.3, 33, 43 ],
-      [40, 20, -28.72, 44, 37 ],
-      [40, 20, 260.54, 25, 41 ],
-      [40, 20, 58.47, 37, 44 ],
-      [40, 20, 199.45, 43, 31 ],
-      [40, 20, 164.15, 43, 28 ],
-      [40, 20, -75.38, 28, 43 ],
-      [40, 20, -234.49, 39, 43 ],
-      [40, 20, 124.61, 38, 42 ],
-      [40, 20, 98.97, 26, 41 ],
-      [40, 20, 111.25, 33, 43 ],
-      [40, 20, 343.08, 43, 30 ],
-      [40, 20, -29.9, 43, 36 ],
-      [40, 20, -18.6, 42, 31 ],
-      [40, 20, 64.45, 35, 45 ],
-      [40, 20, -347.22, 43, 28 ],
-      [40, 20, 45.46, 42, 42 ],
-      [40, 20, -241.93, 36, 43 ],
-      [40, 20, -19.59, 43, 32 ],
-      [40, 20, 132.05, 41, 41 ],
-      [40, 20, 168.49, 43, 26 ],
-      [40, 20, 322.34, 42, 40 ],
-      [40, 20, -153.79, 43, 34 ],
-      [40, 20, 179.66, 39, 19 ],
-      [40, 20, 65.47, 34, 44 ],
-      [40, 20, -165.85, 42, 27 ],
-      [40, 20, 75.66, 28, 43 ],
-      [40, 20, -298.19, 36, 44 ],
-      [40, 20, -55.44, 37, 43 ],
-      [40, 20, -172.45, 41, 24 ],
-      [40, 20, 126.84, 39, 43 ],
-      [40, 20, -170.14, 41, 25 ],
-      [40, 20, 158.84, 44, 32 ],
-      [40, 20, 27.38, 44, 36 ],
-      [40, 20, 248.33, 32, 43 ],
-      [40, 20, -1.71, 39, 21 ],
-      [40, 20, -168.47, 42, 26 ],
-      [40, 20, -187.06, 41, 23 ],
-      [40, 20, 123.8, 39, 43 ],
-      [40, 20, 316.15, 41, 41 ],
-      [40, 20, 271.92, 20, 40 ],
-      [40, 20, -124.95, 37, 42 ],
-      [40, 20, 299.22, 35, 44 ],
-      [40, 20, -117.99, 35, 43 ],
-      [40, 20, 216.46, 43, 38 ],
-      [40, 20, 3.67, 40, 22 ],
-      [40, 20, -105.2, 28, 42 ],
-      [40, 20, -98.09, 24, 41 ],
-      [40, 20, 121.74, 38, 44 ],
-      [40, 20, 235.21, 37, 42 ],
-      [40, 20, -326.05, 44, 39 ],
-      [40, 20, -69.77, 31, 44 ],
-      [40, 20, 197.55, 43, 30 ],
-      [40, 20, -119.83, 35, 43 ],
-      [40, 20, -250.11, 32, 43 ],
-      [40, 20, -96.99, 23, 40 ],
-      [40, 20, 74.32, 29, 43 ],
-      [40, 20, 185.56, 40, 22 ],
-      [40, 20, -35.18, 43, 39 ],
-      [40, 20, -341.13, 43, 31 ],
-      [40, 20, -346.9, 43, 28 ],
-      [40, 20, -268.34, 21, 39 ],
-      [40, 20, -151.26, 44, 36 ],
-      [40, 20, 171.95, 42, 24 ],
-      [40, 20, 119.05, 36, 43 ],
-      [40, 20, -262.94, 24, 40 ],
-      [40, 20, -189.77, 42, 25 ],
-      [40, 20, 310.58, 40, 43 ],
-      [40, 20, -89.99, 19, 39 ],
-      [40, 20, 294.04, 33, 44 ],
-      [40, 20, 266.72, 21, 39 ],
-      [40, 20, -178.07, 39, 20 ],
-      [40, 20, -190.92, 43, 26 ],
-      [40, 20, 205.94, 43, 34 ],
-      [40, 20, 63.94, 35, 44 ],
-      [40, 20, -334.47, 45, 35 ],
-      [40, 20, -150.4, 43, 35 ],
-      [40, 20, 318.74, 42, 41 ],
-      [40, 20, -72.56, 29, 44 ],
-      [40, 20, 331.35, 44, 37 ],
-      [40, 20, 193.95, 42, 27 ],
-      [40, 20, -38.6, 42, 40 ],
-      [40, 20, -98.43, 24, 41 ],
-      [40, 20, 31.49, 44, 37 ],
-      [40, 20, 201.57, 43, 32 ],
-      [40, 20, 11.46, 43, 27 ],
-      [40, 20, 294.51, 33, 44 ],
-      [40, 20, -84.11, 23, 41 ],
-      [40, 20, -162.99, 43, 29 ],
-      [40, 20, -100.68, 26, 42 ],
-      [40, 20, -65.23, 33, 44 ],
-      [40, 20, -149.88, 43, 36 ],
-      [40, 20, -9.01, 41, 26 ],
-      [40, 20, 143.51, 44, 38 ],
-      [40, 20, -337.94, 45, 34 ],
-      [40, 20, -249.97, 32, 43 ],
-      [40, 20, 240.58, 35, 43 ],
-      [40, 20, -167.7, 42, 27 ],
-      [40, 20, -299.39, 36, 44 ],
-      [40, 20, -209.42, 44, 35 ],
-      [40, 20, -233.67, 39, 43 ],
-      [40, 20, 327.34, 43, 38 ],
-      [40, 20, -27.49, 43, 36 ],
-      [40, 20, -64.59, 34, 45 ],
-      [40, 20, 173.27, 41, 23 ],
-      [40, 20, -323.55, 44, 39 ],
-      [40, 20, -39.05, 43, 41 ],
-      [40, 20, -337.14, 44, 33 ],
-      [40, 20, 355.2, 40, 23 ],
-      [40, 20, 248.4, 32, 43 ],
-      [40, 20, 354.22, 40, 24 ],
-      [40, 20, 189.14, 41, 25 ],
-      [40, 20, -150.21, 43, 35 ],
-      [40, 20, -104.22, 27, 42 ],
-      [40, 20, -139.37, 42, 40 ],
-      [40, 20, -308.64, 40, 43 ],
-      [40, 20, 267.25, 20, 39 ],
-      [40, 20, -204.87, 44, 33 ],
-      [40, 20, -32.74, 43, 38 ],
-      [40, 20, -255.74, 28, 42 ],
-      [40, 20, 54.45, 39, 44 ],
-      [40, 20, 262.03, 24, 41 ],
-      [40, 20, -45.61, 40, 42 ],
-      [40, 20, -314.56, 42, 42 ],
-      [40, 20, 45.53, 42, 42 ],
-      [40, 20, -23.54, 43, 33 ],
-      [40, 20, -204.53, 44, 33 ],
-      [40, 20, -73.9, 29, 44 ],
-      [40, 20, 168.76, 43, 26 ],
-      [40, 20, -143.92, 43, 38 ],
-      [40, 20, 76.69, 28, 43 ],
-      [40, 20, 295.09, 33, 44 ],
-      [40, 20, -176.59, 39, 21 ],
-      [40, 20, -310.8, 41, 43 ],
-      [40, 20, -129.5, 39, 42 ],
-      [40, 20, 356.69, 39, 22 ],
-      [40, 20, -274.35, 23, 41 ],
-      [40, 20, 191.45, 42, 26 ],
-      [40, 20, -340.45, 44, 32 ],
-      [40, 20, -279.15, 26, 42 ],
-      [40, 20, 79.84, 27, 43 ],
-      [40, 20, -346.24, 43, 28 ],
-      [40, 20, 269.99, 19, 39 ],
-      [40, 20, 289.64, 31, 44 ],
-      [40, 20, -90.45, 19, 39 ],
-      [40, 20, -229.38, 41, 42 ],
-      [40, 20, 341.01, 43, 32 ],
-      [40, 20, -183.2, 40, 21 ],
-      [40, 20, -74.25, 28, 43 ],
-      [40, 20, -51.74, 39, 43 ],
-      [40, 20, -78.93, 26, 43 ],
-      [40, 20, 340.21, 43, 32 ],
-      [40, 20, -149.72, 43, 36 ],
-      [40, 20, 235.46, 37, 42 ],
-      [40, 20, -334.36, 45, 35 ],
-      [40, 20, 255.82, 27, 42 ],
-      [40, 20, -148.08, 43, 37 ],
-      [40, 20, -178.88, 39, 19 ],
-      [40, 20, -178.08, 39, 20 ],
-      [40, 20, -339.33, 44, 33 ],
-      [40, 20, 37.2, 43, 40 ],
-      [40, 20, 258.61, 26, 42 ],
-      [40, 20, 315.77, 41, 41 ],
-      [40, 20, 220.62, 42, 40 ],
-      [40, 20, 307.81, 39, 43 ],
-      [40, 20, -173.74, 40, 23 ],
-      [40, 20, 217.3, 42, 39 ],
-      [40, 20, -326.54, 44, 39 ],
-      [40, 20, -342.29, 44, 31 ],
-      [40, 20, 236.86, 37, 43 ],
-      [40, 20, -245.68, 34, 43 ],
-      [40, 20, 97.55, 25, 41 ],
-      [40, 20, 250.62, 31, 43 ],
-      [40, 20, -335.69, 44, 34 ],
-      [40, 20, 27.19, 44, 36 ],
-      [40, 20, -199.84, 44, 31 ],
-      [40, 20, -205.07, 44, 33 ],
-      [40, 20, 8.19, 42, 25 ],
-      [40, 20, -23.03, 43, 33 ],
-      [40, 20, 80.68, 26, 42 ],
-      [40, 20, 316.45, 41, 41 ],
-      [40, 20, 258.04, 27, 42 ],
-      [40, 20, 60.89, 36, 44 ],
-      [40, 20, -193.27, 43, 27 ],
-      [40, 20, 133.49, 42, 42 ],
-      [40, 20, 86.53, 22, 40 ],
-      [40, 20, -297.46, 36, 44 ],
-      [40, 20, 345.41, 42, 29 ],
-      [40, 20, 267.65, 20, 39 ],
-      [40, 20, -115.54, 34, 44 ],
-      [40, 20, -353.92, 41, 24 ],
-      [40, 20, -55.15, 37, 43 ],
-      [40, 20, -216.94, 43, 39 ],
-      [40, 20, 321.85, 42, 40 ],
-      [40, 20, -194.53, 43, 28 ],
-      [40, 20, -269.13, 20, 39 ],
-      [40, 20, -211.89, 44, 37 ],
-      [40, 20, -337.23, 44, 33 ],
-      [40, 20, -235.66, 39, 43 ],
-      [40, 20, -194.18, 43, 27 ],
-      [40, 20, 259.63, 26, 42 ],
-      [40, 20, -121.34, 36, 43 ],
-      [40, 20, 263.37, 23, 40 ],
-      [40, 20, 150.24, 44, 35 ],
-      [40, 20, -97.02, 23, 40 ],
-      [40, 20, -69.44, 32, 44 ],
-      [40, 20, 310.41, 39, 43 ],
-      [40, 20, 57.91, 38, 44 ],
-      [40, 20, 298.75, 36, 45 ],
-      [40, 20, -72.63, 29, 44 ],
-      [40, 20, -221.41, 42, 40 ],
-      [40, 20, 255.19, 28, 42 ],
-      [40, 20, -174.6, 40, 22 ],
-      [40, 20, 199.48, 43, 31 ],
-      [40, 20, -298.08, 36, 44 ],
-      [40, 20, 318.9, 42, 41 ],
-      [40, 20, -73.99, 29, 44 ],
-      [40, 20, -235.54, 38, 42 ],
-      [40, 20, 304.31, 38, 44 ],
-      [40, 20, -166.34, 42, 27 ],
-      [40, 20, 8.92, 42, 26 ],
-      [40, 20, 310.39, 39, 43 ],
-      [40, 20, 138.52, 42, 40 ],
-      [40, 20, 151.99, 44, 35 ],
-      [40, 20, 272.24, 20, 40 ],
-      [40, 20, 303.99, 38, 44 ],
-      [40, 20, 242.87, 35, 43 ],
-      [40, 20, -299.66, 36, 44 ],
-      [40, 20, 326.77, 43, 38 ],
-      [40, 20, -352.79, 42, 25 ],
-      [40, 20, -133.84, 40, 41 ],
-      [40, 20, 226.39, 40, 41 ],
-      [40, 20, -114.12, 33, 43 ],
-      [40, 20, -230.47, 40, 42 ],
-      [40, 20, 16.63, 44, 30 ],
-      [40, 20, 148.86, 44, 36 ],
-      [40, 20, 60.09, 36, 44 ],
-      [40, 20, -32.96, 43, 38 ],
-      [40, 20, -153.24, 43, 35 ],
-      [40, 20, -1.16, 39, 20 ],
-      [40, 20, 254.41, 28, 42 ],
-      [40, 20, -14.65, 42, 29 ],
-      [40, 20, -105.97, 29, 43 ],
-      [40, 20, -280.19, 27, 43 ],
-      [40, 20, -175.17, 40, 22 ],
-      [40, 20, -44.05, 41, 41 ],
-      [40, 20, -321.29, 44, 41 ],
-      [40, 20, 110.85, 33, 43 ],
-      [40, 20, 80.41, 26, 42 ],
-      [40, 20, 343.02, 43, 30 ],
-      [40, 20, 304.51, 37, 43 ],
-      [40, 20, -270.67, 20, 39 ],
-      [40, 20, 293.41, 32, 44 ],
-      [40, 20, 83.02, 24, 41 ],
-      [40, 20, 241.33, 36, 44 ],
-      [40, 20, 205.64, 44, 34 ],
-      [40, 20, 27.01, 44, 36 ],
-      [40, 20, 124.19, 39, 43 ],
-      [40, 20, 265.98, 21, 39 ],
-      [40, 20, -6.23, 40, 24 ],
-      [40, 20, 131.41, 41, 41 ],
-      [40, 20, -227.86, 41, 41 ],
-      [40, 20, -139.85, 42, 39 ],
-      [40, 20, -342.72, 44, 30 ],
-      [40, 20, -98.33, 24, 41 ],
-      [40, 20, 236.79, 37, 43 ],
-      [40, 20, 166.14, 43, 27 ],
-      [40, 20, 321.77, 42, 40 ],
-      [40, 20, -156.18, 43, 33 ],
-      [40, 20, -347.1, 42, 27 ],
-      [40, 20, -39.4, 42, 40 ],
-      [40, 20, -261.77, 25, 41 ],
-      [40, 20, -1.74, 39, 21 ],
-      [40, 20, 214.63, 42, 37 ],
-      [40, 20, -181.95, 40, 20 ],
-      [40, 20, 183.09, 39, 21 ],
-      [40, 20, -189.43, 42, 25 ],
-      [40, 20, -143.24, 43, 38 ],
-      [40, 20, -66.07, 33, 44 ],
-      [40, 20, 250.99, 31, 43 ],
-      [40, 20, -160.22, 43, 31 ],
-      [40, 20, -121.56, 36, 43 ],
-      [40, 20, 340.33, 43, 32 ],
-      [40, 20, -226.82, 42, 42 ],
-      [40, 20, 321.46, 42, 40 ],
-      [40, 20, 221.65, 41, 40 ],
-      [40, 20, 338.83, 43, 33 ],
-      [40, 20, -11.53, 42, 27 ],
-      [40, 20, -14.16, 42, 28 ],
-      [40, 20, 244.81, 34, 44 ],
-      [40, 20, 342.24, 43, 31 ],
-      [40, 20, -242.76, 36, 43 ],
-      [40, 20, -343.06, 44, 30 ],
-      [40, 20, -157.61, 43, 32 ],
-      [40, 20, -225.48, 42, 41 ],
-      [40, 20, -81.38, 24, 42 ],
-      [40, 20, -280.83, 27, 43 ],
-      [40, 20, 300.67, 36, 44 ],
-      [40, 20, -119.62, 35, 43 ],
-      [40, 20, -77, 26, 42 ],
-      [40, 20, 313.57, 40, 42 ],
-      [40, 20, 200.99, 43, 32 ],
-      [40, 20, 21.23, 44, 33 ],
-      [40, 20, -48.18, 40, 42 ],
-      [40, 20, 55.62, 39, 44 ],
-      [40, 20, 199.29, 43, 31 ],
-      [40, 20, -225.09, 42, 41 ],
-      [40, 20, 226.2, 40, 41 ],
-      [40, 20, -303.96, 39, 44 ],
-      [40, 20, 68.84, 33, 44 ],
-      [40, 20, 117.18, 36, 43 ],
-      [40, 20, -104.18, 27, 42 ],
-      [40, 20, 307.29, 39, 43 ],
-      [40, 20, 97.5, 25, 41 ],
-      [40, 20, 29.01, 44, 36 ],
-      [40, 20, 268.74, 19, 39 ],
-      [40, 20, -40.85, 42, 41 ],
-      [40, 20, 7.83, 42, 25 ],
-      [40, 20, -102.79, 27, 42 ],
-      [40, 20, 304.99, 37, 43 ],
-      [40, 20, -107.37, 29, 43 ],
-      [40, 20, -120.56, 36, 43 ],
-      [40, 20, -297.78, 36, 44 ],
-      [40, 20, -90.42, 19, 39 ],
-      [40, 20, 81.84, 25, 42 ],
-      [40, 20, -163.25, 43, 29 ],
-      [40, 20, 188.2, 41, 24 ],
-      [40, 20, 161.02, 44, 31 ],
-      [40, 20, -222.59, 43, 41 ],
-      [40, 20, -291.42, 33, 44 ],
-      [40, 20, -275.99, 24, 41 ],
-      [40, 20, -269.03, 20, 39 ],
-      [40, 20, 269.58, 19, 39 ],
-      [40, 20, 105.25, 29, 42 ],
-      [573, 347, -55.47, 609, 669 ],
-      [765, 205, 0.58, 766, 212 ],
-      [351, 714, 256.41, 775, 508 ],
-      [276, 434, -74.59, 490, 381 ],
-      [146, 6, 293.24, 62, 136 ],
-      [512, 715, -174.13, 581, 762 ],
-      [853, 14, 95.45, 95, 849 ],
-      [457, 224, -76.35, 324, 497 ],
-      [174, 370, -7.76, 221, 390 ],
-      [294, 467, -98.19, 502, 357 ],
-      [955, 129, 227, 744, 785 ],
-      [364, 702, -301.62, 788, 677 ],
-      [877, 197, -353.05, 894, 302 ],
-      [730, 404, 53.02, 762, 826 ],
-      [112, 514, 58.24, 495, 366 ],
-      [17, 129, 8.44, 35, 130 ],
-      [281, 768, 20.87, 536, 818 ],
-      [929, 343, 230.05, 858, 931 ],
-      [308, 473, -143.37, 528, 562 ],
-      [809, 693, 294.19, 962, 1021 ],
-      [158, 641, -305.47, 613, 500 ],
-      [993, 146, 352.59, 1002, 273 ],
-      [52, 36, -182.82, 53, 37 ],
-      [61, 583, 195.61, 214, 576 ],
-      [649, 666, -43.4, 928, 929 ],
-      [220, 678, 77.36, 710, 362 ],
-      [744, 121, 77.35, 280, 751 ],
-      [261, 49, -321.61, 234, 200 ],
-      [77, 280, 121.51, 279, 210 ],
-      [385, 119, 50.72, 335, 373 ],
-      [291, 237, -68.73, 325, 357 ],
-      [369, 213, 67.7, 337, 422 ],
-      [358, 251, 100.59, 312, 396 ],
-      [610, 297, -73.68, 455, 668 ],
-      [376, 15, -169.68, 371, 81 ],
-      [827, 179, -254.18, 397, 843 ],
-      [425, 737, -141.29, 791, 839 ],
-      [23, 164, -95.58, 164, 37 ],
-      [77, 222, 166.62, 125, 232 ],
-      [762, 510, 277.54, 604, 822 ],
-      [322, 728, -221.02, 720, 759 ],
-      [736, 236, -22.05, 770, 495 ],
-      [321, 504, 212.83, 541, 597 ],
-      [976, 193, -229.44, 781, 865 ],
-      [359, 475, -215.81, 569, 594 ],
-      [630, 326, -48.07, 662, 686 ],
-      [780, 644, -77.76, 793, 899 ],
-      [67, 661, 75.98, 657, 225 ],
-      [443, 718, 283.2, 799, 595 ],
-      [168, 522, 40.53, 466, 506 ],
-      [51, 763, 2.14, 78, 763 ],
-      [249, 547, 222.59, 552, 570 ],
-      [729, 19, -25.54, 664, 331 ],
-      [520, 750, 154.94, 789, 898 ],
-      [706, 251, -120.38, 573, 735 ],
-      [911, 723, 185.11, 970, 800 ],
-      [330, 540, 68.77, 622, 503 ],
-      [732, 590, -32.05, 932, 888 ],
-      [328, 154, -78.98, 212, 350 ],
-      [219, 279, -310.49, 354, 347 ],
-      [788, 317, -315.86, 786, 775 ],
-      [279, 503, 196.18, 406, 559 ],
-      [84, 282, 213.32, 224, 281 ],
-      [559, 671, 196.16, 722, 798 ],
-      [268, 432, -288.99, 495, 394 ],
-      [609, 347, -331.79, 700, 593 ],
-      [360, 594, 173.57, 424, 629 ],
-      [970, 375, 5.79, 1003, 470 ],
-      [412, 620, 149.31, 670, 742 ],
-      [812, 16, -309.25, 525, 638 ],
-      [882, 606, -12.36, 990, 780 ],
-      [945, 47, -261.03, 193, 939 ],
-      [712, 110, 2.68, 716, 143 ],
-      [503, 529, -88.4, 542, 517 ],
-      [270, 730, 316.29, 698, 714 ],
-      [371, 418, -79.07, 479, 443 ],
-      [412, 687, -242.53, 800, 681 ],
-      [146, 646, 108.15, 659, 338 ],
-      [667, 187, -31.06, 666, 504 ],
-      [367, 27, -16.94, 358, 132 ],
-      [439, 689, -168.99, 561, 758 ],
-      [934, 629, -125.04, 1050, 1124 ],
-      [50, 395, -22.51, 196, 384 ],
-      [566, 4, -246.96, 225, 521 ],
-      [952, 206, -283.43, 421, 973 ],
-      [890, 484, 107.7, 731, 993 ],
-      [266, 25, 31.52, 239, 160 ],
-      [433, 134, -83.19, 183, 445 ],
-      [75, 634, 91.53, 636, 90 ],
-      [543, 140, 116.69, 368, 547 ],
-      [6, 469, 41.81, 317, 353 ],
-      [278, 401, -88.97, 404, 284 ],
-      [612, 439, 280.54, 542, 681 ],
-      [68, 95, 283.63, 107, 88 ],
-      [229, 41, -243.53, 139, 221 ],
-      [338, 708, 210.11, 646, 780 ],
-      [1003, 139, 232.72, 717, 881 ],
-      [536, 463, 357.89, 551, 482 ],
-      [930, 519, 231.4, 985, 1049 ],
-      [548, 157, -357.44, 554, 181 ],
-      [202, 162, 82.14, 187, 222 ],
-      [773, 370, -262.23, 471, 814 ],
-      [135, 61, 148.43, 147, 121 ],
-      [22, 112, 236.79, 105, 78 ],
-      [937, 283, 274.47, 354, 956 ],
-      [79, 536, 217.74, 389, 471 ],
-      [890, 520, 347.55, 980, 699 ],
-      [708, 154, 61.36, 474, 695 ],
-      [705, 82, -172.68, 708, 169 ],
-      [523, 493, -25.61, 683, 671 ],
-      [526, 644, 125.61, 830, 801 ],
-      [131, 455, -248, 471, 290 ],
-      [270, 556, -191.46, 374, 597 ],
-      [993, 572, -87.31, 616, 1018 ],
-      [818, 506, 177.51, 839, 540 ],
-      [696, 565, -40.43, 894, 881 ],
-      [494, 464, -273.43, 492, 521 ],
-      [476, 227, -129.96, 478, 509 ],
-      [52, 755, -53.22, 635, 493 ],
-      [318, 379, -311.68, 494, 489 ],
-      [794, 5, 291.36, 293, 741 ],
-      [460, 103, -2.3, 462, 121 ],
-      [619, 305, -201.62, 687, 511 ],
-      [859, 282, 333.95, 894, 630 ],
-      [223, 127, 88.01, 134, 226 ],
-      [987, 649, -102.96, 852, 1106 ],
-      [418, 251, 331.17, 486, 421 ],
-      [541, 608, -176.92, 572, 635 ],
-      [868, 646, -189.3, 960, 777 ],
-      [281, 116, 165.4, 300, 181 ],
-      [349, 711, 169.74, 470, 761 ],
-      [252, 288, 265.89, 304, 271 ],
-      [760, 752, -168.4, 894, 888 ],
-      [986, 628, 95.31, 716, 1038 ],
-      [949, 27, 213.8, 802, 548 ],
-      [562, 767, 101.53, 864, 702 ],
-      [927, 312, 336.26, 973, 659 ],
-      [886, 717, 185.51, 949, 798 ],
-      [123, 600, 70.64, 606, 315 ],
-      [365, 42, 178.97, 365, 47 ],
-      [89, 304, 124.91, 299, 245 ],
-      [842, 492, -325.96, 972, 879 ],
-      [708, 294, -341.61, 764, 502 ],
-      [981, 265, 246.51, 633, 1004 ],
-      [604, 208, 271.05, 218, 607 ],
-      [396, 629, 269.55, 631, 399 ],
-      [29, 556, -158.42, 229, 526 ],
-      [1019, 453, -206.3, 1114, 856 ],
-      [771, 544, 355.98, 806, 597 ],
-      [359, 50, -324.83, 322, 247 ],
-      [102, 116, -40.39, 151, 154 ],
-      [791, 747, -299.35, 1038, 1055 ],
-      [840, 510, -23.99, 973, 807 ],
-      [866, 477, 224.07, 953, 944 ],
-      [705, 162, -301.25, 503, 686 ],
-      [578, 459, 288.1, 614, 692 ],
-      [450, 481, 89.13, 487, 456 ],
-      [736, 476, -207, 871, 757 ],
-      [955, 286, 302.83, 756, 957 ],
-      [949, 555, 349.29, 1034, 721 ],
-      [999, 631, -262.23, 760, 1073 ],
-      [430, 457, -281.97, 536, 515 ],
-      [516, 318, 195.96, 582, 446 ],
-      [994, 199, -76.86, 418, 1012 ],
-      [800, 727, 74.89, 910, 962 ],
-      [884, 393, -215, 949, 828 ],
-      [782, 729, 235.01, 1044, 1057 ],
-      [397, 513, -38.84, 630, 648 ],
-      [614, 461, 228.97, 750, 765 ],
-      [533, 404, 29.07, 661, 611 ],
-      [518, 385, -99.58, 465, 573 ],
-      [657, 707, 327.94, 930, 947 ],
-      [768, 326, -94.35, 382, 789 ],
-      [534, 303, 91.98, 321, 542 ],
-      [937, 135, 53.41, 666, 832 ],
-      [532, 29, -299.01, 282, 479 ],
-      [738, 615, -335.72, 925, 864 ],
-      [560, 144, 144.86, 540, 439 ],
-      [1017, 604, -143.59, 1176, 1088 ],
-      [830, 236, 234.95, 668, 814 ],
-      [360, 624, -124.39, 717, 648 ],
-      [730, 348, -181.98, 741, 372 ],
-      [684, 155, 122.85, 501, 657 ],
-      [38, 555, -313.91, 426, 412 ],
-      [681, 490, -188.19, 744, 581 ],
-      [245, 120, -161.22, 269, 191 ],
-      [332, 673, -304.93, 742, 657 ],
-      [366, 325, -170.16, 415, 381 ],
-      [60, 319, -323.93, 236, 293 ],
-      [368, 173, -103.4, 252, 396 ],
-      [190, 443, -239.3, 478, 388 ],
-      [525, 222, 86.17, 257, 538 ],
-      [779, 735, 231.02, 1060, 1066 ],
-      [441, 763, 31.22, 772, 881 ],
-      [507, 506, -230.09, 713, 712 ],
-      [751, 689, -118.02, 959, 985 ],
-      [10, 170, -207.58, 87, 154 ],
-      [88, 444, 96.25, 450, 134 ],
-      [358, 489, -325.38, 572, 605 ],
-      [410, 765, -163.49, 609, 848 ],
-      [774, 139, 250.99, 382, 775 ],
-      [946, 533, -261.54, 666, 1012 ],
-      [557, 348, -293.13, 538, 649 ],
-      [373, 679, -298.13, 774, 648 ],
-      [930, 291, 175.45, 950, 362 ],
-      [90, 86, 101, 101, 103 ],
-      [435, 93, 259.53, 169, 443 ],
-      [651, 159, -44.7, 573, 570 ],
-      [276, 427, -306.82, 507, 476 ],
-      [325, 734, -310.41, 769, 723 ],
-      [605, 546, -180.54, 609, 550 ],
-      [450, 487, 318.4, 658, 662 ],
-      [590, 137, -75.57, 279, 605 ],
-      [685, 416, -159.6, 786, 627 ],
-      [773, 345, 112.41, 613, 845 ],
-      [511, 412, 192.27, 586, 510 ],
-      [142, 738, 278.75, 749, 252 ],
-      [1023, 458, -293.08, 822, 1121 ],
-      [448, 665, 106.65, 765, 619 ],
-      [523, 141, 74, 280, 541 ],
-      [594, 594, -134.45, 838, 839 ],
-      [849, 163, 322.03, 768, 650 ],
-      [790, 605, -270.42, 610, 793 ],
-      [171, 351, 119.26, 389, 320 ],
-      [456, 162, -277.76, 222, 473 ],
-      [103, 545, 108.48, 549, 269 ],
-      [889, 651, 79.93, 796, 989 ],
-      [773, 650, -210.99, 997, 954 ],
-      [868, 218, -308.01, 706, 817 ],
-      [508, 610, -176.53, 543, 638 ],
-      [101, 287, -340.03, 192, 304 ],
-      [422, 155, -187.53, 438, 208 ],
-      [368, 747, -340.56, 596, 826 ],
-      [496, 107, -12.25, 506, 210 ],
-      [153, 448, 139.26, 407, 437 ],
-      [270, 525, -70.57, 583, 429 ],
-      [936, 424, -180.74, 940, 435 ],
-      [538, 235, -291.72, 417, 586 ],
-      [750, 118, -88.21, 140, 753 ],
-      [824, 499, -237.04, 867, 961 ],
-      [61, 575, 31.41, 352, 522 ],
-      [89, 123, 176.59, 95, 127 ],
-      [335, 399, 156.89, 465, 497 ],
-      [362, 2, 256.74, 84, 352 ],
-      [857, 117, -43.45, 701, 674 ],
-      [543, 319, -271.27, 331, 549 ],
-      [955, 253, 125.56, 761, 922 ],
-      [186, 656, 345.76, 340, 681 ],
-      [283, 450, -263.73, 477, 329 ],
-      [669, 300, 203.75, 732, 543 ],
-      [844, 345, 22.18, 911, 637 ],
-      [377, 412, 137.13, 556, 557 ],
-      [116, 663, -209.4, 426, 633 ],
-      [851, 166, -207.8, 829, 542 ],
-      [704, 40, -98.81, 146, 700 ],
-      [130, 447, 199.8, 272, 464 ],
-      [257, 395, -283.5, 443, 341 ],
-      [947, 534, 331.25, 1086, 923 ],
-      [927, 745, 33.05, 1183, 1129 ],
-      [40, 479, 313.89, 371, 360 ],
-      [842, 343, -82.76, 445, 878 ],
-      [361, 626, 303.08, 721, 644 ],
-      [44, 712, 203.88, 327, 667 ],
-      [258, 582, 359.09, 265, 586 ],
-      [475, 342, -323.57, 585, 557 ],
-      [846, 439, 95.2, 513, 881 ],
-      [618, 631, -255.2, 767, 757 ],
-      [727, 573, 244.51, 828, 902 ],
-      [686, 500, 222.61, 842, 831 ],
-      [221, 530, -49.12, 544, 514 ],
-      [156, 392, 272.31, 397, 171 ],
-      [550, 663, 138.28, 851, 860 ],
-      [469, 696, 85.4, 731, 523 ],
-      [247, 121, -89.45, 122, 247 ],
-      [246, 477, 230.48, 523, 492 ],
-      [298, 343, -78.27, 395, 361 ],
-      [945, 39, -206.96, 860, 462 ],
-      [70, 584, 329.99, 351, 541 ],
-      [930, 330, 78.29, 511, 977 ],
-      [734, 496, -145.75, 884, 822 ],
-      [153, 612, 221.61, 519, 558 ],
-      [28, 256, 122.53, 231, 160 ],
-      [736, 608, 54.16, 923, 952 ],
-      [346, 25, 167.09, 343, 100 ],
-      [731, 209, -106.47, 406, 759 ],
-      [546, 431, 214.67, 693, 663 ],
-      [947, 372, 250.3, 668, 1015 ],
-      [141, 424, 76.93, 444, 233 ],
-      [98, 353, -334.21, 242, 360 ],
-      [721, 135, 129.95, 565, 638 ],
-      [2, 249, -16.73, 72, 238 ],
-      [829, 270, 223.01, 789, 761 ],
-      [492, 54, 72.23, 201, 484 ],
-      [57, 313, 94.83, 316, 81 ],
-      [806, 92, 289.88, 360, 788 ],
-      [143, 502, -26.17, 348, 514 ],
-      [960, 444, 321.87, 1028, 941 ],
-      [804, 549, -1.2, 813, 565 ],
-      [402, 622, 329.13, 663, 740 ],
-      [438, 395, -264.53, 434, 473 ],
-      [111, 396, -31.3, 299, 395 ],
-      [599, 250, 221.13, 614, 581 ],
-      [404, 618, 271.02, 624, 414 ],
-      [1019, 661, -156.22, 1198, 1014 ],
-      [642, 497, -70.04, 685, 773 ],
-      [542, 604, -319.97, 803, 810 ],
-      [1017, 555, 95.73, 653, 1065 ],
-      [963, 390, -109.91, 693, 1037 ],
-      [449, 691, -246.89, 812, 682 ],
-      [405, 251, 123.08, 431, 475 ],
-      [541, 334, -225.77, 616, 619 ],
-      [1008, 15, 8.18, 999, 158 ],
-      [811, 318, -132.55, 781, 811 ],
-      [684, 314, -233.79, 657, 735 ],
-      [974, 27, 231.55, 625, 778 ],
-      [363, 434, 76.98, 504, 451 ],
-      [420, 428, -122.82, 586, 583 ],
-      [44, 382, 242.46, 358, 215 ],
-      [399, 718, 169.72, 520, 776 ],
-      [560, 254, -315.23, 576, 574 ],
-      [223, 659, -2.44, 249, 667 ],
-      [414, 647, 11.35, 532, 715 ],
-      [938, 487, 309.16, 969, 1035 ],
-      [237, 232, -116.8, 312, 315 ],
-      [417, 194, -91.67, 205, 421 ],
-      [234, 466, 314.41, 495, 493 ],
-      [856, 12, -4.73, 853, 82 ],
-      [169, 45, 352.78, 172, 66 ],
-      [2, 344, 305.73, 279, 202 ],
-      [755, 764, -176.75, 795, 804 ],
-      [819, 163, -279.19, 291, 834 ],
-      [303, 473, 327.13, 510, 561 ],
-      [832, 408, 63.3, 737, 926 ],
-      [759, 586, 280.36, 711, 851 ],
-      [81, 130, -257.92, 143, 105 ],
-      [463, 305, 178.43, 470, 316 ],
-      [398, 179, 189.44, 420, 241 ],
-      [903, 305, 230.84, 805, 892 ],
-      [893, 306, -167.29, 937, 494 ],
-      [816, 104, -171.82, 821, 218 ],
-      [52, 718, -19.67, 289, 693 ],
-      [167, 177, -296.63, 232, 228 ],
-      [120, 32, 85.5, 41, 122 ],
-      [722, 601, -85.84, 650, 764 ],
-      [609, 662, 35.57, 880, 892 ],
-      [754, 240, 321.29, 737, 658 ],
-      [496, 538, -231.74, 729, 721 ],
-      [254, 447, 53.71, 510, 469 ],
-      [70, 348, 340.06, 183, 350 ],
-      [344, 192, -282.97, 264, 378 ],
-      [612, 231, -330.59, 646, 501 ],
-      [72, 356, -165.26, 159, 361 ],
-      [162, 446, -135.64, 426, 431 ],
-      [795, 219, -292.56, 507, 818 ],
-      [161, 676, 327.18, 500, 655 ],
-      [724, 473, -168.11, 804, 611 ],
-      [669, 77, 336.01, 641, 342 ],
-      [851, 267, 34.78, 850, 704 ],
-      [416, 319, -359.02, 420, 326 ],
-      [387, 576, -179.64, 389, 577 ],
-      [497, 267, 36.17, 559, 509 ],
-      [539, 320, -350.8, 583, 402 ],
-      [816, 441, 66.6, 729, 923 ],
-      [111, 269, 271.66, 271, 118 ],
-      [207, 390, 184.72, 237, 405 ],
-      [160, 164, -92.13, 168, 164 ],
-      [433, 666, -20.46, 637, 775 ],
-      [399, 536, 229.18, 665, 650 ],
-      [960, 79, -192.4, 954, 282 ],
-      [962, 369, 347.54, 1018, 567 ],
-      [194, 741, -122.85, 727, 563 ],
-      [758, 377, 176.79, 777, 417 ],
-      [771, 220, -130.18, 664, 730 ],
-      [353, 303, 121.74, 443, 458 ],
-      [228, 458, -233.29, 503, 455 ],
-      [1002, 577, -79.69, 746, 1088 ],
-      [359, 133, -176.18, 366, 155 ],
-      [842, 432, 325.52, 938, 832 ],
-      [656, 384, -320.92, 751, 711 ],
-      [895, 337, 24.6, 953, 678 ],
-      [877, 482, -0.9, 883, 495 ],
-      [190, 282, 351.99, 226, 305 ],
-      [954, 91, -162, 934, 380 ],
-      [256, 356, 121.52, 436, 403 ],
-      [942, 526, -170.02, 1017, 680 ],
-      [98, 510, -349.45, 189, 518 ],
-      [496, 11, -224.86, 359, 356 ],
-      [758, 642, 179.75, 760, 644 ],
-      [709, 366, -180.86, 713, 375 ],
-      [764, 269, 134.32, 725, 733 ],
-      [287, 158, -134.37, 312, 314 ],
-      [798, 300, 129.27, 737, 806 ],
-      [787, 247, 214.41, 788, 647 ],
-      [44, 439, -172.34, 101, 439 ],
-      [729, 377, 320.69, 802, 753 ],
-      [999, 450, 78.19, 644, 1069 ],
-      [1014, 54, 88.04, 88, 1015 ],
-      [183, 622, -30.22, 470, 629 ],
-      [950, 385, 312.59, 924, 960 ],
-      [181, 190, -155.94, 241, 245 ],
-      [884, 405, -8.25, 931, 527 ],
-      [181, 236, 272.79, 243, 191 ],
-      [877, 57, -216.03, 743, 560 ],
-      [670, 90, 195.13, 668, 260 ],
-      [937, 637, -172.02, 1014, 760 ],
-      [881, 618, 249.25, 889, 1041 ],
-      [480, 610, 299.25, 765, 716 ],
-      [93, 747, 161.79, 321, 738 ],
-      [562, 691, -197.6, 744, 827 ],
-      [495, 59, -19.85, 484, 223 ],
-      [785, 721, 359.66, 787, 725 ],
-      [261, 89, -139.99, 255, 234 ],
-      [137, 746, -86.8, 751, 178 ],
-      [342, 480, -2.77, 363, 495 ],
-      [107, 414, -126.38, 395, 331 ],
-      [375, 306, -267.64, 321, 386 ],
-      [217, 666, 304.01, 672, 552 ],
-      [131, 735, 283.69, 744, 301 ],
-      [873, 388, 211.15, 947, 782 ],
-      [80, 759, 265.54, 762, 137 ],
-      [564, 579, 221.17, 804, 806 ],
-      [563, 7, 303.67, 317, 472 ],
-      [876, 109, 282.32, 291, 878 ],
-      [241, 365, 11.53, 309, 406 ],
-      [749, 446, -321.05, 862, 817 ],
-      [57, 726, -34.7, 458, 629 ],
-      [188, 121, -131.26, 213, 220 ],
-      [109, 219, -162.69, 168, 240 ],
-      [1024, 105, 200.79, 993, 460 ],
-      [812, 165, 191.77, 827, 326 ],
-      [678, 587, 14.3, 801, 736 ],
-      [481, 241, 20.14, 534, 391 ],
-      [401, 130, 122.08, 322, 407 ],
-      [290, 310, -255.92, 371, 355 ],
-      [818, 103, 161.27, 807, 359 ],
-      [874, 145, 121.63, 581, 819 ],
-      [313, 286, 234.41, 414, 419 ],
-      [638, 367, -281.16, 483, 696 ],
-      [918, 367, -183.26, 937, 417 ],
-      [692, 208, -29.51, 703, 521 ],
-      [453, 716, -199.75, 668, 826 ],
-      [985, 309, 25.67, 1021, 705 ],
-      [502, 609, 146.76, 753, 783 ],
-      [163, 58, -283.29, 93, 171 ],
-      [311, 671, -187.24, 393, 704 ],
-      [29, 558, -51.47, 454, 370 ],
-      [714, 24, 216.39, 587, 441 ],
-      [535, 502, -159.67, 674, 655 ],
-      [647, 423, 184.07, 674, 466 ],
-      [899, 174, -341.28, 907, 453 ],
-      [345, 513, 329.85, 555, 617 ],
-      [573, 483, -101.39, 585, 655 ],
-      [97, 91, -251.33, 117, 119 ],
-      [818, 213, -197.64, 844, 449 ],
-      [927, 447, -288.8, 721, 1021 ],
-      [149, 468, 234.16, 465, 393 ],
-      [587, 235, 256.52, 364, 624 ],
-      [383, 636, 7.03, 458, 677 ],
-      [668, 353, -317, 729, 713 ],
-      [418, 258, -154.77, 487, 410 ],
-      [444, 516, 325.47, 656, 676 ],
-      [402, 178, 58.01, 363, 434 ],
-      [769, 250, 143.01, 764, 661 ],
-      [924, 95, 342.54, 909, 368 ],
-      [131, 22, 40.69, 113, 102 ],
-      [232, 133, -241.28, 228, 266 ],
-      [53, 573, -21.74, 260, 551 ],
-      [930, 92, -146.28, 823, 592 ],
-      [428, 593, 183.95, 466, 620 ],
-      [489, 138, -294.32, 327, 502 ],
-      [781, 471, 189.43, 846, 591 ],
-      [732, 4, 355.43, 729, 62 ],
-      [302, 580, -130.66, 635, 606 ],
-      [1018, 505, -42.07, 1092, 1057 ],
-      [993, 603, -22.08, 1146, 932 ],
-      [539, 8, 102.05, 120, 528 ],
-      [708, 48, -81.14, 155, 706 ],
-      [165, 745, 4.73, 225, 755 ],
-      [469, 298, -160.01, 541, 439 ],
-      [218, 664, -31.28, 530, 680 ],
-      [312, 482, -310.38, 569, 549 ],
-      [69, 262, -307.45, 249, 213 ],
-      [63, 489, 236.14, 440, 323 ],
-      [389, 484, -10.97, 472, 549 ],
-      [841, 460, -166.4, 924, 643 ],
-      [298, 96, -158.96, 311, 195 ],
-      [955, 626, -114.48, 964, 1127 ],
-      [327, 749, -136.45, 752, 767 ],
-      [846, 332, 142.16, 872, 779 ],
-      [107, 496, 44.36, 423, 429 ],
-      [574, 729, -224.62, 920, 921 ],
-      [645, 13, 20.69, 608, 239 ],
-      [719, 59, -241.73, 392, 660 ],
-      [543, 351, 211.16, 645, 579 ],
-      [16, 213, -78.13, 210, 59 ],
-      [291, 436, 11.09, 369, 483 ],
-      [577, 383, -122.45, 631, 691 ],
-      [926, 629, -140.49, 1113, 1073 ],
-      [220, 495, 170.69, 297, 522 ],
-      [934, 574, -84.97, 652, 980 ],
-      [485, 236, -121.77, 455, 535 ],
-      [678, 720, -110.28, 909, 884 ],
-      [195, 491, -55.09, 513, 440 ],
-      [363, 130, 273.14, 148, 369 ],
-      [152, 141, -247.66, 187, 193 ],
-      [553, 359, 160.46, 641, 521 ],
-      [56, 23, -200.49, 60, 40 ],
-      [394, 717, -331.63, 687, 818 ],
-      [706, 114, 131.79, 555, 601 ],
-      [437, 46, -50.28, 313, 365 ],
-      [828, 410, 170.92, 882, 534 ],
-      [143, 150, 124.98, 204, 202 ],
-      [498, 296, -135.53, 561, 558 ],
-      [932, 568, -14.46, 1043, 782 ],
-      [808, 681, 117.2, 975, 1028 ],
-      [968, 327, -266.95, 378, 982 ],
-      [684, 369, -245.86, 616, 774 ],
-      [911, 665, -294.01, 977, 1103 ],
-      [952, 426, -187.84, 1001, 550 ],
-      [627, 753, -145.19, 943, 974 ],
-      [44, 606, 238.3, 538, 354 ],
-      [799, 713, -342, 979, 924 ],
-      [464, 319, -65.38, 482, 554 ],
-      [784, 249, -253.58, 460, 821 ],
-      [251, 87, -335.43, 264, 183 ],
-      [930, 45, -29.07, 833, 490 ],
-      [38, 558, 316.6, 409, 431 ],
-      [200, 473, 219.12, 452, 492 ],
-      [294, 418, -102, 469, 373 ],
-      [539, 120, -116.07, 343, 536 ],
-      [845, 153, -268.05, 181, 848 ],
-      [672, 751, -319.72, 998, 1007 ],
-      [697, 331, -21.35, 769, 561 ],
-      [92, 151, 211.96, 157, 175 ],
-      [244, 339, 293.35, 406, 358 ],
-      [279, 267, 335.17, 364, 359 ],
-      [749, 296, 137.87, 754, 721 ],
-      [687, 446, -139.04, 809, 786 ],
-      [487, 666, 252.84, 778, 660 ],
-      [854, 302, -354.74, 878, 379 ],
-      [177, 167, -212.02, 239, 234 ],
-      [308, 670, -228.12, 704, 675 ],
-      [365, 425, 81.96, 472, 420 ],
-      [847, 494, 222.68, 956, 936 ],
-      [636, 676, -180.42, 640, 679 ],
-      [541, 116, 69.88, 295, 547 ],
-      [506, 678, 346.6, 648, 777 ],
-      [190, 425, 43.89, 431, 437 ],
-      [504, 22, -52.24, 324, 411 ],
-      [352, 662, 230.37, 733, 692 ],
-      [359, 27, -333.47, 333, 184 ],
-      [570, 257, 294.55, 469, 625 ],
-      [757, 530, -27.59, 914, 820 ],
-      [362, 397, -285.26, 478, 453 ],
-      [167, 106, 347.98, 184, 138 ],
-      [422, 511, -263.32, 557, 477 ],
-      [9, 122, -348.21, 33, 120 ],
-      [1014, 264, 49.91, 855, 945 ],
-      [565, 642, 70.15, 795, 749 ],
-      [1003, 138, -29.48, 940, 613 ],
-      [818, 407, -5.06, 849, 477 ],
-      [856, 66, 235.38, 539, 740 ],
-      [763, 634, 12.1, 879, 779 ],
-      [212, 137, -336.25, 249, 210 ],
-      [318, 262, -237.7, 390, 407 ],
-      [301, 578, 241.1, 650, 541 ],
-      [438, 584, 355.3, 483, 617 ],
-      [455, 577, -117.24, 720, 667 ],
-      [14, 232, -235.53, 198, 141 ],
-      [626, 216, -106.74, 386, 660 ],
-      [72, 61, 274.4, 65, 76 ],
-      [577, 702, 335.87, 812, 876 ],
-      [399, 506, 209.55, 596, 635 ],
-      [929, 665, 337.4, 1112, 971 ],
-      [962, 135, -137.9, 803, 743 ],
-      [112, 360, -316.76, 328, 338 ],
-      [967, 688, 230.71, 1143, 1183 ],
-      [961, 261, 51.08, 806, 911 ],
-      [282, 271, 268.25, 278, 288 ],
-      [459, 740, -250.03, 852, 683 ],
-      [819, 26, -193.37, 802, 213 ],
-      [697, 458, -255.25, 620, 790 ],
-      [663, 757, 218.88, 990, 1004 ],
-      [449, 685, 121.42, 819, 739 ],
-      [417, 639, 247.11, 750, 632 ],
-      [733, 723, -136.06, 1028, 1028 ],
-      [794, 680, -211.41, 1031, 992 ],
-      [610, 632, 32.85, 855, 861 ],
-      [171, 75, 286.64, 119, 184 ],
-      [40, 419, 260.1, 418, 110 ],
-      [197, 264, 283.76, 301, 254 ],
-      [434, 19, -7.45, 431, 75 ],
-      [583, 516, -18.13, 714, 671 ],
-      [382, 84, -96.2, 124, 387 ],
-      [43, 397, -217.9, 277, 338 ],
-      [906, 178, -260.93, 318, 921 ],
-      [201, 5, -344.2, 194, 59 ],
-      [412, 462, 247.6, 583, 555 ],
-      [971, 590, 317.22, 1112, 1092 ],
-      [866, 620, -10.88, 966, 772 ],
-      [724, 768, 236.57, 1038, 1026 ],
-      [616, 325, 253.97, 481, 681 ],
-      [93, 761, 17.18, 313, 754 ],
-      [580, 280, 95.75, 337, 604 ],
-      [955, 311, -252.94, 577, 1002 ],
-      [133, 223, -86.78, 229, 145 ],
-      [274, 373, -82.53, 404, 319 ],
-      [296, 682, 350.52, 402, 721 ],
-      [136, 641, 183.43, 172, 647 ],
-      [76, 523, 44.45, 420, 426 ],
-      [572, 298, 43.57, 619, 610 ],
-      [397, 759, 347.43, 551, 827 ],
-      [246, 61, 340.77, 251, 139 ],
-      [782, 495, -117.54, 799, 921 ],
-      [406, 443, 173.94, 450, 482 ],
-      [559, 542, -337.71, 723, 713 ],
-      [947, 747, 11.49, 1077, 920 ],
-      [318, 201, -69.91, 297, 367 ],
-      [304, 303, -189.04, 348, 345 ],
-      [53, 359, 300.74, 335, 229 ],
-      [628, 20, -140.49, 496, 413 ],
-      [178, 317, -148.96, 314, 362 ],
-      [161, 501, -92.13, 505, 178 ],
-      [133, 319, -348.12, 196, 339 ],
-      [478, 624, 66.87, 761, 684 ],
-      [213, 274, -145.07, 330, 345 ],
-      [245, 216, -164.86, 291, 271 ],
-      [773, 454, 23.31, 889, 722 ],
-      [162, 682, 307.04, 640, 540 ],
-      [405, 722, -76.47, 795, 562 ],
-      [321, 425, -58.1, 529, 497 ],
-      [633, 558, 238.73, 804, 830 ],
-      [933, 678, -12.03, 1052, 857 ],
-      [290, 10, 286.84, 93, 280 ],
-      [307, 368, 151.05, 446, 469 ],
-      [914, 527, -312.32, 1005, 1030 ],
-      [196, 711, -110.04, 734, 427 ],
-      [473, 522, 315.35, 702, 703 ],
-      [1019, 643, 234.38, 1115, 1201 ],
-      [943, 179, 190.45, 958, 346 ],
-      [322, 419, -131.97, 526, 518 ],
-      [752, 126, -329.31, 710, 491 ],
-      [579, 57, 305.87, 384, 502 ],
-      [50, 274, 314.31, 229, 226 ],
-      [970, 504, -61.53, 904, 1092 ],
-      [673, 422, -287.69, 606, 769 ],
-      [741, 568, -341.9, 880, 770 ],
-      [72, 155, 147.35, 144, 168 ],
-      [9, 150, 30.13, 82, 134 ],
-      [854, 89, 197.41, 840, 339 ],
-      [613, 331, -130.07, 646, 681 ],
-      [937, 126, -12.79, 940, 330 ],
-      [981, 560, 40.29, 1110, 1061 ],
-      [904, 598, 297.04, 942, 1077 ],
-      [839, 557, 49.32, 968, 999 ],
-      [239, 293, -275.98, 315, 268 ],
-      [342, 80, 256.08, 159, 349 ],
-      [368, 134, -319.39, 366, 341 ],
-      [66, 141, -179.05, 66, 141 ],
-      [620, 13, -95.86, 75, 616 ],
-      [389, 472, 213.71, 584, 607 ],
-      [716, 407, 331.54, 822, 699 ],
-      [186, 374, 136.35, 392, 398 ],
-      [755, 284, -23.86, 804, 565 ],
-      [666, 145, -222.27, 590, 553 ],
-      [224, 324, 52.16, 393, 375 ],
-      [343, 580, 127.12, 668, 622 ],
-      [196, 88, 252.56, 141, 211 ],
-      [253, 137, -336.17, 286, 227 ],
-      [511, 602, -324.69, 764, 786 ],
-      [886, 125, 117.44, 519, 843 ],
-      [678, 662, -221.74, 946, 944 ],
-      [638, 33, 128.46, 422, 519 ],
-      [320, 599, -326.1, 599, 675 ],
-      [798, 330, -191.1, 847, 476 ],
-      [994, 498, 111.94, 833, 1107 ],
-      [556, 755, -64.69, 919, 825 ],
-      [225, 133, 17.12, 254, 193 ],
-      [72, 323, 144.73, 245, 304 ],
-      [106, 706, -11.75, 246, 712 ],
-      [156, 602, 105.1, 621, 306 ],
-      [835, 343, 5.2, 862, 417 ],
-      [8, 53, 35.77, 37, 47 ],
-      [702, 292, -122.9, 625, 747 ],
-      [751, 122, 186.23, 758, 201 ],
-      [991, 99, -67.53, 468, 953 ],
-      [638, 516, -80.16, 616, 716 ],
-      [34, 684, 44.43, 503, 511 ],
-      [570, 737, 346.85, 722, 847 ],
-      [264, 48, 288.03, 126, 266 ],
-      [760, 165, 132.14, 631, 673 ],
-      [397, 23, -267.13, 42, 396 ],
-      [916, 28, -218.24, 736, 587 ],
-      [455, 555, 55.17, 715, 690 ],
-      [792, 349, 169.23, 843, 489 ],
-      [545, 324, 261.67, 398, 585 ],
-      [961, 34, 24.65, 887, 431 ],
-      [335, 60, -54.7, 241, 308 ],
-      [910, 487, -83.82, 580, 956 ],
-      [892, 685, -38.88, 1123, 1092 ],
-      [789, 486, 115.43, 777, 920 ],
-      [465, 15, 136.55, 347, 329 ],
-      [597, 702, 162.75, 778, 846 ],
-      [799, 275, -37.53, 800, 704 ],
-      [365, 101, 289.64, 216, 377 ],
-      [94, 510, -126.88, 463, 380 ],
-      [978, 462, -95.12, 546, 1014 ],
-      [501, 713, -39.78, 840, 868 ],
-      [936, 628, -303.76, 1042, 1127 ],
-      [304, 528, 337.71, 480, 604 ],
-      [761, 352, 72.83, 560, 831 ],
-      [413, 701, 86.73, 723, 452 ],
-      [95, 380, 24.59, 244, 385 ],
-      [839, 211, 282.2, 382, 865 ],
-      [274, 485, -343.38, 401, 543 ],
-      [173, 555, 134.13, 518, 509 ],
-      [505, 520, -152.84, 685, 692 ],
-      [882, 128, -204.43, 856, 480 ],
-      [313, 61, -336.21, 311, 182 ],
-      [393, 289, 158.67, 471, 410 ],
-      [361, 92, -231.78, 295, 339 ],
-      [977, 401, -295.42, 781, 1054 ],
-      [588, 472, 60.64, 699, 743 ],
-      [111, 333, 258.13, 347, 175 ],
-      [1, 538, -7.75, 72, 533 ],
-      [24, 668, -207.79, 332, 601 ],
-      [727, 278, 279.69, 395, 763 ],
-      [1022, 171, -320.66, 898, 779 ],
-      [219, 406, -263.54, 427, 262 ],
-      [253, 700, 7.25, 338, 725 ],
-      [991, 203, 92.81, 251, 998 ],
-      [149, 167, -251.44, 205, 193 ],
-      [241, 608, 191.06, 352, 642 ],
-      [839, 691, -216.96, 1085, 1055 ],
-      [694, 691, 287.01, 863, 865 ],
-      [171, 709, 192.56, 319, 728 ],
-      [388, 486, -267.17, 504, 410 ],
-      [273, 484, -107.27, 542, 403 ],
-      [329, 648, 272.46, 660, 356 ],
-      [466, 69, 208.26, 442, 280 ],
-      [989, 44, -322.16, 808, 641 ],
-      [609, 155, -165.97, 627, 296 ],
-      [763, 335, -316.43, 783, 768 ],
-      [523, 196, 331.05, 551, 425 ],
-      [726, 716, 258.65, 843, 851 ],
-      [623, 76, 203, 602, 312 ],
-      [384, 366, -61.76, 502, 511 ],
-      [516, 571, -328.46, 738, 756 ],
-      [876, 49, 278.47, 176, 873 ],
-      [751, 399, 342.82, 834, 602 ],
-      [536, 372, -336.75, 639, 553 ],
-      [589, 60, -191.98, 588, 180 ],
-      [865, 632, 121.69, 992, 1067 ],
-      [927, 256, 304.9, 739, 906 ],
-      [886, 32, 255.78, 247, 865 ],
-      [742, 499, 326.58, 893, 824 ],
-      [519, 19, -50.51, 344, 412 ],
-      [943, 406, -235.77, 866, 1006 ],
-      [988, 294, -189.88, 1023, 458 ],
-      [872, 89, 183.64, 875, 143 ],
-      [847, 491, -187.97, 906, 602 ],
-      [880, 164, -131.9, 708, 763 ],
-      [95, 45, -259.59, 61, 100 ],
-      [780, 740, -19.97, 985, 962 ],
-      [702, 636, 10, 801, 747 ],
-      [554, 424, -242.69, 631, 686 ],
-      [506, 45, -225.48, 386, 391 ],
-      [946, 752, 154.49, 1177, 1085 ],
-      [99, 724, -290.08, 713, 341 ],
-      [341, 610, -206.71, 578, 697 ],
-      [90, 477, 252.85, 481, 225 ],
-      [335, 368, -313.57, 497, 496 ],
-      [659, 440, -271.91, 461, 673 ],
-      [802, 257, -298.62, 610, 827 ],
-      [262, 15, 297.37, 132, 239 ],
-      [788, 430, -25.32, 895, 726 ],
-      [955, 41, 16.33, 928, 307 ],
-      [122, 750, 0.56, 128, 751 ],
-      [854, 56, -41.09, 679, 603 ],
-      [953, 312, -190.15, 993, 473 ],
-      [147, 379, 256.2, 402, 231 ],
-      [1019, 630, -118.81, 1042, 1195 ],
-      [61, 356, 292.86, 350, 194 ],
-      [186, 189, -187.11, 207, 210 ],
-      [274, 385, -173.82, 312, 411 ],
-      [184, 208, 228.5, 276, 274 ],
-      [660, 155, 266.41, 195, 667 ],
-      [172, 247, 249.42, 290, 247 ],
-      [684, 119, 301.76, 460, 644 ],
-      [114, 65, -126.46, 118, 129 ],
-      [356, 175, 228.43, 366, 381 ],
-      [208, 171, 98.43, 199, 229 ],
-      [551, 216, -288.35, 378, 590 ],
-      [456, 356, -111.48, 496, 553 ],
-      [701, 560, 249.07, 772, 853 ],
-      [966, 698, -276.73, 806, 1041 ],
-      [779, 425, -131.54, 833, 864 ],
-      [646, 554, 99.15, 649, 724 ],
-      [489, 299, 209.84, 572, 501 ],
-      [406, 384, 270.44, 386, 408 ],
-      [738, 650, -285.75, 826, 886 ],
-      [551, 38, -125.87, 352, 467 ],
-      [179, 451, 76.5, 480, 279 ],
-      [281, 24, -310.54, 200, 229 ],
-      [634, 550, 214.41, 833, 811 ],
-      [477, 506, 148.69, 670, 678 ],
-      [595, 322, -173, 628, 391 ],
-      [920, 38, 345.67, 899, 264 ],
-      [549, 404, -94.74, 447, 579 ],
-      [335, 708, 264.69, 735, 398 ],
-      [208, 494, 153.81, 404, 533 ],
-      [314, 138, 188.81, 330, 183 ],
-      [647, 272, -109.12, 467, 699 ],
-      [243, 482, -87.11, 492, 266 ],
-      [314, 190, -292.29, 295, 362 ],
-      [107, 547, 181.54, 120, 548 ],
-      [830, 225, -237.15, 639, 818 ],
-      [72, 146, -201.94, 121, 160 ],
-      [52, 557, 176.6, 84, 558 ],
-      [429, 41, 120.19, 250, 390 ],
-      [293, 196, -137.62, 347, 341 ],
-      [1024, 431, -8.38, 1075, 575 ],
-      [781, 147, 246.32, 447, 773 ],
-      [113, 330, -21.87, 226, 348 ],
-      [502, 564, 155.6, 690, 720 ],
-      [598, 644, -52.24, 874, 866 ],
-      [344, 498, 157.9, 505, 589 ],
-      [519, 552, 294.48, 716, 701 ],
-      [744, 590, 96.63, 671, 806 ],
-      [483, 144, 134.21, 439, 445 ],
-      [142, 363, 317.65, 348, 363 ],
-      [458, 363, 1.19, 465, 372 ],
-      [958, 180, 138.96, 840, 764 ],
-      [796, 265, -272.53, 300, 807 ],
-      [253, 641, 256.2, 681, 397 ],
-      [987, 321, 139.53, 958, 883 ],
-      [400, 578, -113.84, 689, 598 ],
-      [113, 199, -316.9, 218, 222 ],
-      [20, 756, 236.02, 637, 438 ],
-      [669, 350, -349.85, 720, 462 ],
-      [348, 456, -9.77, 418, 508 ],
-      [288, 31, 330.03, 263, 170 ],
-      [801, 749, -221.64, 1096, 1091 ],
-      [487, 578, 26.13, 692, 733 ],
-      [611, 768, -93.8, 805, 659 ],
-      [464, 739, 206.31, 742, 866 ],
-      [150, 271, 27.98, 259, 309 ],
-      [500, 355, 214.08, 612, 573 ],
-      [562, 370, 202.66, 660, 556 ],
-      [385, 103, -189.69, 396, 165 ],
-      [400, 364, 237.25, 521, 532 ],
-      [898, 579, 265.83, 641, 936 ],
-      [855, 412, 247.68, 704, 945 ],
-      [28, 8, 69.11, 16, 29 ],
-      [577, 467, 68.26, 647, 708 ],
-      [956, 46, 40.72, 754, 658 ],
-      [737, 158, 294.26, 445, 736 ],
-      [265, 533, -93.23, 545, 293 ],
-      [57, 186, 252.73, 193, 108 ],
-      [858, 475, 348.77, 933, 633 ],
-      [76, 6, -30.9, 67, 44 ],
-      [925, 679, -208.65, 1137, 1038 ],
-      [791, 552, 176.74, 820, 594 ],
-      [632, 573, 184.2, 671, 616 ],
-      [218, 237, -98.78, 266, 250 ],
-      [827, 186, -56.01, 615, 789 ],
-      [373, 738, 92.05, 751, 397 ],
-      [279, 169, -128.47, 304, 322 ],
-      [659, 211, 45.56, 612, 618 ],
-      [506, 86, -229.86, 392, 440 ],
-      [490, 143, -224.56, 449, 444 ],
-      [958, 68, -308.34, 647, 793 ],
-      [150, 661, 208.86, 449, 650 ],
-      [913, 367, 25.37, 981, 723 ],
-      [663, 530, 247.34, 743, 814 ],
-      [10, 381, -299.04, 337, 193 ],
-      [443, 661, -327.45, 729, 795 ],
-      [62, 102, -169.91, 78, 109 ],
-      [391, 596, 27.65, 623, 709 ],
-      [968, 207, 107.88, 494, 984 ],
-      [129, 574, 241.1, 564, 388 ],
-      [321, 524, 304.55, 613, 561 ],
-      [395, 636, 204.06, 618, 741 ],
-      [180, 553, -172.71, 247, 570 ],
-      [728, 281, 323.36, 751, 659 ],
-      [568, 289, -39.48, 621, 584 ],
-      [655, 620, -140.52, 898, 894 ],
-      [701, 666, -45.48, 965, 966 ],
-      [971, 191, -207.62, 949, 618 ],
-      [499, 149, -14.17, 518, 266 ],
-      [140, 245, -196.4, 203, 273 ],
-      [995, 485, 294.81, 856, 1107 ],
-      [916, 13, 170.8, 906, 158 ],
-      [694, 148, -31.69, 667, 490 ],
-      [961, 694, 231.56, 1140, 1182 ],
-      [908, 351, -218.24, 930, 837 ],
-      [340, 74, -357.1, 343, 91 ],
-      [652, 599, 267.04, 630, 681 ],
-      [76, 559, -274.31, 562, 117 ],
-      [293, 164, -135.55, 323, 321 ],
-      [784, 269, 93.44, 316, 797 ],
-      [1017, 247, -171.9, 1040, 387 ],
-      [924, 165, -159.9, 923, 471 ],
-      [655, 686, -21.69, 861, 879 ],
-      [98, 638, -91.92, 640, 117 ],
-      [939, 551, 236.78, 974, 1086 ],
-      [117, 38, 305.36, 97, 117 ],
-      [121, 527, 146.37, 392, 505 ],
-      [1013, 583, -50.09, 1095, 1151 ],
-      [111, 34, 103.63, 59, 114 ],
-      [430, 622, 355.41, 477, 654 ],
-      [51, 616, -133.67, 480, 460 ],
-      [318, 541, 20.97, 490, 618 ],
-      [603, 264, -56.65, 551, 648 ],
-      [60, 337, -179.21, 63, 336 ],
-      [441, 274, 336.64, 512, 426 ],
-      [266, 361, -348.6, 331, 406 ],
-      [189, 452, 144.59, 416, 476 ],
-      [909, 443, -29.3, 1008, 830 ],
-      [325, 526, 2.12, 343, 538 ],
-      [985, 80, -135.32, 755, 748 ],
-      [978, 118, -278.03, 253, 984 ],
-      [276, 356, 228.81, 448, 440 ],
-      [818, 40, -244.03, 394, 752 ],
-      [225, 85, 71.79, 151, 240 ],
-      [483, 416, 327.8, 629, 609 ],
-      [449, 615, -54.23, 760, 723 ],
-      [466, 756, -351.4, 573, 816 ],
-      [159, 669, 63.34, 669, 442 ],
-      [630, 145, -164.34, 644, 309 ],
-      [121, 115, -89.96, 114, 120 ],
-      [440, 80, 19.91, 440, 224 ],
-      [557, 287, 353.35, 585, 349 ],
-      [370, 132, -329.54, 385, 301 ],
-      [535, 301, -250.42, 463, 604 ],
-      [125, 663, 138.77, 531, 580 ],
-      [79, 231, -5.19, 98, 237 ],
-      [514, 580, -16.94, 659, 704 ],
-      [526, 699, -110.11, 835, 732 ],
-      [105, 403, 25.22, 266, 409 ],
-      [383, 493, 132.67, 621, 614 ],
-      [767, 55, 207.66, 704, 404 ],
-      [283, 472, -243.5, 548, 463 ],
-      [274, 749, -119.81, 785, 608 ],
-      [317, 382, 162.07, 419, 459 ],
-      [473, 476, 62.93, 639, 638 ],
-      [158, 535, 279.41, 552, 242 ],
-      [663, 152, 102.91, 296, 679 ],
-      [127, 547, 38.04, 437, 509 ],
-      [482, 625, -304.52, 788, 751 ],
-      [6, 143, 157.38, 60, 133 ],
-      [707, 718, 208.39, 961, 967 ],
-      [490, 162, -69.52, 322, 516 ],
-      [656, 367, -87.51, 394, 671 ],
-      [997, 605, 270.38, 610, 1000 ],
-      [716, 191, -4.08, 727, 241 ],
-      [293, 309, -223.07, 425, 425 ],
-      [179, 38, -80.84, 65, 182 ],
-      [837, 133, -288.78, 395, 835 ],
-      [379, 494, 296.46, 609, 559 ],
-      [458, 498, -289.49, 621, 597 ],
-      [170, 260, -336.57, 258, 306 ],
-      [978, 627, -184.85, 1027, 706 ],
-      [367, 351, 158.99, 468, 458 ],
-      [755, 330, 5.41, 782, 400 ],
-      [628, 99, 184.02, 632, 142 ],
-      [110, 319, -246.44, 335, 227 ],
-      [304, 452, -211.14, 494, 543 ],
-      [702, 312, -87.03, 347, 717 ],
-      [803, 596, -344.23, 934, 792 ],
-      [712, 171, 122.5, 526, 691 ],
-      [813, 298, -354.2, 838, 378 ],
-      [846, 263, 233.36, 714, 834 ],
-      [71, 539, -158.35, 263, 526 ],
-      [809, 337, 150.89, 870, 686 ],
-      [305, 39, 243.13, 171, 289 ],
-      [55, 121, -178.71, 56, 121 ],
-      [216, 349, 244.81, 406, 343 ],
-      [428, 106, -183.44, 433, 130 ],
-      [816, 708, -345.39, 968, 890 ],
-      [839, 474, -185.56, 881, 552 ],
-      [501, 315, 93.42, 343, 518 ],
-      [509, 181, 339.95, 539, 344 ],
-      [329, 234, 124.48, 379, 402 ],
-      [616, 73, -280.47, 183, 618 ],
-      [318, 301, -244.54, 408, 415 ],
-      [152, 342, -131.81, 355, 340 ],
-      [410, 504, 194.66, 523, 590 ],
-      [246, 56, 294.02, 150, 247 ],
-      [497, 668, 237.51, 828, 777 ],
-      [518, 529, -38.43, 733, 735 ],
-      [766, 136, 256.73, 306, 775 ],
-      [387, 517, -293.6, 628, 561 ],
-      [358, 763, -74.25, 830, 551 ],
-      [23, 457, -6.24, 71, 456 ],
-      [137, 695, 275.85, 703, 207 ],
-      [301, 41, -123.98, 201, 271 ],
-      [625, 348, 347.85, 682, 471 ],
-      [390, 532, -319.83, 641, 658 ],
-      [296, 137, 306, 283, 320 ],
-      [122, 525, 90, 525, 122 ],
-      [579, 331, 210, 666, 575 ],
-      [433, 621, -30, 684, 754 ],
-      [527, 121, -30, 516, 368 ],
-      [933, 138, -330, 877, 586 ],
-      [413, 240, 330, 476, 414 ],
-      [293, 466, -360, 293, 466 ],
-      [629, 166, -30, 626, 458 ],
-      [611, 458, -270, 458, 611 ],
-      [668, 680, -120, 922, 917 ],
-      [592, 3, -360, 592, 3 ],
-      [195, 438, -30, 386, 476 ],
-      [1003, 762, -180, 1003, 762 ],
-      [451, 389, -60, 561, 584 ],
-      [917, 320, 60, 735, 954 ],
-      [967, 629, 300, 1027, 1151 ],
-      [920, 80, 0, 920, 80 ],
-      [926, 551, 150, 1076, 938 ],
-      [372, 242, -150, 442, 395 ],
-      [526, 742, -240, 905, 825 ],
-      [862, 418, -210, 955, 791 ],
-      [873, 563, 210, 1037, 923 ],
-      [300, 547, 210, 532, 623 ],
-      [554, 117, -180, 554, 117 ],
-      [969, 36, 150, 857, 514 ],
-      [544, 761, 0, 544, 761 ],
-      [438, 683, 90, 683, 438 ],
-      [953, 609, -120, 1002, 1129 ],
-      [664, 120, 90, 120, 664 ],
-      [986, 514, 90, 514, 986 ],
-      [167, 392, -270, 392, 167 ],
-      [375, 279, 300, 428, 463 ],
-      [142, 503, 60, 506, 373 ],
-      [923, 151, 180, 923, 151 ],
-      [175, 109, 210, 205, 180 ],
-      [876, 517, 210, 1016, 885 ],
-      [368, 78, 120, 251, 356 ],
-      [990, 24, -30, 868, 516 ],
-      [299, 522, 90, 522, 299 ],
-      [954, 493, -150, 1072, 903 ],
-      [549, 618, 210, 783, 808 ],
-      [701, 130, -240, 463, 671 ],
-      [579, 236, 240, 492, 618 ],
-      [162, 160, -360, 162, 160 ],
-      [925, 291, -270, 291, 925 ],
-      [711, 180, 240, 510, 704 ],
-      [488, 455, 330, 649, 638 ],
-      [150, 429, 330, 343, 447 ],
-      [625, 653, 90, 653, 625 ],
-      [235, 600, -180, 235, 600 ],
-      [529, 244, -300, 475, 580 ],
-      [322, 1, -180, 322, 1 ],
-      [487, 435, 30, 638, 620 ],
-      [298, 556, 210, 535, 630 ],
-      [309, 482, -270, 482, 309 ],
-      [466, 246, -90, 246, 466 ],
-      [287, 612, 360, 287, 612 ],
-      [211, 724, 30, 544, 732 ],
-      [167, 425, -90, 425, 167 ],
-      [818, 600, -270, 600, 818 ],
-      [77, 229, -30, 180, 236 ],
-      [160, 470, -30, 372, 487 ],
-      [416, 67, -330, 393, 265 ],
-      [987, 289, 210, 998, 742 ],
-      [747, 521, -90, 521, 747 ],
-      [894, 101, 150, 824, 532 ],
-      [256, 316, 0, 256, 316 ],
-      [225, 474, -30, 430, 522 ],
-      [765, 599, -360, 765, 599 ],
-      [128, 444, 210, 331, 448 ],
-      [291, 502, -300, 580, 503 ],
-      [778, 621, 150, 983, 925 ],
-      [241, 165, 210, 290, 262 ],
-      [284, 137, -270, 137, 284 ],
-      [44, 697, 240, 625, 386 ],
-      [446, 599, 360, 446, 599 ],
-      [152, 23, -90, 23, 152 ],
-      [673, 191, 360, 673, 191 ],
-      [110, 764, 210, 476, 716 ],
-      [113, 92, -120, 135, 142 ],
-      [916, 309, -360, 916, 309 ],
-      [999, 124, 240, 605, 926 ],
-      [683, 305, -360, 683, 305 ],
-      [456, 517, -210, 652, 674 ],
-      [614, 550, -300, 782, 806 ],
-      [441, 116, 300, 319, 439 ],
-      [403, 230, 300, 399, 464 ],
-      [786, 734, -240, 1028, 1046 ],
-      [777, 48, -270, 48, 777 ],
-      [543, 133, -180, 543, 133 ],
-      [899, 52, 150, 804, 493 ],
-      [900, 32, 270, 32, 900 ],
-      [704, 544, -210, 881, 821 ],
-      [728, 118, 300, 464, 689 ],
-      [935, 577, 90, 577, 935 ],
-      [22, 140, 210, 88, 131 ],
-      [931, 441, -330, 1026, 847 ],
-      [846, 263, -360, 846, 263 ],
-      [1015, 77, -300, 574, 917 ],
-      [154, 484, -180, 154, 484 ],
-      [439, 390, -120, 556, 574 ],
-      [112, 297, -90, 297, 112 ],
-      [974, 56, -300, 534, 871 ],
-      [194, 602, -210, 469, 616 ],
-      [103, 535, 360, 103, 535 ],
-      [744, 551, -240, 848, 918 ],
-      [517, 481, 180, 517, 481 ],
-      [595, 348, -300, 598, 689 ],
-      [627, 341, -240, 608, 711 ],
-      [723, 456, 240, 755, 853 ],
-      [996, 17, -150, 870, 512 ],
-      [312, 101, 150, 320, 241 ],
-      [695, 63, 210, 632, 401 ],
-      [779, 208, 60, 569, 778 ],
-      [1018, 285, -180, 1018, 285 ],
-      [1003, 75, 360, 1003, 75 ],
-      [149, 462, 90, 462, 149 ],
-      [907, 140, -330, 855, 574 ],
-      [991, 610, 0, 991, 610 ],
-      [153, 384, -300, 409, 324 ],
-      [984, 363, -300, 805, 1033 ],
-      [287, 597, -180, 287, 597 ],
-      [1008, 350, -120, 806, 1046 ],
-      [780, 165, 60, 532, 757 ],
-      [331, 161, 360, 331, 161 ],
-      [594, 144, -330, 586, 421 ],
-      [568, 256, 120, 505, 618 ],
-      [160, 168, 270, 168, 160 ],
-      [214, 143, 90, 143, 214 ],
-      [722, 257, -270, 257, 722 ],
-      [813, 227, 90, 227, 813 ],
-      [926, 441, -90, 441, 926 ],
-      [149, 429, 240, 445, 343 ],
-      [480, 246, -330, 538, 452 ],
-      [64, 493, -180, 64, 493 ],
-      [26, 171, -30, 107, 161 ],
-      [87, 597, 210, 373, 559 ],
-      [764, 716, 360, 764, 716 ],
-      [602, 108, -240, 394, 574 ],
-      [229, 649, 0, 229, 649 ],
-      [367, 490, 240, 606, 561 ],
-      [989, 416, -90, 416, 989 ],
-      [357, 528, 330, 572, 635 ],
-      [190, 119, -180, 190, 119 ],
-      [243, 167, 300, 265, 293 ],
-      [510, 186, -270, 186, 510 ],
-      [968, 251, 300, 699, 963 ],
-      [743, 55, 240, 418, 670 ],
-      [741, 506, 360, 741, 506 ],
-      [928, 678, 240, 1050, 1141 ],
-      [434, 185, -30, 467, 377 ],
-      [241, 158, 360, 241, 158 ],
-      [636, 425, 150, 762, 684 ],
-      [578, 568, 240, 780, 783 ],
-      [847, 750, -330, 1108, 1073 ],
-      [750, 364, -150, 830, 689 ],
-      [880, 322, 90, 322, 880 ],
-      [780, 111, 150, 730, 484 ],
-      [610, 666, -120, 881, 860 ],
-      [584, 594, -210, 802, 804 ],
-      [398, 151, -30, 419, 330 ],
-      [864, 331, 120, 718, 912 ],
-      [861, 39, -210, 764, 463 ],
-      [536, 472, 360, 536, 472 ],
-      [370, 340, 330, 489, 479 ],
-      [425, 134, -60, 327, 435 ],
-      [728, 25, 240, 385, 642 ],
-      [341, 610, 360, 341, 610 ],
-      [27, 299, 270, 299, 27 ],
-      [388, 737, 90, 737, 388 ],
-      [628, 267, 240, 544, 676 ],
-      [90, 147, -180, 90, 147 ],
-      [785, 24, -150, 690, 412 ],
-      [1023, 426, 300, 879, 1098 ],
-      [994, 703, -120, 1105, 1211 ],
-      [939, 253, 30, 939, 688 ],
-      [344, 31, 60, 198, 312 ],
-      [179, 287, -120, 337, 298 ],
-      [160, 307, 180, 160, 307 ],
-      [6, 597, 150, 303, 518 ],
-      [643, 300, -330, 706, 581 ],
-      [456, 367, -210, 577, 544 ],
-      [710, 188, -180, 710, 188 ],
-      [1016, 187, 240, 669, 972 ],
-      [927, 164, 180, 927, 164 ],
-      [267, 99, -330, 280, 219 ],
-      [808, 357, -300, 712, 877 ],
-      [358, 491, -30, 555, 604 ],
-      [721, 611, 270, 611, 721 ],
-      [458, 615, 120, 761, 702 ],
-      [153, 328, -330, 296, 360 ],
-      [204, 670, 30, 511, 681 ],
-      [449, 434, 210, 604, 599 ],
-      [725, 428, -360, 725, 428 ],
-      [545, 355, -210, 648, 578 ],
-      [277, 554, -120, 617, 515 ],
-      [345, 392, 240, 510, 493 ],
-      [455, 660, -30, 723, 799 ],
-      [946, 432, -180, 946, 432 ],
-      [822, 7, -330, 714, 416 ],
-      [469, 122, -30, 466, 340 ],
-      [516, 274, -120, 494, 582 ],
-      [27, 611, 300, 541, 328 ],
-      [812, 386, -30, 895, 740 ],
-      [822, 27, 330, 724, 434 ],
-      [24, 234, 120, 214, 136 ],
-      [383, 492, -270, 492, 383 ],
-      [194, 65, -360, 194, 65 ],
-      [658, 7, 60, 334, 572 ],
-      [912, 623, 60, 995, 1100 ],
-      [961, 206, 180, 961, 206 ],
-      [424, 593, -300, 725, 663 ],
-      [778, 613, 300, 918, 979 ],
-      [687, 454, -60, 735, 821 ],
-      [142, 302, -60, 331, 273 ],
-      [69, 320, 180, 69, 320 ],
-      [734, 607, -90, 607, 734 ],
-      [898, 752, -30, 1152, 1100 ],
-      [916, 477, -30, 1031, 871 ],
-      [487, 393, -150, 617, 582 ],
-      [66, 346, 30, 230, 332 ],
-      [832, 663, -120, 989, 1051 ],
-      [938, 478, -300, 882, 1051 ],
-      [834, 225, 150, 834, 610 ],
-      [221, 331, -300, 397, 356 ],
-      [666, 382, 0, 666, 382 ],
-      [398, 165, -150, 426, 341 ],
-      [786, 70, -150, 714, 453 ],
-      [236, 757, 300, 772, 582 ],
-      [718, 353, -60, 663, 797 ],
-      [1006, 403, 270, 403, 1006 ],
-      [545, 258, 180, 545, 258 ],
-      [874, 193, -120, 603, 852 ],
-      [996, 51, 120, 541, 886 ],
-      [699, 216, -330, 713, 536 ],
-      [805, 715, 60, 1021, 1054 ],
-      [312, 245, 210, 392, 367 ],
-      [628, 66, 270, 66, 628 ],
-      [922, 242, 270, 242, 922 ],
-      [827, 12, -120, 422, 721 ],
-      [231, 766, 270, 766, 231 ],
-      [95, 407, -240, 399, 284 ],
-      [842, 294, -60, 674, 876 ],
-      [178, 272, 0, 178, 272 ],
-      [838, 28, 210, 738, 442 ],
-      [914, 631, 150, 1106, 1001 ],
-      [476, 97, -360, 476, 97 ],
-      [257, 567, -300, 619, 505 ],
-      [131, 490, -60, 488, 358 ],
-      [1013, 342, -60, 801, 1048 ],
-      [317, 515, -60, 603, 531 ],
-      [157, 585, 360, 157, 585 ],
-      [341, 448, -120, 557, 518 ],
-      [781, 581, 150, 966, 892 ],
-      [265, 441, 180, 265, 441 ],
-      [35, 359, 30, 209, 328 ],
-      [757, 716, 150, 1013, 997 ],
-      [782, 141, -60, 511, 747 ],
-      [893, 238, -330, 892, 652 ],
-      [302, 230, 0, 302, 230 ],
-      [752, 467, -240, 779, 883 ],
-      [174, 585, 330, 442, 594 ],
-      [138, 72, 0, 138, 72 ],
-      [492, 658, -180, 492, 658 ],
-      [185, 88, 270, 88, 185 ],
-      [939, 113, -150, 869, 566 ],
-      [487, 681, -180, 487, 681 ],
-      [163, 499, -60, 512, 390 ],
-      [594, 400, 180, 594, 400 ],
-      [655, 626, -360, 655, 626 ],
-      [148, 422, 120, 438, 338 ],
-      [325, 552, -60, 639, 557 ],
-      [259, 655, 0, 259, 655 ],
-      [789, 255, -120, 614, 810 ],
-      [46, 394, -30, 235, 364 ],
-      [915, 330, 90, 330, 915 ],
-      [214, 695, 0, 214, 695 ],
-      [466, 48, -270, 48, 466 ],
-      [906, 494, 120, 880, 1030 ],
-      [638, 217, 0, 638, 217 ],
-      [676, 327, -360, 676, 327 ],
-      [312, 571, 180, 312, 571 ],
-      [727, 765, 90, 765, 727 ],
-      [214, 588, 330, 478, 616 ],
-      [576, 622, -30, 808, 827 ],
-      [31, 540, 270, 540, 31 ],
-      [661, 701, 210, 922, 936 ],
-      [149, 282, 270, 282, 149 ],
-      [302, 193, 0, 302, 193 ],
-      [987, 671, 210, 1189, 1073 ],
-      [459, 410, -240, 584, 601 ],
-      [492, 644, 330, 747, 804 ],
-      [236, 421, 330, 414, 483 ],
-      [853, 581, 150, 1028, 928 ],
-      [785, 245, 0, 785, 245 ],
-      [217, 268, -210, 321, 339 ],
-      [90, 763, -300, 705, 458 ],
-      [888, 107, 0, 888, 107 ],
-      [726, 333, 180, 726, 333 ],
-      [198, 305, 90, 305, 198 ],
-      [983, 649, -270, 649, 983 ],
-      [155, 250, 360, 155, 250 ],
-      [89, 427, 30, 290, 414 ],
-      [17, 298, -150, 162, 265 ],
-      [729, 118, 90, 118, 729 ],
-      [223, 280, 330, 332, 353 ],
-      [436, 347, 330, 550, 519 ],
-      [558, 244, -300, 489, 605 ],
-      [32, 20, 0, 32, 20 ],
-      [787, 169, 300, 538, 765 ],
-      [387, 137, 180, 387, 137 ],
-      [534, 253, -330, 588, 485 ],
-      [514, 320, 90, 320, 514 ],
-      [31, 332, -360, 31, 332 ],
-      [321, 111, -240, 256, 331 ],
-      [936, 277, 30, 948, 707 ],
-      [884, 604, 360, 884, 604 ],
-      [825, 254, -150, 840, 631 ],
-      [907, 278, -120, 693, 923 ],
-      [408, 100, 30, 403, 290 ],
-      [315, 390, 180, 315, 390 ],
-      [62, 22, -330, 64, 49 ],
-      [141, 407, -30, 325, 422 ],
-      [789, 429, 300, 765, 897 ],
-      [808, 670, -330, 1034, 983 ],
-      [984, 603, -60, 1012, 1153 ],
-      [509, 498, -240, 685, 688 ],
-      [496, 349, 30, 603, 549 ],
-      [808, 260, 300, 627, 829 ],
-      [122, 566, -360, 122, 566 ],
-      [684, 33, 30, 608, 370 ],
-      [405, 79, 30, 389, 270 ],
-      [463, 185, -330, 492, 391 ],
-      [947, 8, 90, 8, 947 ],
-      [850, 614, 0, 850, 614 ],
-      [899, 584, -150, 1069, 954 ],
-      [294, 197, 330, 352, 318 ],
-      [493, 568, -90, 568, 493 ],
-      [7, 406, 180, 7, 406 ],
-      [914, 497, -30, 1039, 887 ],
-      [930, 242, 0, 930, 242 ],
-      [440, 546, 90, 546, 440 ],
-      [1002, 125, 270, 125, 1002 ],
-      [58, 67, 270, 67, 58 ],
-      [710, 703, 120, 963, 964 ],
-      [205, 609, -60, 628, 481 ],
-      [505, 61, 120, 305, 466 ],
-      [445, 431, -60, 594, 600 ],
-      [848, 435, 330, 951, 801 ],
-      [574, 352, 60, 591, 673 ],
-      [29, 281, 300, 256, 165 ],
-      [552, 611, 90, 611, 552 ],
-      [155, 594, 210, 430, 590 ],
-      [4, 637, 270, 637, 4 ],
-      [887, 401, 210, 968, 789 ],
-      [539, 555, 60, 750, 743 ],
-      [968, 165, 120, 626, 919 ],
-      [635, 498, -210, 798, 747 ],
-      [36, 366, 210, 213, 334 ],
-      [1001, 28, -210, 880, 523 ],
-      [580, 49, 60, 331, 526 ],
-      [481, 463, -90, 463, 481 ],
-      [85, 579, -240, 543, 361 ],
-      [878, 581, 360, 878, 581 ],
-      [735, 478, 0, 735, 478 ],
-      [506, 113, -210, 494, 349 ],
-      [64, 71, -30, 90, 93 ],
-      [728, 547, -300, 837, 903 ],
-      [941, 574, 60, 967, 1101 ],
-      [710, 556, 90, 556, 710 ],
-      [948, 223, 120, 666, 930 ],
-      [536, 583, -180, 536, 583 ],
-      [938, 646, -360, 938, 646 ],
-      [83, 536, 210, 338, 504 ],
-      [76, 319, -60, 312, 224 ],
-      [603, 698, 30, 871, 905 ],
-      [846, 746, 120, 1068, 1104 ],
-      [284, 523, -120, 594, 506 ],
-      [385, 461, -300, 591, 563 ],
-      [974, 225, 240, 681, 955 ],
-      [575, 167, -300, 432, 580 ],
-      [241, 569, 270, 569, 241 ],
-      [524, 504, 150, 705, 696 ],
-      [554, 566, -60, 765, 762 ],
-      [334, 622, 240, 705, 599 ],
-      [750, 306, 180, 750, 306 ],
-      [294, 172, 150, 340, 294 ],
-      [955, 385, -90, 385, 955 ],
-      [297, 673, 360, 297, 673 ],
-      [403, 635, -180, 403, 635 ],
-      [226, 298, 0, 226, 298 ],
-      [345, 478, -210, 537, 585 ],
-      [216, 103, 300, 195, 238 ],
-      [948, 518, 90, 518, 948 ],
-      [346, 768, -60, 836, 683 ],
-      [169, 562, 240, 570, 426 ],
-      [921, 14, -330, 804, 472 ],
-      [618, 730, 30, 900, 940 ],
-      [1013, 184, -60, 664, 969 ],
-      [998, 486, -180, 998, 486 ],
-      [257, 655, 120, 695, 548 ],
-      [764, 146, -180, 764, 146 ],
-      [1004, 308, -60, 767, 1023 ],
-      [892, 250, -330, 897, 662 ],
-      [510, 510, -330, 696, 696 ],
-      [956, 636, 240, 1028, 1144 ],
-      [787, 558, 240, 875, 959 ],
-      [846, 253, 210, 858, 641 ],
-      [395, 245, -360, 395, 245 ],
-      [840, 225, 120, 614, 838 ],
-      [83, 417, 0, 83, 417 ],
-      [746, 222, 150, 757, 563 ],
-      [1022, 206, -300, 688, 988 ],
-      [412, 107, -60, 297, 409 ],
-      [491, 489, -330, 669, 668 ],
-      [569, 438, 300, 662, 711 ],
-      [372, 260, 90, 260, 372 ],
-      [194, 126, 330, 230, 206 ],
-      [988, 422, -180, 988, 422 ],
-      [1003, 283, 60, 746, 1009 ],
-      [641, 345, -300, 619, 727 ],
-      [129, 136, -90, 136, 129 ],
-      [835, 134, 120, 533, 789 ],
-      [926, 443, 240, 846, 1022 ],
-      [326, 42, -30, 302, 199 ],
-      [405, 469, -360, 405, 469 ],
-      [307, 747, -120, 799, 638 ],
-      [952, 124, 0, 952, 124 ],
-      [911, 96, -330, 836, 538 ],
-      [171, 80, -60, 153, 188 ],
-      [754, 561, 270, 561, 754 ],
-      [868, 657, -330, 1079, 1002 ],
-      [254, 515, -210, 476, 571 ],
-      [937, 441, 240, 849, 1031 ],
-      [740, 685, 270, 685, 740 ],
-      [169, 220, -30, 255, 275 ],
-      [183, 449, -30, 382, 480 ],
-      [541, 395, 90, 395, 541 ],
-      [44, 310, 180, 44, 310 ],
-      [108, 438, 240, 432, 311 ],
-      [549, 235, 30, 592, 478 ],
-      [425, 118, -60, 313, 427 ],
-      [481, 308, -300, 507, 570 ],
-      [715, 243, 120, 567, 739 ],
-      [515, 29, 30, 460, 282 ],
-      [370, 156, 240, 319, 397 ],
-      [849, 292, -60, 676, 881 ],
-      [275, 698, 330, 586, 741 ],
-      [891, 731, -120, 1077, 1136 ],
-      [610, 43, 300, 340, 549 ],
-      [434, 455, -210, 602, 609 ],
-      [1006, 6, -90, 6, 1006 ],
-      [405, 366, 210, 532, 518 ],
-      [491, 134, -330, 492, 361 ],
-      [139, 520, -300, 519, 380 ],
-      [699, 29, -150, 619, 373 ],
-      [528, 665, 150, 789, 838 ],
-      [955, 103, 90, 103, 955 ],
-      [884, 3, 30, 766, 444 ],
-      [203, 460, 90, 460, 203 ],
-      [104, 17, -210, 98, 65 ],
-      [319, 3, -210, 277, 161 ],
-      [691, 307, 150, 751, 610 ],
-      [448, 674, 270, 674, 448 ],
-      [529, 10, 30, 463, 273 ],
-      [647, 535, 60, 786, 827 ],
-      [973, 162, -30, 922, 626 ],
-      [663, 110, 60, 426, 629 ],
-      [259, 5, 60, 133, 226 ],
-      [829, 157, -240, 550, 794 ],
-      [432, 235, -240, 419, 490 ],
-      [641, 473, -210, 791, 729 ],
-      [857, 223, 60, 621, 853 ],
-      [537, 559, -30, 744, 752 ],
-      [396, 187, 0, 396, 187 ],
-      [947, 672, -240, 1055, 1155 ],
-      [512, 633, -90, 633, 512 ],
-      [963, 362, 30, 1014, 795 ],
-      [527, 556, 30, 734, 745 ],
-      [95, 410, 180, 95, 410 ],
-      [274, 733, -330, 603, 771 ],
-      [476, 446, 120, 623, 634 ],
-      [681, 321, 330, 749, 618 ],
-      [271, 723, 150, 595, 760 ],
-      [759, 252, 330, 782, 597 ],
-      [236, 194, 240, 285, 300 ],
-      [426, 578, 90, 578, 426 ],
-      [831, 532, -300, 876, 985 ],
-      [358, 159, 240, 316, 389 ],
-      [915, 229, -120, 654, 906 ],
-      [657, 435, -150, 785, 704 ],
-      [711, 23, 300, 374, 626 ],
-      [371, 534, -150, 587, 646 ],
-      [327, 736, -180, 327, 736 ],
-      [4, 537, 60, 466, 271 ],
-      [953, 714, 240, 1093, 1181 ],
-      [749, 265, 60, 603, 780 ],
-      [365, 119, -180, 365, 119 ],
-      [464, 388, -30, 594, 568 ],
-      [280, 306, 210, 394, 404 ],
-      [641, 30, -120, 345, 569 ],
-      [956, 563, -90, 563, 956 ],
-      [840, 72, -330, 763, 481 ],
-      [128, 317, -360, 128, 317 ],
-      [379, 320, 150, 488, 465 ],
-      [966, 266, 120, 712, 968 ],
-      [786, 60, 360, 786, 60 ],
-      [352, 333, -270, 333, 352 ],
-      [626, 681, 120, 902, 881 ],
-      [87, 122, -330, 136, 149 ],
-      [878, 603, -300, 960, 1061 ],
-      [199, 551, 240, 575, 447 ],
-      [575, 413, 300, 644, 703 ],
-      [638, 509, -120, 759, 806 ],
-      [658, 25, 180, 658, 25 ],
-      [369, 749, -300, 833, 693 ],
-      [7, 570, -240, 497, 290 ],
-      [1022, 66, 60, 567, 918 ],
-      [147, 535, 0, 147, 535 ],
-      [812, 600, 120, 925, 1002 ],
-      [861, 490, -60, 853, 990 ],
-      [949, 640, -270, 640, 949 ],
-      [763, 303, 120, 643, 810 ],
-      [673, 13, -120, 346, 588 ],
-      [1006, 506, -90, 506, 1006 ],
-      [740, 14, -120, 381, 646 ],
-      [829, 19, -300, 430, 726 ],
-      [996, 17, -240, 512, 869 ],
-      [583, 127, 270, 127, 583 ],
-      [53, 736, 120, 663, 412 ],
-      [709, 613, -150, 920, 884 ],
-      [121, 556, -270, 556, 121 ],
-      [266, 360, 0, 266, 360 ],
-      [962, 96, 30, 881, 563 ],
-      [287, 82, -240, 214, 288 ],
-      [668, 637, -210, 896, 884 ],
-      [1024, 490, -210, 1131, 934 ],
-      [91, 468, -180, 91, 468 ],
-      [269, 137, -60, 252, 300 ],
-      [137, 177, -90, 177, 137 ],
-      [804, 708, -240, 1014, 1049 ],
-      [76, 30, 300, 62, 80 ],
-      [200, 229, -90, 229, 200 ],
-      [728, 182, 0, 728, 182 ],
-      [248, 397, 60, 467, 412 ],
-      [442, 130, -60, 332, 447 ],
-      [654, 130, -330, 631, 439 ],
-      [892, 197, 120, 616, 869 ],
-      [128, 399, 270, 399, 128 ],
-      [557, 501, -330, 732, 712 ],
-      [942, 335, -360, 942, 335 ],
-      [95, 392, -360, 95, 392 ],
-      [1014, 542, -120, 975, 1148 ],
-      [364, 320, 60, 458, 475 ],
-      [866, 505, -300, 869, 1001 ],
-      [453, 68, -180, 453, 68 ],
-      [888, 558, -60, 925, 1048 ],
-      [952, 459, 150, 1053, 872 ],
-      [616, 554, -210, 810, 786 ],
-      [462, 203, 270, 203, 462 ],
-      [543, 141, -150, 540, 392 ],
-      [544, 212, 240, 455, 576 ],
-      [585, 204, 0, 585, 204 ],
-      [931, 477, 330, 1044, 878 ],
-      [495, 358, 60, 557, 607 ],
-      [588, 697, 120, 897, 856 ],
-      [854, 594, -90, 594, 854 ],
-      [268, 540, 360, 268, 540 ],
-      [968, 234, 150, 955, 685 ],
-      [152, 580, 360, 152, 580 ],
-      [3, 219, -270, 219, 3 ],
-      [301, 627, -60, 692, 573 ],
-      [96, 297, 150, 231, 303 ],
-      [614, 227, -150, 644, 503 ],
-      [533, 598, 210, 759, 783 ],
-      [101, 271, 150, 222, 284 ],
-      [782, 143, -30, 748, 515 ],
-      [160, 344, -240, 377, 309 ],
-      [148, 301, -30, 278, 335 ],
-      [874, 415, -210, 963, 794 ],
-      [847, 417, 0, 847, 417 ],
-      [1007, 642, -120, 1058, 1192 ],
-      [426, 714, 150, 725, 829 ],
-      [117, 406, -360, 117, 406 ],
-      [443, 37, 210, 401, 252 ],
-      [222, 113, -270, 113, 222 ],
-      [928, 699, -120, 1068, 1152 ],
-      [378, 50, 210, 351, 231 ],
-      [548, 161, -270, 161, 548 ],
-      [4, 48, 150, 27, 42 ],
-      [233, 682, -180, 233, 682 ],
-      [754, 670, -330, 987, 956 ],
-      [61, 221, -360, 61, 221 ],
-      [789, 309, 30, 837, 662 ],
-      [795, 641, 60, 952, 1008 ],
-      [573, 39, 180, 573, 39 ],
-      [712, 734, 90, 734, 712 ],
-      [18, 250, 150, 140, 224 ],
-      [805, 660, 300, 973, 1027 ],
-      [968, 663, 360, 968, 663 ],
-      [661, 69, 270, 69, 661 ],
-      [908, 634, 180, 908, 634 ],
-      [986, 680, -360, 986, 680 ],
-      [992, 503, -60, 930, 1110 ],
-      [514, 331, -180, 514, 331 ],
-      [85, 760, -150, 452, 699 ],
-      [830, 526, -180, 830, 526 ],
-      [458, 539, 60, 695, 665 ],
-      [152, 374, -30, 317, 400 ],
-      [59, 332, -150, 216, 316 ],
-      [29, 59, -90, 59, 29 ],
-      [909, 740, -210, 1157, 1094 ],
-      [633, 711, -300, 932, 903 ],
-      [651, 686, 180, 651, 686 ],
-      [56, 303, -240, 289, 198 ],
-      [314, 366, -240, 473, 453 ],
-      [624, 220, 270, 220, 624 ],
-      [888, 563, 60, 931, 1050 ],
-      [459, 676, -330, 735, 814 ],
-      [911, 720, 0, 911, 720 ],
-      [197, 742, 30, 541, 741 ],
-      [599, 655, 30, 845, 866 ],
-      [823, 361, -30, 892, 724 ],
-      [929, 81, -120, 533, 844 ],
-      [681, 122, 180, 681, 122 ],
-      [874, 358, -210, 935, 745 ],
-      [31, 57, 0, 31, 57 ],
-      [914, 722, -210, 1152, 1080 ],
-      [468, 298, -300, 491, 554 ],
-      [520, 213, -330, 556, 443 ],
-      [1014, 360, -360, 1014, 360 ],
-      [563, 42, 270, 42, 563 ],
-      [73, 658, -120, 605, 391 ],
-      [530, 587, -60, 771, 751 ],
-      [877, 329, 60, 723, 923 ],
-      [604, 216, -330, 631, 488 ],
-      [818, 239, -270, 239, 818 ],
-      [302, 156, -330, 339, 285 ],
-      [534, 507, -30, 715, 706 ],
-      [644, 128, 180, 644, 128 ],
-      [690, 121, -210, 657, 448 ],
-      [699, 542, -180, 699, 542 ],
-      [557, 597, -300, 795, 780 ],
-      [896, 226, 270, 226, 896 ],
-      [318, 116, -150, 332, 258 ],
-      [926, 568, 60, 954, 1085 ],
-      [987, 414, 300, 851, 1061 ],
-      [98, 639, -300, 601, 403 ],
-      [173, 272, 180, 173, 272 ],
-      [644, 755, 330, 934, 976 ],
-      [375, 504, -300, 623, 576 ],
-      [585, 259, 210, 635, 515 ],
-      [851, 677, 60, 1011, 1074 ],
-      [970, 580, 270, 580, 970 ],
-      [846, 51, -360, 846, 51 ],
-      [136, 745, 180, 136, 745 ],
-      [737, 716, -150, 995, 987 ],
-      [632, 22, -300, 334, 558 ],
-      [734, 151, -30, 710, 498 ],
-      [488, 633, -30, 738, 792 ],
-      [412, 146, -300, 331, 429 ],
-      [497, 585, -30, 722, 755 ],
-      [280, 455, -120, 533, 469 ],
-      [857, 413, -330, 948, 786 ],
-      [712, 279, -270, 279, 712 ],
-      [719, 381, -300, 689, 812 ],
-      [460, 165, -330, 480, 372 ],
-      [751, 639, -330, 969, 928 ],
-      [870, 421, -180, 870, 421 ],
-      [327, 18, -300, 179, 292 ],
-      [790, 327, -150, 847, 677 ],
-      [900, 699, -330, 1128, 1054 ],
-      [330, 141, 90, 141, 330 ],
-      [663, 16, -240, 345, 581 ],
-      [744, 549, 30, 918, 846 ],
-      [892, 320, -360, 892, 320 ],
-      [1009, 664, -180, 1009, 664 ],
-      [33, 459, -330, 257, 414 ],
-      [108, 344, 90, 344, 108 ],
-      [385, 589, 120, 702, 626 ],
-      [481, 413, -330, 622, 598 ],
-      [771, 320, 360, 771, 320 ],
-      [817, 567, -240, 899, 989 ],
-      [444, 296, -240, 477, 531 ],
-      [622, 86, 300, 383, 581 ],
-      [148, 755, -150, 505, 727 ],
-      [181, 743, -240, 733, 526 ],
-      [434, 767, 210, 758, 880 ],
-      [514, 80, -210, 485, 324 ],
-      [131, 368, 360, 131, 368 ],
-      [796, 728, 30, 1053, 1027 ],
-      [872, 539, 330, 1024, 903 ],
-      [856, 383, 150, 932, 758 ],
-      [3, 716, -330, 360, 621 ],
-      [194, 414, -240, 455, 374 ],
-      [93, 525, -240, 501, 341 ],
-      [417, 660, -270, 660, 417 ],
-      [602, 218, -270, 218, 602 ],
-      [376, 603, -210, 626, 708 ],
-      [607, 701, 150, 875, 909 ],
-      [599, 529, 120, 757, 781 ],
-      [117, 415, -120, 416, 308 ],
-      [61, 289, 270, 289, 61 ],
-      [760, 291, 210, 803, 631 ],
-      [830, 436, -120, 792, 935 ],
-      [1013, 505, -360, 1013, 505 ],
-      [153, 50, 270, 50, 153 ],
-      [283, 501, -270, 501, 283 ],
-      [412, 15, 330, 363, 219 ],
-      [646, 469, 270, 469, 646 ],
-      [347, 150, 30, 375, 303 ],
-      [1019, 237, -330, 1000, 714 ],
-      [360, 283, -30, 452, 425 ],
-      [211, 85, 240, 178, 224 ],
-      [1016, 707, -90, 707, 1016 ],
-      [323, 698, -330, 628, 765 ],
-      [330, 44, -300, 202, 307 ],
-      [192, 256, 210, 293, 317 ],
-      [343, 564, 210, 578, 658 ],
-      [274, 281, -90, 281, 274 ],
-      [115, 541, 60, 526, 369 ],
-      [661, 537, 300, 794, 840 ],
-      [736, 38, -180, 736, 38 ],
-      [171, 196, -90, 196, 171 ],
-      [1018, 190, -150, 975, 673 ],
-      [397, 432, -210, 559, 571 ],
-      [450, 679, -180, 450, 679 ],
-      [568, 54, 60, 330, 518 ],
-      [330, 311, -120, 433, 440 ],
-      [111, 517, 150, 354, 502 ],
-      [517, 602, -90, 602, 517 ],
-      [99, 330, -300, 335, 250 ],
-      [1021, 113, -270, 113, 1021 ],
-      [271, 241, -90, 241, 271 ],
-      [657, 236, 120, 532, 685 ],
-      [961, 534, -210, 1099, 941 ],
-      [147, 103, -300, 162, 178 ],
-      [415, 529, -270, 529, 415 ],
-      [1023, 8, 60, 518, 889 ],
-      [335, 91, -210, 335, 245 ],
-      [20, 479, -360, 20, 479 ],
-      [426, 553, -30, 644, 692 ],
-      [523, 550, 60, 737, 727 ],
-      [671, 752, 300, 985, 957 ],
-      [55, 477, -210, 285, 439 ],
-      [715, 429, 300, 728, 833 ],
-      [927, 539, -330, 1071, 930 ],
-      [1018, 82, 180, 1018, 82 ],
-      [158, 81, 180, 158, 81 ],
-      [736, 332, 270, 332, 736 ],
-      [978, 347, 0, 978, 347 ],
-      [999, 666, -210, 1198, 1075 ],
-      [435, 290, 300, 467, 521 ],
-      [21, 25, 300, 31, 30 ],
-      [951, 66, 0, 951, 66 ],
-      [148, 602, -330, 429, 594 ],
-      [55, 528, 210, 310, 483 ],
-      [99, 524, 300, 502, 347 ],
-      [847, 642, 360, 847, 642 ],
-      [581, 425, -60, 657, 715 ],
-      [436, 390, 270, 390, 436 ],
-      [929, 371, 180, 929, 371 ],
-      [111, 697, -300, 659, 444 ],
-      [24, 712, -270, 712, 24 ],
-      [941, 657, -210, 1142, 1038 ],
-      [444, 768, -360, 444, 768 ],
-      [519, 41, 150, 469, 294 ],
-      [288, 115, -90, 115, 288 ],
-      [166, 749, -210, 517, 730 ],
-      [152, 417, 210, 339, 436 ],
-      [579, 744, -180, 579, 744 ],
-      [444, 673, 180, 444, 673 ],
-      [173, 755, 120, 740, 525 ],
-      [288, 5, 60, 147, 251 ],
-      [436, 710, -30, 731, 833 ],
-      [670, 275, -30, 717, 573 ],
-      [683, 664, 0, 683, 664 ],
-      [375, 111, 120, 283, 378 ],
-      [765, 236, 90, 236, 765 ],
-      [986, 349, -240, 794, 1026 ],
-      [749, 15, -270, 15, 749 ],
-      [8, 348, -360, 8, 348 ],
-      [786, 477, 360, 786, 477 ],
-      [443, 693, 360, 443, 693 ],
-      [26, 251, 330, 147, 230 ],
-      [483, 753, -180, 483, 753 ],
-      [940, 497, -270, 497, 940 ],
-      [426, 10, -150, 372, 221 ],
-      [64, 583, 60, 536, 346 ],
-      [701, 555, -330, 884, 831 ],
-      [870, 348, -330, 927, 735 ],
-      [1005, 354, 0, 1005, 354 ],
-      [1013, 175, -270, 175, 1013 ],
-      [1004, 507, -330, 1122, 940 ],
-      [1001, 526, -90, 526, 1001 ],
-      [921, 120, -120, 563, 856 ],
-      [183, 56, 360, 183, 56 ],
-      [329, 376, -360, 329, 376 ],
-      [623, 423, 210, 750, 676 ],
-      [207, 181, 0, 207, 181 ],
-      [256, 65, 330, 253, 184 ],
-      [324, 50, -60, 203, 305 ],
-      [855, 42, 90, 42, 855 ],
-      [998, 27, -150, 877, 521 ],
-      [16, 9, 360, 16, 9 ],
-      [392, 700, -270, 700, 392 ],
-      [749, 69, -240, 434, 681 ],
-      [743, 316, 150, 801, 644 ],
-      [749, 15, -210, 655, 386 ],
-      [509, 170, -30, 524, 401 ],
-      [1007, 362, 30, 1053, 817 ],
-      [945, 604, 90, 604, 945 ],
-      [331, 477, 120, 578, 523 ],
-      [973, 458, 150, 1071, 882 ],
-      [243, 469, 180, 243, 469 ],
-      [214, 763, 90, 763, 214 ],
-      [344, 557, 180, 344, 557 ],
-      [549, 345, -270, 345, 549 ],
-      [229, 139, -270, 139, 229 ],
-      [474, 520, -90, 520, 474 ],
-      [959, 506, 270, 506, 959 ],
-      [506, 447, 90, 447, 506 ],
-      [119, 694, -180, 119, 694 ],
-      [811, 656, 270, 656, 811 ],
-      [514, 70, -30, 479, 318 ],
-      [229, 230, -30, 312, 313 ],
-      [877, 487, -240, 860, 1001 ],
-      [592, 131, 90, 131, 592 ],
-      [727, 302, 240, 624, 779 ],
-      [882, 657, -30, 1091, 1010 ],
-      [240, 608, -270, 608, 240 ],
-      [78, 219, 150, 176, 227 ],
-      [722, 308, 90, 308, 722 ],
-      [977, 147, -30, 919, 615 ],
-      [818, 533, 60, 870, 974 ],
-      [261, 704, 270, 704, 261 ],
-      [721, 593, 0, 721, 593 ],
-      [898, 268, 120, 680, 910 ],
-      [510, 46, -330, 464, 294 ],
-      [307, 707, 300, 764, 618 ],
-      [796, 118, 150, 748, 498 ],
-      [935, 177, 360, 935, 177 ],
-      [646, 718, -90, 718, 646 ],
-      [258, 682, 60, 719, 564 ],
-      [744, 528, -180, 744, 528 ],
-      [298, 723, -240, 774, 618 ],
-      [158, 495, 360, 158, 495 ],
-      [668, 400, -150, 777, 679 ],
-      [327, 14, -90, 14, 327 ],
-      [389, 244, -150, 457, 404 ],
-      [302, 73, -30, 297, 214 ],
-      [1, 6, 120, 5, 2 ],
-      [1016, 490, 90, 490, 1016 ],
-      [392, 683, 0, 392, 683 ],
-      [989, 472, -240, 903, 1091 ],
-      [246, 695, -270, 695, 246 ],
-      [442, 46, 210, 404, 260 ],
-      [404, 547, -150, 622, 675 ],
-      [723, 24, -150, 637, 381 ],
-      [78, 315, 90, 315, 78 ],
-      [375, 540, 150, 594, 654 ],
-      [829, 541, 180, 829, 541 ],
-      [494, 534, -120, 708, 693 ],
-      [92, 60, -180, 92, 60 ],
-      [598, 33, 270, 33, 598 ],
-      [783, 218, 210, 786, 579 ],
-      [907, 549, 240, 927, 1059 ],
-      [667, 83, 30, 618, 405 ],
-      [960, 625, 60, 1020, 1143 ],
-      [247, 683, 360, 247, 683 ],
-      [883, 196, 120, 611, 861 ],
-      [590, 50, -90, 50, 590 ],
-      [305, 420, -330, 474, 516 ],
-      [672, 489, -270, 489, 672 ],
-      [924, 168, -240, 606, 883 ],
-      [782, 755, -30, 1054, 1045 ],
-      [542, 668, -240, 849, 802 ],
-      [363, 400, -150, 513, 526 ],
-      [912, 351, -300, 759, 964 ],
-      [467, 536, -360, 467, 536 ],
-      [442, 430, -180, 442, 430 ],
-      [112, 104, -120, 145, 147 ],
-      [503, 332, 270, 332, 503 ],
-      [581, 68, 0, 581, 68 ],
-      [739, 761, 180, 739, 761 ],
-      [941, 579, 150, 1103, 970 ],
-      [409, 217, 60, 392, 462 ],
-      [607, 489, -300, 726, 769 ],
-      [916, 404, 30, 995, 807 ],
-      [11, 754, -180, 11, 754 ],
-      [15, 317, 240, 281, 170 ],
-      [280, 401, 330, 442, 487 ],
-      [611, 10, -90, 10, 611 ],
-      [478, 446, -30, 635, 625 ],
-      [995, 232, -30, 976, 698 ],
-      [713, 169, -210, 701, 501 ],
-      [413, 475, 0, 413, 475 ],
-      [1002, 162, -270, 162, 1002 ],
-      [75, 81, 120, 107, 103 ],
-      [640, 89, 90, 89, 640 ],
-      [896, 100, -330, 825, 534 ],
-      [699, 310, 60, 617, 760 ],
-      [641, 768, 60, 985, 939 ],
-      [1, 358, -270, 358, 1 ],
-      [475, 336, -30, 578, 528 ],
-      [938, 103, 120, 557, 862 ],
-      [125, 412, -150, 313, 418 ],
-      [623, 395, 0, 623, 395 ],
-      [749, 450, 90, 450, 749 ],
-      [390, 162, 180, 390, 162 ],
-      [11, 66, 270, 66, 11 ],
-      [55, 590, -180, 55, 590 ],
-      [633, 302, -180, 633, 302 ],
-      [199, 303, 180, 199, 303 ],
-      [359, 659, -240, 750, 638 ],
-      [827, 595, -150, 1013, 927 ],
-      [496, 688, 240, 843, 772 ],
-      [799, 387, -120, 733, 884 ],
-      [293, 180, 330, 342, 302 ],
-      [920, 472, -270, 472, 920 ],
-      [640, 480, -210, 794, 734 ],
-      [493, 521, 360, 493, 521 ],
-      [759, 227, -90, 227, 759 ],
-      [1023, 376, 210, 1072, 836 ],
-      [741, 645, 90, 645, 741 ],
-      [906, 497, -60, 881, 1032 ],
-      [183, 101, -150, 208, 177 ],
-      [9, 700, 240, 609, 356 ],
-      [360, 152, -330, 387, 311 ],
-      [287, 73, 120, 206, 283 ],
-      [429, 553, -150, 647, 692 ],
-      [659, 154, 330, 646, 462 ],
-      [651, 723, -180, 651, 723 ],
-      [21, 722, 180, 21, 722 ],
-      [819, 509, 60, 850, 963 ],
-      [447, 420, -210, 597, 586 ],
-      [867, 557, -90, 557, 867 ],
-      [155, 563, -180, 155, 563 ],
-      [982, 64, -30, 881, 546 ],
-      [1, 279, 60, 242, 139 ],
-      [674, 600, -150, 882, 856 ],
-      [962, 326, 0, 962, 326 ],
-      [920, 46, -60, 498, 819 ],
-      [157, 61, -90, 61, 157 ],
-      [918, 675, -360, 918, 675 ],
-      [492, 242, 60, 455, 547 ],
-      [728, 124, -150, 691, 470 ],
-      [74, 240, -360, 74, 240 ],
-      [353, 208, -300, 356, 409 ],
-      [833, 209, -30, 825, 597 ],
-      [386, 714, -180, 386, 714 ],
-      [676, 667, 120, 915, 917 ],
-      [146, 588, 180, 146, 588 ],
-      [580, 705, 240, 900, 854 ],
-      [950, 626, 150, 1135, 1015 ],
-      [975, 226, -360, 975, 226 ],
-      [534, 4, -240, 269, 463 ],
-      [835, 59, 0, 835, 59 ],
-      [861, 323, 180, 861, 323 ],
-      [972, 179, -360, 972, 179 ],
-      [430, 469, 330, 606, 621 ],
-      [688, 207, 240, 522, 698 ],
-      [356, 316, 60, 451, 466 ],
-      [85, 751, 0, 85, 751 ],
-      [920, 695, -150, 1143, 1061 ],
-      [606, 658, 90, 658, 606 ],
-      [614, 290, 90, 290, 614 ],
-      [786, 148, 150, 754, 519 ],
-      [254, 26, -300, 149, 232 ],
-      [1022, 755, -120, 1164, 1262 ],
-      [20, 309, 330, 171, 278 ],
-      [994, 57, -210, 888, 544 ],
-      [807, 324, 90, 324, 807 ],
-      [381, 387, 90, 387, 381 ],
-      [894, 309, 0, 894, 309 ],
-      [193, 763, -90, 763, 193 ],
-      [817, 455, 180, 817, 455 ],
-      [421, 276, 330, 501, 449 ],
-      [102, 466, 360, 102, 466 ],
-      [213, 464, 330, 415, 508 ],
-      [562, 479, -120, 695, 725 ],
-      [512, 456, -60, 649, 671 ],
-      [737, 294, 270, 294, 737 ],
-      [359, 579, -120, 679, 599 ],
-      [982, 481, 180, 982, 481 ],
-      [483, 626, 180, 483, 626 ],
-      [861, 470, -120, 836, 979 ],
-      [601, 17, 150, 528, 314 ],
-      [538, 93, -150, 511, 349 ],
-      [509, 252, 300, 471, 566 ],
-      [462, 674, 30, 737, 814 ],
-      [827, 289, -270, 289, 827 ],
-      [242, 73, 0, 242, 73 ],
-      [89, 343, -180, 89, 343 ],
-      [451, 311, 300, 493, 545 ],
-      [200, 673, 150, 509, 681 ],
-      [965, 550, -150, 1109, 957 ],
-      [288, 232, -120, 344, 364 ],
-      [1003, 635, -30, 1185, 1051 ],
-      [290, 249, 210, 375, 360 ],
-      [196, 595, 120, 612, 465 ],
-      [740, 447, -360, 740, 447 ],
-      [868, 628, -270, 628, 868 ],
-      [363, 694, 60, 782, 661 ],
-      [629, 264, 360, 629, 264 ],
-      [512, 413, 270, 413, 512 ],
-      [204, 369, 60, 421, 360 ],
-      [522, 584, 270, 584, 522 ],
-      [862, 568, 150, 1030, 921 ],
-      [302, 17, -360, 302, 17 ],
-      [78, 164, 210, 148, 180 ],
-      [751, 718, -90, 718, 751 ],
-      [785, 601, -240, 912, 978 ],
-      [916, 105, -300, 548, 845 ],
-      [480, 577, -60, 738, 703 ],
-      [457, 192, 360, 457, 192 ],
-      [307, 345, -30, 437, 452 ],
-      [888, 736, -210, 1137, 1079 ],
-      [755, 615, 330, 960, 910 ],
-      [443, 73, 360, 443, 73 ],
-      [462, 131, -240, 343, 464 ],
-      [250, 694, -270, 694, 250 ],
-      [632, 514, 300, 759, 804 ],
-      [827, 433, -360, 827, 433 ],
-      [922, 25, 210, 810, 482 ],
-      [345, 367, -360, 345, 367 ],
-      [317, 597, 0, 317, 597 ],
-      [780, 495, -30, 922, 819 ],
-      [998, 293, -180, 998, 293 ],
-      [948, 625, -120, 1014, 1132 ],
-      [921, 203, 0, 921, 203 ],
-      [87, 390, -60, 380, 270 ],
-      [211, 96, -300, 188, 230 ],
-      [111, 716, 120, 675, 453 ],
-      [152, 639, 120, 628, 449 ],
-      [961, 130, -270, 130, 961 ],
-      [1001, 367, 330, 1049, 818 ],
-      [477, 183, 60, 396, 504 ],
-      [933, 163, 330, 889, 607 ],
-      [160, 106, 210, 190, 171 ],
-      [508, 28, -360, 508, 28 ],
-      [6, 93, 30, 51, 83 ],
-      [428, 251, 120, 430, 494 ],
-      [511, 334, 60, 544, 609 ],
-      [147, 448, -60, 460, 351 ],
-      [840, 400, 60, 765, 927 ],
-      [997, 383, -330, 1054, 830 ],
-      [926, 740, -150, 1170, 1103 ],
-      [490, 671, 30, 759, 825 ],
-      [442, 23, 120, 240, 392 ],
-      [203, 403, 150, 376, 449 ],
-      [234, 407, 240, 468, 405 ],
-      [785, 728, -270, 728, 785 ],
-      [439, 343, 60, 516, 551 ],
-      [23, 453, -270, 453, 23 ],
-      [459, 314, 120, 501, 553 ],
-      [42, 294, -240, 275, 182 ],
-      [115, 220, -270, 220, 115 ],
-      [431, 587, -360, 431, 587 ],
-      [965, 150, -330, 910, 612 ],
-      [615, 303, 60, 569, 683 ],
-      [303, 478, -300, 565, 501 ],
-      [114, 298, -330, 247, 314 ],
-      [260, 627, 0, 260, 627 ],
-      [851, 644, -330, 1058, 983 ],
-      [1014, 219, 0, 1014, 219 ],
-      [686, 251, 270, 251, 686 ],
-      [868, 336, -270, 336, 868 ],
-      [1011, 659, 300, 1075, 1204 ],
-      [1024, 615, -300, 1044, 1193 ],
-      [43, 307, 0, 43, 307 ],
-      [623, 534, -270, 534, 623 ],
-      [722, 619, 0, 722, 619 ],
-      [767, 46, -120, 422, 686 ],
-      [243, 684, -240, 713, 551 ],
-      [323, 676, -30, 616, 746 ],
-      [821, 423, 210, 922, 775 ],
-      [687, 305, -210, 746, 606 ],
-      [845, 295, -330, 878, 677 ],
-      [762, 295, 270, 295, 762 ],
-      [878, 327, -180, 878, 327 ],
-      [373, 26, 360, 373, 26 ],
-      [505, 567, 210, 720, 742 ],
-      [10, 374, 240, 328, 194 ],
-      [350, 556, 180, 350, 556 ],
-      [524, 30, 90, 30, 524 ],
-      [989, 645, -270, 645, 989 ],
-      [765, 392, 30, 858, 721 ],
-      [988, 257, 330, 983, 717 ],
-      [41, 60, -150, 64, 71 ],
-      [938, 718, 180, 938, 718 ],
-      [196, 230, 210, 283, 296 ],
-      [165, 608, 0, 165, 608 ],
-      [959, 615, 360, 959, 615 ],
-      [790, 109, 180, 790, 109 ],
-      [508, 502, 210, 689, 688 ],
-      [104, 475, 60, 462, 327 ],
-      [262, 281, -300, 373, 366 ],
-      [827, 253, -30, 842, 632 ],
-      [760, 284, 30, 800, 625 ],
-      [62, 219, -30, 162, 221 ],
-      [822, 365, 180, 822, 365 ],
-      [593, 488, 30, 757, 719 ],
-      [95, 439, -120, 426, 301 ],
-      [95, 263, 0, 95, 263 ],
-      [835, 644, -270, 644, 835 ],
-      [590, 722, 180, 590, 722 ],
-      [180, 150, -270, 150, 180 ],
-      [292, 2, -30, 252, 148 ],
-      [746, 571, 240, 867, 931 ],
-      [256, 617, -300, 661, 529 ],
-      [723, 466, 60, 765, 859 ],
-      [472, 142, -210, 479, 357 ],
-      [7, 213, 210, 112, 186 ],
-      [362, 284, -270, 284, 362 ],
-      [862, 141, 360, 862, 141 ],
-      [1006, 583, 300, 1006, 1162 ],
-      [760, 718, -300, 1001, 1017 ],
-      [887, 169, -300, 589, 852 ],
-      [326, 728, 270, 728, 326 ],
-      [144, 152, 120, 203, 199 ],
-      [252, 694, -180, 252, 694 ],
-      [846, 279, -60, 663, 871 ],
-      [43, 284, 150, 179, 266 ],
-      [848, 555, -300, 904, 1011 ],
-      [980, 433, -180, 980, 433 ],
-      [946, 419, -360, 946, 419 ],
-      [849, 221, 330, 845, 615 ],
-      [952, 117, -240, 576, 881 ],
-      [32, 361, -270, 361, 32 ],
-      [897, 469, -120, 853, 1010 ],
-      [536, 657, -210, 792, 835 ],
-      [795, 524, 60, 851, 950 ],
-      [219, 556, 330, 466, 591 ],
-      [950, 424, 120, 841, 1033 ],
-      [11, 390, -180, 11, 390 ],
-      [283, 331, 210, 410, 427 ],
-      [308, 199, -330, 365, 325 ],
-      [267, 145, -210, 303, 258 ],
-      [450, 168, 150, 473, 368 ],
-      [578, 73, -150, 536, 351 ],
-      [909, 474, -240, 864, 1023 ],
-      [115, 303, 270, 303, 115 ],
-      [717, 467, 60, 762, 853 ],
-      [673, 411, -300, 692, 787 ],
-      [344, 419, 90, 419, 344 ],
-      [592, 630, -330, 827, 841 ],
-      [374, 93, -150, 369, 267 ],
-      [450, 293, 0, 450, 293 ],
-      [681, 630, 150, 904, 885 ],
-      [369, 295, 240, 438, 466 ],
-      [681, 208, -60, 519, 693 ],
-      [846, 295, 240, 677, 879 ],
-      [684, 64, -60, 395, 624 ],
-      [238, 569, 360, 238, 569 ],
-      [357, 58, 0, 357, 58 ],
-      [994, 502, -120, 931, 1110 ],
-      [25, 14, -30, 27, 24 ],
-      [345, 351, 240, 475, 473 ],
-      [857, 93, 120, 509, 787 ],
-      [569, 370, -360, 569, 370 ],
-      [378, 112, -150, 382, 285 ],
-      [818, 747, 150, 1081, 1054 ],
-      [637, 491, 210, 796, 742 ],
-      [54, 669, 0, 54, 669 ],
-      [17, 169, 60, 154, 98 ],
-      [539, 146, -210, 539, 394 ],
-      [876, 164, -180, 876, 164 ],
-      [312, 422, 150, 481, 519 ],
-      [139, 297, 240, 325, 268 ],
-      [805, 723, -150, 1058, 1027 ],
-      [839, 238, -30, 844, 625 ],
-      [127, 83, -60, 134, 150 ],
-      [832, 561, -330, 1000, 901 ],
-      [597, 601, 330, 817, 818 ],
-      [96, 613, -240, 578, 388 ],
-      [696, 249, -120, 563, 726 ],
-      [941, 137, 60, 589, 882 ],
-      [180, 371, -300, 410, 340 ],
-      [911, 475, 0, 911, 475 ],
-      [743, 310, -30, 797, 639 ],
-      [42, 171, 180, 42, 171 ],
-      [515, 266, 270, 266, 515 ],
-      [959, 122, 60, 585, 891 ],
-      [9, 569, -90, 569, 9 ],
-      [975, 640, -240, 1041, 1163 ],
-      [117, 394, 0, 117, 394 ],
-      [477, 331, 120, 525, 577 ],
-      [31, 465, -270, 465, 31 ],
-      [148, 381, 210, 318, 403 ],
-      [660, 169, -240, 475, 654 ],
-      [87, 201, -90, 201, 87 ],
-      [855, 587, 180, 855, 587 ],
-      [710, 538, 300, 819, 883 ],
-      [288, 544, 90, 544, 288 ],
-      [665, 507, -30, 828, 771 ],
-      [836, 594, 360, 836, 594 ],
-      [314, 183, -60, 313, 362 ],
-      [997, 206, -360, 997, 206 ],
-      [126, 316, 0, 126, 316 ],
-      [912, 43, 180, 912, 43 ],
-      [62, 108, 360, 62, 108 ],
-      [464, 749, 180, 464, 749 ],
-      [197, 513, -30, 426, 542 ],
-      [91, 728, -240, 675, 441 ],
-      [743, 459, 240, 768, 872 ],
-      [201, 318, 60, 375, 333 ],
-      [183, 553, 240, 569, 434 ],
-      [605, 532, -300, 763, 789 ],
-      [623, 627, 0, 623, 627 ],
-      [123, 542, 60, 530, 377 ],
-      [873, 589, 150, 1050, 945 ],
-      [866, 169, 150, 833, 577 ],
-      [616, 316, -120, 581, 690 ],
-      [59, 384, -150, 242, 361 ],
-      [227, 173, 300, 262, 282 ],
-      [45, 323, -150, 199, 301 ],
-      [655, 460, -360, 655, 460 ],
-      [484, 145, 150, 491, 366 ],
-      [587, 611, 30, 813, 822 ],
-      [87, 704, -210, 427, 652 ],
-      [668, 590, -360, 668, 590 ],
-      [368, 471, -210, 553, 590 ],
-      [41, 165, 90, 165, 41 ],
-      [398, 209, -270, 209, 398 ],
-      [702, 379, -120, 678, 796 ],
-      [593, 412, 210, 718, 652 ],
-      [907, 135, -90, 135, 907 ],
-      [934, 498, 60, 897, 1057 ],
-      [646, 170, -120, 469, 643 ],
-      [168, 235, -180, 168, 235 ],
-      [413, 736, -330, 725, 843 ],
-      [419, 243, 120, 419, 482 ],
-      [648, 274, 270, 274, 648 ],
-      [274, 572, -270, 572, 274 ],
-      [411, 330, 90, 330, 411 ],
-      [778, 6, -240, 393, 675 ],
-      [551, 686, -120, 868, 819 ],
-      [936, 618, 360, 936, 618 ],
-      [490, 334, -210, 591, 532 ],
-      [858, 460, 30, 973, 826 ],
-      [115, 1, -30, 99, 58 ],
-      [159, 315, 210, 294, 351 ],
-      [830, 33, -270, 33, 830 ],
-      [696, 238, 300, 552, 721 ],
-      [841, 546, -120, 892, 1000 ],
-      [466, 362, -120, 546, 583 ],
-      [641, 7, -210, 558, 325 ],
-      [995, 708, -360, 995, 708 ],
-      [989, 307, -30, 1009, 760 ],
-      [185, 182, -330, 251, 250 ],
-      [717, 268, -330, 754, 590 ],
-      [183, 387, -30, 351, 426 ],
-      [995, 241, 0, 995, 241 ],
-      [124, 763, 240, 722, 488 ],
-      [15, 625, 30, 324, 548 ],
-      [345, 207, -360, 345, 207 ],
-      [683, 687, -360, 683, 687 ],
-      [910, 665, 330, 1120, 1031 ],
-      [938, 638, -120, 1021, 1130 ],
-      [385, 8, 60, 199, 337 ],
-      [445, 546, 300, 694, 658 ],
-      [506, 682, -60, 842, 779 ],
-      [986, 660, 180, 986, 660 ],
-      [485, 753, 180, 485, 753 ],
-      [302, 764, 30, 643, 812 ],
-      [846, 254, 240, 642, 858 ],
-      [847, 765, 150, 1115, 1085 ],
-      [857, 680, 60, 1017, 1082 ],
-      [786, 615, -90, 615, 786 ],
-      [100, 135, -60, 165, 153 ],
-      [681, 469, -300, 746, 823 ],
-      [595, 80, -360, 595, 80 ],
-      [1023, 51, 270, 51, 1023 ],
-      [749, 415, 270, 415, 749 ],
-      [467, 641, 240, 787, 724 ],
-      [1017, 507, -240, 947, 1132 ],
-      [819, 374, -240, 733, 895 ],
-      [511, 248, -330, 566, 470 ],
-      [66, 69, 270, 69, 66 ],
-      [469, 144, -360, 469, 144 ],
-      [883, 655, 90, 655, 883 ],
-      [1000, 332, 180, 1000, 332 ],
-      [1003, 331, 210, 1033, 787 ],
-      [861, 125, -120, 537, 807 ],
-      [697, 474, -240, 758, 839 ],
-      [528, 469, 240, 669, 691 ],
-      [696, 315, -150, 759, 620 ],
-      [860, 698, 120, 1033, 1092 ],
-      [906, 747, 180, 906, 747 ],
-      [747, 330, 300, 658, 811 ],
-      [768, 224, 210, 776, 577 ],
-      [389, 206, -210, 439, 371 ],
-      [116, 190, 90, 190, 116 ],
-      [935, 67, 210, 842, 524 ],
-      [259, 590, -60, 639, 519 ],
-      [437, 217, -360, 437, 217 ],
-      [265, 739, -60, 771, 598 ],
-      [592, 616, -120, 828, 819 ],
-      [225, 527, -150, 457, 567 ],
-      [974, 319, 180, 974, 319 ],
-      [891, 126, -360, 891, 126 ],
-      [656, 417, -150, 776, 688 ],
-      [864, 504, 30, 1000, 867 ],
-      [489, 437, 90, 437, 489 ],
-      [279, 630, -90, 630, 279 ],
-      [701, 190, 150, 702, 514 ],
-      [723, 388, 120, 697, 819 ],
-      [140, 64, -30, 152, 125 ],
-      [486, 233, -270, 233, 486 ],
-      [803, 195, 30, 792, 570 ],
-      [536, 95, 150, 511, 348 ],
-      [567, 587, -180, 567, 587 ],
-      [873, 466, 300, 839, 989 ],
-      [408, 65, -30, 385, 260 ],
-      [31, 274, -150, 162, 251 ],
-      [440, 31, 30, 396, 246 ],
-      [114, 573, -330, 384, 552 ],
-      [772, 678, -270, 678, 772 ],
-      [203, 274, -60, 337, 312 ],
-      [336, 108, 150, 344, 260 ],
-      [894, 510, 240, 888, 1028 ],
-      [594, 167, 60, 441, 597 ],
-      [850, 54, -240, 471, 762 ],
-      [753, 359, -180, 753, 359 ],
-      [214, 382, 90, 382, 214 ],
-      [514, 712, 120, 873, 800 ],
-      [43, 29, -60, 45, 51 ],
-      [89, 608, -150, 380, 570 ],
-      [219, 760, 90, 760, 219 ],
-      [659, 244, 210, 691, 539 ],
-      [334, 146, -30, 361, 293 ],
-      [134, 591, 120, 578, 410 ],
-      [717, 460, 180, 717, 460 ],
-      [896, 257, -240, 670, 902 ],
-      [137, 417, 150, 326, 428 ],
-      [767, 34, 90, 34, 767 ],
-      [414, 66, 120, 263, 390 ],
-      [825, 132, -30, 779, 526 ],
-      [91, 296, -60, 300, 226 ],
-      [745, 22, 180, 745, 22 ],
-      [520, 272, 330, 585, 496 ],
-      [974, 372, 150, 1029, 807 ],
-      [626, 141, -150, 612, 434 ],
-      [350, 45, 120, 213, 324 ],
-      [552, 147, -240, 402, 550 ],
-      [239, 722, -210, 567, 743 ],
-      [873, 265, -150, 888, 664 ],
-      [521, 115, 0, 521, 115 ],
-      [979, 183, 270, 183, 979 ],
-      [401, 741, 300, 841, 717 ],
-      [147, 363, -180, 147, 363 ],
-      [86, 325, 180, 86, 325 ],
-      [813, 26, 300, 428, 717 ],
-      [105, 288, 360, 105, 288 ],
-      [763, 702, -240, 989, 1010 ],
-      [952, 112, -300, 572, 880 ],
-      [163, 767, -30, 524, 745 ],
-      [485, 389, 90, 389, 485 ],
-      [983, 355, 240, 797, 1028 ],
-      [852, 655, 240, 992, 1064 ],
-      [749, 765, -180, 749, 765 ],
-      [1007, 61, 150, 902, 555 ],
-      [737, 671, 180, 737, 671 ],
-      [654, 749, -300, 975, 940 ],
-      [631, 553, -360, 631, 553 ],
-      [803, 498, -240, 832, 943 ],
-      [914, 620, -240, 993, 1100 ],
-      [353, 215, 120, 362, 411 ],
-      [968, 185, -270, 185, 968 ],
-      [803, 55, 360, 803, 55 ],
-      [601, 616, 360, 601, 616 ],
-      [882, 604, -330, 1065, 963 ],
-      [571, 388, 330, 687, 621 ],
-      [295, 111, 300, 242, 310 ],
-      [402, 583, 90, 583, 402 ],
-      [420, 417, -180, 420, 417 ],
-      [588, 334, -330, 676, 582 ],
-      [753, 598, -120, 893, 950 ],
-      [412, 556, 60, 687, 634 ],
-      [545, 390, 120, 610, 665 ],
-      [526, 72, -30, 490, 325 ],
-      [502, 733, -180, 502, 733 ],
-      [560, 393, 210, 680, 619 ],
-      [487, 613, 300, 773, 727 ],
-      [388, 146, 120, 319, 408 ],
-      [1, 461, -210, 230, 398 ],
-      [278, 133, 90, 133, 278 ],
-      [357, 698, -60, 781, 658 ],
-      [723, 238, -270, 238, 723 ],
-      [310, 646, 120, 713, 590 ],
-      [994, 272, 180, 994, 272 ],
-      [451, 649, 150, 714, 786 ],
-      [713, 300, -210, 767, 615 ],
-      [467, 665, -360, 467, 665 ],
-      [369, 187, -240, 346, 411 ],
-      [24, 188, 210, 113, 174 ],
-      [234, 396, 360, 234, 396 ],
-      [889, 663, 270, 663, 889 ],
-      [293, 437, -240, 524, 470 ],
-      [438, 669, -360, 438, 669 ],
-      [78, 646, -90, 646, 78 ],
-      [836, 216, -210, 831, 603 ],
-      [524, 750, 90, 750, 524 ],
-      [733, 332, -30, 799, 654 ],
-      [736, 608, 180, 736, 608 ],
-      [933, 626, 360, 933, 626 ],
-      [721, 33, -30, 640, 389 ],
-      [686, 699, -120, 947, 943 ],
-      [556, 151, 300, 407, 556 ],
-      [743, 479, 210, 882, 785 ],
-      [767, 537, 90, 537, 767 ],
-      [130, 396, 300, 406, 310 ],
-      [357, 20, 270, 20, 357 ],
-      [984, 570, -150, 1136, 985 ],
-      [449, 353, -300, 530, 564 ],
-      [164, 285, 300, 327, 284 ],
-      [127, 57, 330, 137, 112 ],
-      [618, 571, 270, 571, 618 ],
-      [968, 220, -330, 948, 674 ],
-      [875, 9, 150, 761, 444 ],
-      [649, 584, -90, 584, 649 ],
-      [258, 681, 300, 717, 563 ],
-      [155, 181, 330, 224, 234 ],
-      [27, 151, 120, 144, 97 ],
-      [340, 487, -270, 487, 340 ],
-      [441, 610, 0, 441, 610 ],
-      [350, 705, 60, 785, 655 ],
-      [303, 400, -150, 461, 496 ],
-      [164, 357, 60, 390, 320 ],
-      [225, 245, 90, 245, 225 ],
-      [924, 731, -90, 731, 924 ],
-      [291, 156, -180, 291, 156 ],
-      [184, 272, 0, 184, 272 ],
-      [103, 292, 150, 235, 303 ],
-      [782, 547, -150, 950, 864 ],
-      [906, 109, -300, 546, 838 ],
-      [387, 371, -360, 387, 371 ],
-      [966, 598, 30, 1135, 1000 ],
-      [259, 721, -360, 259, 721 ],
-      [868, 121, -120, 538, 811 ],
-      [464, 46, -180, 464, 46 ],
-      [838, 264, 0, 838, 264 ],
-      [72, 402, 240, 383, 262 ],
-      [570, 479, -210, 732, 698 ],
-      [244, 297, 330, 359, 379 ],
-      [567, 208, -330, 595, 463 ],
-      [679, 497, 30, 836, 769 ],
-      [706, 454, -120, 745, 837 ],
-      [242, 648, -180, 242, 648 ],
-      [253, 531, -60, 585, 484 ],
-      [589, 111, 0, 589, 111 ],
-      [876, 739, 240, 1077, 1127 ],
-      [346, 25, -120, 194, 311 ],
-      [178, 452, 360, 178, 452 ],
-      [399, 634, -120, 747, 661 ],
-      [324, 292, 90, 292, 324 ],
-      [394, 33, -180, 394, 33 ],
-      [959, 562, 270, 562, 959 ],
-      [272, 743, 150, 606, 777 ],
-      [547, 164, -90, 164, 547 ],
-      [982, 606, 30, 1153, 1015 ],
-      [455, 494, 0, 455, 494 ],
-      [279, 753, 30, 617, 791 ],
-      [638, 118, -270, 118, 638 ],
-      [610, 417, 330, 736, 666 ],
-      [977, 660, -120, 1059, 1175 ],
-      [597, 187, -90, 187, 597 ],
-      [880, 138, -300, 559, 831 ],
-      [743, 342, -330, 814, 667 ],
-      [445, 752, -150, 760, 872 ],
-      [854, 720, -330, 1099, 1050 ],
-      [387, 292, 150, 481, 445 ],
-      [905, 501, 150, 1033, 885 ],
-      [431, 211, 270, 211, 431 ],
-      [558, 668, -90, 668, 558 ],
-      [507, 633, -180, 507, 633 ],
-      [843, 312, 0, 843, 312 ],
-      [199, 203, 120, 275, 272 ],
-      [303, 760, -300, 809, 642 ],
-      [374, 325, -300, 467, 485 ],
-      [662, 198, -360, 662, 198 ],
-      [734, 488, -60, 788, 879 ],
-      [440, 398, -330, 580, 564 ],
-      [126, 721, -120, 686, 469 ],
-      [993, 371, -210, 1044, 816 ],
-      [367, 750, -360, 367, 750 ],
-      [621, 615, -60, 842, 844 ],
-      [100, 764, 150, 468, 710 ],
-      [787, 223, 150, 792, 585 ],
-      [906, 503, -300, 888, 1035 ],
-      [1001, 231, -90, 231, 1001 ],
-      [8, 13, -360, 8, 13 ],
-      [428, 343, 0, 428, 343 ],
-      [491, 436, -30, 642, 623 ],
-      [835, 412, 330, 928, 774 ],
-      [20, 687, 300, 603, 360 ],
-      [49, 385, 150, 234, 356 ],
-      [493, 460, 150, 656, 643 ],
-      [183, 282, 360, 183, 282 ],
-      [886, 193, 120, 609, 862 ],
-      [999, 175, 330, 952, 651 ],
-      [350, 181, 360, 350, 181 ],
-      [352, 502, -60, 609, 555 ],
-      [883, 102, 360, 883, 102 ],
-      [327, 728, 0, 327, 728 ],
-      [264, 743, -60, 773, 599 ],
-      [177, 11, 300, 97, 158 ],
-      [909, 380, 0, 909, 380 ],
-      [610, 517, 270, 517, 610 ],
-      [608, 413, -270, 413, 608 ],
-      [251, 394, -120, 465, 413 ],
-      [202, 656, 60, 668, 502 ],
-      [170, 152, -180, 170, 152 ],
-      [594, 46, -90, 46, 594 ],
-      [575, 290, -120, 537, 641 ],
-      [82, 488, -150, 314, 463 ],
-      [504, 620, -150, 745, 788 ],
-      [415, 533, 210, 625, 668 ],
-      [939, 222, -30, 923, 661 ],
-      [813, 678, -360, 813, 678 ],
-      [944, 98, 0, 944, 98 ],
-      [284, 249, -90, 249, 284 ],
-      [888, 377, 60, 769, 957 ],
-      [113, 54, 90, 54, 113 ],
-      [498, 485, -360, 498, 485 ],
-      [828, 546, 90, 546, 828 ],
-      [99, 156, -30, 162, 184 ],
-      [409, 467, -270, 467, 409 ],
-      [200, 403, -60, 447, 374 ],
-      [679, 244, -150, 709, 549 ],
-      [685, 184, -60, 500, 685 ],
-      [191, 396, 210, 362, 437 ],
-      [572, 294, -180, 572, 294 ],
-      [130, 378, -120, 391, 300 ],
-      [773, 751, 330, 1044, 1036 ],
-      [778, 604, 120, 911, 974 ],
-      [409, 678, 270, 678, 409 ],
-      [867, 216, -30, 857, 620 ],
-      [1010, 366, 360, 1010, 366 ],
-      [425, 107, -150, 421, 304 ],
-      [743, 620, 30, 953, 908 ],
-      [167, 763, -330, 525, 744 ],
-      [946, 424, -30, 1030, 840 ],
-      [179, 521, 330, 415, 540 ],
-      [507, 332, 300, 540, 605 ],
-      [457, 147, 150, 468, 354 ],
-      [110, 453, 60, 446, 321 ],
-      [994, 335, 270, 335, 994 ],
-      [453, 324, -120, 506, 553 ],
-      [448, 642, -30, 707, 780 ],
-      [768, 431, -150, 880, 756 ],
-      [307, 556, -150, 542, 634 ],
-      [374, 497, 240, 616, 571 ],
-      [831, 631, 0, 831, 631 ],
-      [768, 243, 330, 786, 594 ],
-      [683, 585, -270, 585, 683 ],
-      [377, 667, 150, 659, 765 ],
-      [976, 645, -270, 645, 976 ],
-      [838, 216, 60, 605, 833 ],
-      [163, 552, -60, 558, 417 ],
-      [654, 359, 360, 654, 359 ],
-      [947, 589, 150, 1114, 982 ],
-      [210, 101, -120, 191, 231 ],
-      [37, 724, -240, 645, 393 ],
-      [557, 532, -30, 747, 739 ],
-      [495, 276, -180, 495, 276 ],
-      [628, 558, -300, 796, 822 ],
-      [341, 522, 330, 555, 622 ],
-      [500, 382, -210, 624, 579 ],
-      [66, 503, 330, 308, 469 ],
-      [488, 225, -60, 437, 534 ],
-      [460, 168, -240, 374, 481 ],
-      [148, 325, -150, 290, 354 ],
-      [499, 352, -180, 499, 352 ],
-      [667, 2, 330, 577, 335 ],
-      [133, 373, -150, 301, 388 ],
-      [379, 76, -360, 379, 76 ],
-      [490, 332, 150, 590, 531 ],
-      [435, 706, -210, 729, 827 ],
-      [668, 755, 270, 755, 668 ],
-      [612, 353, -270, 353, 612 ],
-      [10, 697, -90, 697, 10 ],
-      [193, 40, 210, 186, 130 ],
-      [509, 414, -180, 509, 414 ],
-      [766, 146, -180, 766, 146 ],
-      [707, 245, 180, 707, 245 ],
-      [1016, 529, 240, 965, 1143 ],
-      [20, 128, -180, 20, 128 ],
-      [743, 454, -240, 764, 869 ],
-      [950, 187, -240, 636, 914 ],
-      [804, 646, 90, 646, 804 ],
-      [957, 653, 30, 1154, 1044 ],
-      [309, 30, 60, 180, 282 ],
-      [94, 411, -270, 411, 94 ],
-      [347, 217, -150, 408, 360 ],
-      [603, 747, 90, 747, 603 ],
-      [331, 741, -150, 656, 806 ],
-      [160, 755, 0, 160, 755 ],
-      [431, 544, -330, 645, 686 ],
-      [618, 488, -150, 778, 731 ],
-      [788, 323, -270, 323, 788 ],
-      [404, 272, -360, 404, 272 ],
-      [948, 504, -330, 1072, 909 ],
-      [522, 574, 60, 757, 739 ],
-      [648, 66, 270, 66, 648 ],
-      [967, 518, 240, 931, 1095 ],
-      [589, 766, 210, 892, 956 ],
-      [915, 118, 210, 850, 558 ],
-      [387, 441, 0, 387, 441 ],
-      [464, 136, -270, 136, 464 ],
-      [790, 727, 30, 1047, 1024 ],
-      [952, 262, 300, 701, 955 ],
-      [960, 204, 30, 933, 656 ],
-      [1008, 596, -150, 1169, 1019 ],
-      [579, 313, -90, 313, 579 ],
-      [438, 270, -330, 514, 452 ],
-      [270, 711, -330, 588, 750 ],
-      [64, 629, -210, 369, 575 ],
-      [865, 151, 210, 824, 562 ],
-      [343, 499, 330, 546, 603 ],
-      [471, 323, 300, 514, 568 ],
-      [5, 268, -180, 5, 268 ],
-      [926, 220, 0, 926, 220 ],
-      [470, 208, -150, 510, 414 ],
-      [778, 641, 150, 993, 942 ],
-      [150, 202, -330, 230, 249 ],
-      [212, 404, 360, 212, 404 ],
-      [270, 451, 210, 458, 525 ],
-      [485, 332, 360, 485, 332 ],
-      [262, 588, 90, 588, 262 ],
-      [220, 173, -330, 276, 259 ],
-      [124, 176, -60, 212, 195 ],
-      [375, 102, 150, 375, 274 ],
-      [898, 454, 330, 1003, 842 ],
-      [166, 269, 210, 277, 315 ],
-      [876, 381, -330, 948, 767 ],
-      [921, 540, 60, 928, 1067 ],
-      [891, 742, -240, 1088, 1141 ],
-      [674, 337, 60, 628, 751 ],
-      [659, 533, -90, 533, 659 ],
-      [284, 698, 60, 745, 594 ],
-      [339, 22, 240, 187, 303 ],
-      [750, 303, 330, 800, 637 ],
-      [431, 208, 30, 477, 395 ],
-      [388, 332, 300, 480, 502 ],
-      [176, 221, -90, 221, 176 ],
-      [231, 144, -300, 240, 272 ],
-      [824, 43, -330, 734, 448 ],
-      [995, 548, 0, 995, 548 ],
-      [582, 274, -240, 527, 640 ],
-      [953, 486, -300, 897, 1068 ],
-      [529, 740, -300, 905, 828 ],
-      [340, 535, 0, 340, 535 ],
-      [285, 90, 210, 290, 219 ],
-      [835, 380, -210, 913, 745 ],
-      [719, 512, 0, 719, 512 ],
-      [86, 685, 150, 416, 634 ],
-      [172, 535, 180, 172, 535 ],
-      [222, 512, -30, 447, 554 ],
-      [721, 180, 240, 515, 713 ],
-      [906, 127, -30, 847, 563 ],
-      [997, 523, -60, 950, 1124 ],
-      [94, 10, -300, 55, 86 ],
-      [617, 223, -210, 645, 500 ],
-      [393, 81, 150, 380, 265 ],
-      [612, 620, -90, 620, 612 ],
-      [100, 684, -180, 100, 684 ],
-      [804, 44, 360, 804, 44 ],
-      [540, 211, 90, 211, 540 ],
-      [1007, 751, 270, 751, 1007 ],
-      [815, 663, -360, 815, 663 ],
-      [247, 642, 150, 534, 678 ],
-      [665, 712, 180, 665, 712 ],
-      [771, 407, -360, 771, 407 ],
-      [995, 701, -300, 1104, 1211 ],
-      [702, 392, 330, 802, 690 ],
-      [67, 467, 240, 436, 291 ],
-      [343, 301, 270, 301, 343 ],
-      [308, 705, -270, 705, 308 ],
-      [955, 692, -270, 692, 955 ],
-      [817, 535, 360, 817, 535 ],
-      [847, 720, 240, 1046, 1092 ],
-      [551, 450, 180, 551, 450 ],
-      [267, 259, -180, 267, 259 ],
-      [279, 237, -240, 344, 358 ],
-      [400, 764, 150, 728, 860 ],
-      [322, 45, -150, 300, 199 ],
-      [131, 302, 150, 264, 326 ],
-      [1023, 533, 90, 533, 1023 ],
-      [147, 480, 0, 147, 480 ],
-      [271, 324, -210, 396, 415 ],
-      [255, 192, -270, 192, 255 ],
-      [71, 604, 180, 71, 604 ],
-      [835, 36, -330, 741, 448 ],
-      [93, 245, -90, 245, 93 ],
-      [286, 545, -90, 545, 286 ],
-      [1000, 17, -60, 513, 874 ],
-      [288, 115, 240, 243, 306 ],
-      [1000, 114, 0, 1000, 114 ],
-      [604, 223, -270, 223, 604 ],
-      [106, 427, 60, 422, 304 ],
-      [322, 618, 240, 695, 586 ],
-      [472, 670, 60, 815, 743 ],
-      [197, 528, 120, 555, 433 ],
-      [267, 597, 360, 267, 597 ],
-      [653, 43, 120, 363, 585 ],
-      [9, 25, 150, 19, 25 ],
-      [448, 240, 270, 240, 448 ],
-      [265, 222, 360, 265, 222 ],
-      [792, 674, -180, 792, 674 ],
-      [934, 753, 240, 1118, 1184 ],
-      [484, 226, 90, 226, 484 ],
-      [289, 580, 0, 289, 580 ],
-      [900, 727, -240, 1079, 1141 ],
-      [533, 159, 360, 533, 159 ],
-      [493, 649, -360, 493, 649 ],
-      [155, 655, -330, 461, 644 ],
-      [863, 223, -90, 223, 863 ],
-      [700, 421, 120, 714, 815 ],
-      [688, 247, 30, 718, 557 ],
-      [973, 179, 0, 973, 179 ],
-      [803, 542, 240, 869, 965 ],
-      [431, 758, 60, 871, 752 ],
-      [952, 665, 0, 952, 665 ],
-      [128, 297, 150, 258, 319 ],
-      [100, 666, 60, 626, 419 ],
-      [129, 14, -60, 75, 118 ],
-      [190, 661, 150, 494, 665 ],
-      [570, 417, -180, 570, 417 ],
-      [221, 165, 60, 253, 273 ],
-      [769, 126, 240, 492, 727 ],
-      [274, 728, 0, 274, 728 ],
-      [80, 282, 0, 80, 282 ],
-      [658, 228, -90, 228, 658 ],
-      [157, 324, 180, 157, 324 ],
-      [892, 399, 90, 399, 892 ],
-      [442, 495, 90, 495, 442 ],
-      [866, 637, 0, 866, 637 ],
-      [561, 296, -360, 561, 296 ],
-      [818, 461, -180, 818, 461 ],
-      [379, 270, -60, 422, 463 ],
-      [178, 475, -120, 499, 391 ],
-      [699, 535, 180, 699, 535 ],
-      [182, 260, -360, 182, 260 ],
-      [551, 378, -30, 665, 602 ],
-      [291, 278, 360, 291, 278 ],
-      [919, 609, 90, 609, 919 ],
-      [541, 490, -60, 693, 713 ],
-      [19, 143, 240, 132, 87 ],
-      [53, 756, -60, 680, 423 ],
-      [305, 272, 210, 399, 387 ],
-      [725, 405, -90, 405, 725 ],
-      [66, 161, -300, 171, 137 ],
-      [807, 297, -60, 659, 846 ],
-      [827, 710, 300, 1027, 1071 ],
-      [255, 160, -180, 255, 160 ],
-      [214, 81, -330, 225, 176 ],
-      [833, 487, 150, 964, 837 ],
-      [253, 501, 300, 559, 469 ],
-      [66, 540, 270, 540, 66 ],
-      [494, 1, -210, 427, 246 ],
-      [257, 544, 180, 257, 544 ],
-      [652, 593, 360, 652, 593 ],
-      [737, 430, -120, 739, 852 ],
-      [143, 282, -180, 143, 282 ],
-      [53, 472, -30, 280, 435 ],
-      [333, 633, 60, 714, 604 ],
-      [401, 489, -210, 591, 622 ],
-      [98, 678, 270, 678, 98 ],
-      [1009, 727, 60, 1134, 1236 ],
-      [879, 329, 60, 724, 925 ],
-      [87, 522, -180, 87, 522 ],
-      [858, 243, -330, 864, 638 ],
-      [819, 27, 90, 27, 819 ],
-      [151, 134, 360, 151, 134 ],
-      [429, 174, 60, 365, 458 ],
-      [921, 423, -60, 825, 1008 ],
-      [496, 724, -330, 791, 874 ],
-      [719, 29, 330, 636, 384 ],
-      [585, 17, 270, 17, 585 ],
-      [147, 676, -150, 464, 657 ],
-      [733, 740, 360, 733, 740 ],
-      [1020, 615, -150, 1190, 1042 ],
-      [48, 461, -120, 422, 271 ],
-      [672, 574, 0, 672, 574 ],
-      [647, 128, 180, 647, 128 ],
-      [227, 50, -150, 220, 155 ],
-      [651, 421, -210, 773, 689 ],
-      [701, 192, -180, 701, 192 ],
-      [631, 631, -150, 861, 860 ],
-      [506, 741, -240, 894, 807 ],
-      [820, 522, -270, 522, 820 ],
-      [805, 519, 330, 956, 851 ],
-      [89, 554, 30, 354, 524 ],
-      [432, 290, -180, 432, 290 ],
-      [953, 7, -60, 481, 828 ],
-      [680, 177, 0, 680, 177 ],
-      [972, 665, -330, 1173, 1061 ],
-      [179, 422, -150, 365, 453 ],
-      [448, 127, -270, 127, 448 ],
-      [738, 507, -300, 807, 892 ],
-      [905, 354, 210, 959, 758 ],
-      [10, 189, -30, 102, 169 ],
-      [959, 255, -240, 700, 956 ],
-      [474, 578, 30, 699, 737 ],
-      [755, 524, 30, 915, 831 ],
-      [181, 266, 210, 288, 319 ],
-      [698, 227, 120, 545, 716 ],
-      [751, 361, -240, 688, 829 ],
-      [37, 696, -120, 620, 379 ],
-      [163, 482, -360, 163, 482 ],
-      [252, 392, -30, 413, 465 ],
-      [13, 399, 150, 210, 351 ],
-      [465, 350, -330, 577, 535 ],
-      [631, 706, 240, 925, 898 ],
-      [159, 503, 0, 159, 503 ],
-      [719, 639, 240, 911, 941 ],
-      [491, 394, -270, 394, 491 ],
-      [123, 189, 60, 225, 200 ],
-      [318, 217, 0, 318, 217 ],
-      [682, 338, -270, 338, 682 ],
-      [697, 527, 90, 527, 697 ],
-      [159, 536, -270, 536, 159 ],
-      [896, 116, 90, 116, 896 ],
-      [949, 589, 30, 1115, 984 ],
-      [748, 708, -240, 986, 1000 ],
-      [222, 479, -360, 222, 479 ],
-      [50, 78, 30, 82, 92 ],
-      [180, 170, 210, 239, 236 ],
-      [790, 409, -330, 888, 748 ],
-      [280, 152, 0, 280, 152 ],
-      [411, 675, -240, 790, 691 ],
-      [41, 26, 270, 26, 41 ],
-      [202, 698, -360, 202, 698 ],
-      [829, 641, 210, 1037, 968 ],
-      [348, 433, 150, 517, 547 ],
-      [538, 599, -120, 787, 764 ],
-      [555, 636, -60, 827, 798 ],
-      [73, 2, 120, 38, 63 ],
-      [867, 594, -240, 947, 1046 ],
-      [925, 36, -90, 36, 925 ],
-      [409, 344, -180, 409, 344 ],
-      [595, 374, -150, 701, 620 ],
-      [470, 525, -210, 669, 688 ],
-      [499, 378, -330, 621, 576 ],
-      [289, 638, 90, 638, 289 ],
-      [1021, 273, -90, 273, 1021 ],
-      [343, 689, -210, 641, 767 ],
-      [793, 743, -210, 1057, 1038 ],
-      [445, 625, 360, 445, 625 ],
-      [641, 550, -360, 641, 550 ],
-      [16, 89, 0, 16, 89 ],
-      [289, 534, 360, 289, 534 ],
-      [596, 119, 120, 400, 574 ],
-      [808, 493, -270, 493, 808 ],
-      [850, 709, 360, 850, 709 ],
-      [445, 707, -120, 833, 738 ],
-      [838, 195, -210, 822, 586 ],
-      [30, 22, -240, 33, 35 ],
-      [249, 355, -360, 249, 355 ],
-      [235, 68, 150, 237, 175 ],
-      [269, 79, 240, 201, 271 ],
-      [761, 295, 30, 806, 635 ],
-      [726, 742, 150, 999, 1004 ],
-      [367, 580, -120, 684, 606 ],
-      [512, 449, -180, 512, 449 ],
-      [483, 15, -240, 254, 424 ],
-      [817, 643, -60, 964, 1028 ],
-      [22, 665, -30, 351, 587 ],
-      [217, 84, 300, 180, 229 ],
-      [221, 260, 360, 221, 260 ],
-      [958, 461, -300, 877, 1059 ],
-      [788, 263, 0, 788, 263 ],
-      [307, 40, -30, 284, 188 ],
-      [1007, 315, -210, 1029, 775 ],
-      [316, 698, 210, 621, 761 ],
-      [569, 292, 240, 536, 637 ],
-      [739, 137, 120, 488, 706 ],
-      [146, 153, 0, 146, 153 ],
-      [605, 315, 90, 315, 605 ],
-      [512, 480, 330, 682, 672 ],
-      [509, 430, 30, 655, 626 ],
-      [610, 253, 300, 522, 654 ],
-      [80, 483, 330, 310, 458 ],
-      [539, 470, -120, 675, 700 ],
-      [747, 707, -180, 747, 707 ],
-      [528, 365, 120, 579, 638 ],
-      [329, 151, 240, 294, 359 ],
-      [987, 260, -360, 987, 260 ],
-      [483, 713, -60, 857, 774 ],
-      [90, 329, -330, 241, 329 ],
-      [43, 710, 90, 710, 43 ],
-      [610, 400, 330, 727, 651 ],
-      [504, 460, 60, 649, 666 ],
-      [450, 96, -240, 307, 436 ],
-      [815, 655, -300, 974, 1032 ],
-      [63, 283, 60, 276, 195 ],
-      [724, 530, 210, 891, 820 ],
-      [542, 501, -300, 704, 719 ],
-      [563, 95, -360, 563, 95 ],
-      [1004, 162, -30, 949, 642 ],
-      [36, 194, -90, 194, 36 ],
-      [665, 652, 300, 896, 901 ],
-      [607, 261, 0, 607, 261 ],
-      [169, 598, 90, 598, 169 ],
-      [357, 441, 0, 357, 441 ],
-      [462, 488, 270, 488, 462 ],
-      [29, 263, 30, 156, 242 ],
-      [820, 669, -240, 988, 1043 ],
-      [934, 323, -150, 969, 746 ],
-      [974, 308, 30, 997, 753 ],
-      [429, 334, 210, 537, 502 ],
-      [830, 65, 90, 65, 830 ],
-      [739, 520, 360, 739, 520 ],
-      [237, 646, 180, 237, 646 ],
-      [885, 145, -120, 567, 838 ],
-      [359, 491, 330, 555, 604 ],
-      [210, 512, -150, 436, 547 ],
-      [767, 359, -240, 694, 842 ],
-      [967, 291, 60, 735, 982 ],
-      [270, 253, 360, 270, 253 ],
-      [813, 574, -60, 902, 991 ],
-      [589, 428, 0, 589, 428 ],
-      [210, 214, -240, 289, 287 ],
-      [179, 391, -360, 179, 391 ],
-      [944, 287, -210, 960, 719 ],
-      [249, 556, 270, 556, 249 ],
-      [204, 713, 0, 204, 713 ],
-      [509, 520, 360, 509, 520 ],
-      [682, 477, -90, 477, 682 ],
-      [262, 679, 150, 565, 717 ],
-      [251, 520, -60, 574, 477 ],
-      [686, 194, 360, 686, 194 ],
-      [182, 351, -180, 182, 351 ],
-      [371, 485, 210, 563, 604 ],
-      [396, 425, -270, 425, 396 ],
-      [614, 611, 270, 611, 614 ],
-      [461, 763, 240, 890, 780 ],
-      [991, 377, 0, 991, 377 ],
-      [974, 120, -300, 590, 903 ],
-      [320, 316, 360, 320, 316 ],
-      [3, 504, 120, 437, 253 ],
-      [451, 251, 300, 441, 515 ],
-      [444, 387, -90, 387, 444 ],
-      [723, 664, -360, 723, 664 ],
-      [498, 193, 30, 527, 415 ],
-      [656, 653, -120, 893, 894 ],
-      [529, 230, -120, 462, 572 ],
-      [329, 205, 240, 341, 386 ],
-      [821, 168, 360, 821, 168 ],
-      [925, 407, -90, 407, 925 ],
-      [909, 409, -330, 991, 808 ],
-      [562, 747, -90, 747, 562 ],
-      [473, 312, 300, 505, 565 ],
-      [852, 85, 180, 852, 85 ],
-      [852, 459, 360, 852, 459 ],
-      [394, 182, 270, 182, 394 ],
-      [750, 579, -270, 579, 750 ],
-      [74, 57, -60, 84, 92 ],
-      [924, 672, 90, 672, 924 ],
-      [910, 597, -270, 597, 910 ],
-      [292, 511, 150, 507, 587 ],
-      [346, 164, 120, 314, 380 ],
-      [734, 518, -330, 894, 815 ],
-      [613, 389, -240, 643, 723 ],
-      [353, 260, 210, 434, 400 ],
-      [349, 555, -360, 349, 555 ],
-      [191, 349, 210, 339, 396 ],
-      [340, 404, 240, 519, 495 ],
-      [762, 329, 150, 823, 664 ],
-      [383, 243, 0, 383, 243 ],
-      [546, 462, -270, 462, 546 ],
-      [229, 721, -90, 721, 229 ],
-      [908, 503, -330, 1037, 889 ],
-      [977, 194, 30, 943, 656 ],
-      [136, 458, 300, 463, 346 ],
-      [930, 720, 90, 720, 930 ],
-      [943, 95, -330, 863, 553 ],
-      [702, 349, 60, 652, 781 ],
-      [536, 152, -360, 536, 152 ],
-      [243, 439, -120, 500, 429 ],
-      [745, 80, 330, 684, 441 ],
-      [903, 251, 270, 251, 903 ],
-      [256, 164, 30, 303, 269 ],
-      [299, 129, 210, 322, 260 ],
-      [859, 230, -90, 230, 859 ],
-      [742, 160, -150, 721, 509 ],
-      [341, 98, -60, 254, 344 ],
-      [404, 624, 300, 740, 661 ],
-      [1006, 258, -300, 725, 1000 ],
-      [1021, 440, 120, 891, 1103 ],
-      [336, 230, 180, 336, 230 ],
-      [266, 139, -300, 252, 299 ],
-      [132, 331, -150, 279, 352 ],
-      [669, 554, -30, 855, 814 ],
-      [439, 430, 210, 594, 590 ],
-      [820, 219, 360, 820, 219 ],
-      [112, 474, -300, 465, 333 ],
-      [553, 8, 300, 282, 482 ],
+      [ 40, 20, -360, 40, 20 ],
+      [ 40, 20, -359, 39, 20 ],
+      [ 40, 20, -358, 40, 21 ],
+      [ 40, 20, -357, 40, 22 ],
+      [ 40, 20, -356, 40, 22 ],
+      [ 40, 20, -355, 41, 23 ],
+      [ 40, 20, -354, 41, 24 ],
+      [ 40, 20, -353, 41, 24 ],
+      [ 40, 20, -352, 42, 25 ],
+      [ 40, 20, -351, 42, 26 ],
+      [ 40, 20, -350, 42, 26 ],
+      [ 40, 20, -349, 43, 27 ],
+      [ 40, 20, -348, 43, 28 ],
+      [ 40, 20, -347, 42, 27 ],
+      [ 40, 20, -346, 43, 28 ],
+      [ 40, 20, -345, 43, 29 ],
+      [ 40, 20, -344, 44, 30 ],
+      [ 40, 20, -343, 44, 30 ],
+      [ 40, 20, -342, 44, 31 ],
+      [ 40, 20, -341, 44, 32 ],
+      [ 40, 20, -340, 44, 32 ],
+      [ 40, 20, -339, 44, 33 ],
+      [ 40, 20, -338, 44, 33 ],
+      [ 40, 20, -337, 44, 33 ],
+      [ 40, 20, -336, 44, 34 ],
+      [ 40, 20, -335, 44, 34 ],
+      [ 40, 20, -334, 44, 35 ],
+      [ 40, 20, -333, 44, 36 ],
+      [ 40, 20, -332, 44, 36 ],
+      [ 40, 20, -331, 44, 36 ],
+      [ 40, 20, -330, 44, 36 ],
+      [ 40, 20, -329, 44, 37 ],
+      [ 40, 20, -328, 44, 38 ],
+      [ 40, 20, -327, 44, 38 ],
+      [ 40, 20, -326, 44, 39 ],
+      [ 40, 20, -325, 43, 38 ],
+      [ 40, 20, -324, 44, 39 ],
+      [ 40, 20, -323, 43, 40 ],
+      [ 40, 20, -322, 43, 40 ],
+      [ 40, 20, -321, 44, 41 ],
+      [ 40, 20, -320, 43, 40 ],
+      [ 40, 20, -319, 43, 41 ],
+      [ 40, 20, -318, 42, 41 ],
+      [ 40, 20, -317, 43, 42 ],
+      [ 40, 20, -316, 42, 41 ],
+      [ 40, 20, -315, 42, 42 ],
+      [ 40, 20, -314, 41, 42 ],
+      [ 40, 20, -313, 42, 43 ],
+      [ 40, 20, -312, 41, 42 ],
+      [ 40, 20, -311, 41, 43 ],
+      [ 40, 20, -310, 40, 43 ],
+      [ 40, 20, -309, 41, 44 ],
+      [ 40, 20, -308, 40, 43 ],
+      [ 40, 20, -307, 40, 43 ],
+      [ 40, 20, -306, 39, 44 ],
+      [ 40, 20, -305, 38, 43 ],
+      [ 40, 20, -304, 39, 44 ],
+      [ 40, 20, -303, 38, 44 ],
+      [ 40, 20, -302, 38, 44 ],
+      [ 40, 20, -301, 37, 44 ],
+      [ 40, 20, -300, 36, 44 ],
+      [ 40, 20, -299, 36, 44 ],
+      [ 40, 20, -298, 36, 44 ],
+      [ 40, 20, -297, 36, 44 ],
+      [ 40, 20, -296, 35, 44 ],
+      [ 40, 20, -295, 34, 44 ],
+      [ 40, 20, -294, 34, 44 ],
+      [ 40, 20, -293, 33, 44 ],
+      [ 40, 20, -292, 33, 44 ],
+      [ 40, 20, -291, 33, 44 ],
+      [ 40, 20, -290, 32, 44 ],
+      [ 40, 20, -289, 32, 44 ],
+      [ 40, 20, -288, 31, 44 ],
+      [ 40, 20, -287, 30, 44 ],
+      [ 40, 20, -286, 30, 44 ],
+      [ 40, 20, -285, 29, 43 ],
+      [ 40, 20, -284, 28, 43 ],
+      [ 40, 20, -283, 27, 42 ],
+      [ 40, 20, -282, 28, 43 ],
+      [ 40, 20, -281, 27, 43 ],
+      [ 40, 20, -280, 26, 42 ],
+      [ 40, 20, -279, 26, 42 ],
+      [ 40, 20, -278, 25, 42 ],
+      [ 40, 20, -277, 24, 41 ],
+      [ 40, 20, -276, 24, 41 ],
+      [ 40, 20, -275, 23, 41 ],
+      [ 40, 20, -274, 22, 40 ],
+      [ 40, 20, -273, 22, 40 ],
+      [ 40, 20, -272, 21, 40 ],
+      [ 40, 20, -271, 20, 39 ],
+      [ 40, 20, -270, 20, 40 ],
+      [ 40, 20, -269, 20, 39 ],
+      [ 40, 20, -268, 21, 39 ],
+      [ 40, 20, -267, 22, 39 ],
+      [ 40, 20, -266, 22, 39 ],
+      [ 40, 20, -265, 23, 40 ],
+      [ 40, 20, -264, 24, 40 ],
+      [ 40, 20, -263, 24, 40 ],
+      [ 40, 20, -262, 25, 41 ],
+      [ 40, 20, -261, 26, 41 ],
+      [ 40, 20, -260, 26, 41 ],
+      [ 40, 20, -259, 27, 42 ],
+      [ 40, 20, -258, 28, 42 ],
+      [ 40, 20, -257, 27, 41 ],
+      [ 40, 20, -256, 28, 42 ],
+      [ 40, 20, -255, 29, 42 ],
+      [ 40, 20, -254, 30, 43 ],
+      [ 40, 20, -253, 30, 43 ],
+      [ 40, 20, -252, 31, 43 ],
+      [ 40, 20, -251, 32, 43 ],
+      [ 40, 20, -250, 32, 43 ],
+      [ 40, 20, -249, 33, 43 ],
+      [ 40, 20, -248, 33, 43 ],
+      [ 40, 20, -247, 33, 43 ],
+      [ 40, 20, -246, 34, 43 ],
+      [ 40, 20, -245, 34, 43 ],
+      [ 40, 20, -244, 35, 43 ],
+      [ 40, 20, -243, 36, 43 ],
+      [ 40, 20, -242, 36, 43 ],
+      [ 40, 20, -241, 36, 43 ],
+      [ 40, 20, -240, 36, 43 ],
+      [ 40, 20, -239, 37, 43 ],
+      [ 40, 20, -238, 38, 43 ],
+      [ 40, 20, -237, 38, 43 ],
+      [ 40, 20, -236, 39, 43 ],
+      [ 40, 20, -235, 38, 42 ],
+      [ 40, 20, -234, 39, 43 ],
+      [ 40, 20, -233, 40, 42 ],
+      [ 40, 20, -232, 40, 42 ],
+      [ 40, 20, -231, 41, 43 ],
+      [ 40, 20, -230, 40, 42 ],
+      [ 40, 20, -229, 41, 42 ],
+      [ 40, 20, -228, 41, 41 ],
+      [ 40, 20, -227, 42, 42 ],
+      [ 40, 20, -226, 41, 41 ],
+      [ 40, 20, -225, 42, 41 ],
+      [ 40, 20, -224, 42, 40 ],
+      [ 40, 20, -223, 43, 41 ],
+      [ 40, 20, -222, 42, 40 ],
+      [ 40, 20, -221, 43, 40 ],
+      [ 40, 20, -220, 43, 39 ],
+      [ 40, 20, -219, 44, 40 ],
+      [ 40, 20, -218, 43, 39 ],
+      [ 40, 20, -217, 43, 39 ],
+      [ 40, 20, -216, 44, 38 ],
+      [ 40, 20, -215, 43, 37 ],
+      [ 40, 20, -214, 44, 38 ],
+      [ 40, 20, -213, 44, 37 ],
+      [ 40, 20, -212, 44, 37 ],
+      [ 40, 20, -211, 44, 36 ],
+      [ 40, 20, -210, 44, 35 ],
+      [ 40, 20, -209, 44, 35 ],
+      [ 40, 20, -208, 44, 35 ],
+      [ 40, 20, -207, 44, 35 ],
+      [ 40, 20, -206, 44, 34 ],
+      [ 40, 20, -205, 44, 33 ],
+      [ 40, 20, -204, 44, 33 ],
+      [ 40, 20, -203, 44, 32 ],
+      [ 40, 20, -202, 44, 32 ],
+      [ 40, 20, -201, 44, 32 ],
+      [ 40, 20, -200, 44, 31 ],
+      [ 40, 20, -199, 44, 31 ],
+      [ 40, 20, -198, 44, 30 ],
+      [ 40, 20, -197, 44, 29 ],
+      [ 40, 20, -196, 44, 29 ],
+      [ 40, 20, -195, 43, 28 ],
+      [ 40, 20, -194, 43, 27 ],
+      [ 40, 20, -193, 42, 26 ],
+      [ 40, 20, -192, 43, 27 ],
+      [ 40, 20, -191, 43, 26 ],
+      [ 40, 20, -190, 42, 25 ],
+      [ 40, 20, -189, 42, 25 ],
+      [ 40, 20, -188, 42, 24 ],
+      [ 40, 20, -187, 41, 23 ],
+      [ 40, 20, -186, 41, 23 ],
+      [ 40, 20, -185, 41, 22 ],
+      [ 40, 20, -184, 40, 21 ],
+      [ 40, 20, -183, 40, 21 ],
+      [ 40, 20, -182, 40, 20 ],
+      [ 40, 20, -181, 39, 19 ],
+      [ 40, 20, -180, 40, 20 ],
+      [ 40, 20, -179, 39, 19 ],
+      [ 40, 20, -178, 39, 20 ],
+      [ 40, 20, -177, 39, 21 ],
+      [ 40, 20, -176, 39, 21 ],
+      [ 40, 20, -175, 40, 22 ],
+      [ 40, 20, -174, 40, 23 ],
+      [ 40, 20, -173, 40, 23 ],
+      [ 40, 20, -172, 41, 24 ],
+      [ 40, 20, -171, 41, 25 ],
+      [ 40, 20, -170, 41, 25 ],
+      [ 40, 20, -169, 42, 26 ],
+      [ 40, 20, -168, 42, 27 ],
+      [ 40, 20, -167, 41, 26 ],
+      [ 40, 20, -166, 42, 27 ],
+      [ 40, 20, -165, 42, 28 ],
+      [ 40, 20, -164, 43, 29 ],
+      [ 40, 20, -163, 43, 29 ],
+      [ 40, 20, -162, 43, 30 ],
+      [ 40, 20, -161, 43, 31 ],
+      [ 40, 20, -160, 43, 31 ],
+      [ 40, 20, -159, 43, 32 ],
+      [ 40, 20, -158, 43, 32 ],
+      [ 40, 20, -157, 43, 32 ],
+      [ 40, 20, -156, 43, 33 ],
+      [ 40, 20, -155, 43, 33 ],
+      [ 40, 20, -154, 43, 34 ],
+      [ 40, 20, -153, 43, 35 ],
+      [ 40, 20, -152, 43, 35 ],
+      [ 40, 20, -151, 43, 35 ],
+      [ 40, 20, -150, 43, 36 ],
+      [ 40, 20, -149, 43, 36 ],
+      [ 40, 20, -148, 43, 37 ],
+      [ 40, 20, -147, 43, 37 ],
+      [ 40, 20, -146, 43, 38 ],
+      [ 40, 20, -145, 42, 37 ],
+      [ 40, 20, -144, 43, 38 ],
+      [ 40, 20, -143, 42, 39 ],
+      [ 40, 20, -142, 42, 39 ],
+      [ 40, 20, -141, 43, 40 ],
+      [ 40, 20, -140, 42, 39 ],
+      [ 40, 20, -139, 42, 40 ],
+      [ 40, 20, -138, 41, 40 ],
+      [ 40, 20, -137, 42, 41 ],
+      [ 40, 20, -136, 41, 40 ],
+      [ 40, 20, -135, 41, 41 ],
+      [ 40, 20, -134, 40, 41 ],
+      [ 40, 20, -133, 41, 42 ],
+      [ 40, 20, -132, 40, 41 ],
+      [ 40, 20, -131, 40, 42 ],
+      [ 40, 20, -130, 39, 42 ],
+      [ 40, 20, -129, 40, 43 ],
+      [ 40, 20, -128, 39, 42 ],
+      [ 40, 20, -127, 39, 42 ],
+      [ 40, 20, -126, 38, 43 ],
+      [ 40, 20, -125, 37, 42 ],
+      [ 40, 20, -124, 38, 43 ],
+      [ 40, 20, -123, 37, 43 ],
+      [ 40, 20, -122, 37, 43 ],
+      [ 40, 20, -121, 36, 43 ],
+      [ 40, 20, -120, 36, 43 ],
+      [ 40, 20, -119, 35, 43 ],
+      [ 40, 20, -118, 35, 43 ],
+      [ 40, 20, -117, 35, 43 ],
+      [ 40, 20, -116, 34, 43 ],
+      [ 40, 20, -115, 33, 43 ],
+      [ 40, 20, -114, 33, 43 ],
+      [ 40, 20, -113, 32, 43 ],
+      [ 40, 20, -112, 32, 43 ],
+      [ 40, 20, -111, 32, 43 ],
+      [ 40, 20, -110, 31, 43 ],
+      [ 40, 20, -109, 31, 43 ],
+      [ 40, 20, -108, 30, 43 ],
+      [ 40, 20, -107, 29, 43 ],
+      [ 40, 20, -106, 29, 43 ],
+      [ 40, 20, -105, 28, 42 ],
+      [ 40, 20, -104, 27, 42 ],
+      [ 40, 20, -103, 26, 41 ],
+      [ 40, 20, -102, 27, 42 ],
+      [ 40, 20, -101, 26, 42 ],
+      [ 40, 20, -100, 25, 41 ],
+      [ 40, 20, -99, 25, 41 ],
+      [ 40, 20, -98, 24, 41 ],
+      [ 40, 20, -97, 23, 40 ],
+      [ 40, 20, -96, 23, 40 ],
+      [ 40, 20, -95, 22, 40 ],
+      [ 40, 20, -94, 21, 39 ],
+      [ 40, 20, -93, 21, 39 ],
+      [ 40, 20, -92, 20, 39 ],
+      [ 40, 20, -91, 19, 39 ],
+      [ 40, 20, -90, 20, 40 ],
+      [ 40, 20, -89, 19, 39 ],
+      [ 40, 20, -88, 20, 40 ],
+      [ 40, 20, -87, 21, 40 ],
+      [ 40, 20, -86, 21, 40 ],
+      [ 40, 20, -85, 22, 41 ],
+      [ 40, 20, -84, 23, 41 ],
+      [ 40, 20, -83, 23, 41 ],
+      [ 40, 20, -82, 24, 42 ],
+      [ 40, 20, -81, 25, 42 ],
+      [ 40, 20, -80, 25, 42 ],
+      [ 40, 20, -79, 26, 43 ],
+      [ 40, 20, -78, 27, 43 ],
+      [ 40, 20, -77, 26, 42 ],
+      [ 40, 20, -76, 27, 43 ],
+      [ 40, 20, -75, 28, 43 ],
+      [ 40, 20, -74, 29, 44 ],
+      [ 40, 20, -73, 29, 44 ],
+      [ 40, 20, -72, 30, 44 ],
+      [ 40, 20, -71, 31, 44 ],
+      [ 40, 20, -70, 31, 44 ],
+      [ 40, 20, -69, 32, 44 ],
+      [ 40, 20, -68, 32, 44 ],
+      [ 40, 20, -67, 32, 44 ],
+      [ 40, 20, -66, 33, 44 ],
+      [ 40, 20, -65, 33, 44 ],
+      [ 40, 20, -64, 34, 44 ],
+      [ 40, 20, -63, 35, 44 ],
+      [ 40, 20, -62, 35, 44 ],
+      [ 40, 20, -61, 35, 44 ],
+      [ 40, 20, -60, 35, 44 ],
+      [ 40, 20, -59, 36, 44 ],
+      [ 40, 20, -58, 37, 44 ],
+      [ 40, 20, -57, 37, 44 ],
+      [ 40, 20, -56, 38, 44 ],
+      [ 40, 20, -55, 37, 43 ],
+      [ 40, 20, -54, 38, 44 ],
+      [ 40, 20, -53, 39, 43 ],
+      [ 40, 20, -52, 39, 43 ],
+      [ 40, 20, -51, 40, 44 ],
+      [ 40, 20, -50, 39, 43 ],
+      [ 40, 20, -49, 40, 43 ],
+      [ 40, 20, -48, 40, 42 ],
+      [ 40, 20, -47, 41, 43 ],
+      [ 40, 20, -46, 40, 42 ],
+      [ 40, 20, -45, 41, 42 ],
+      [ 40, 20, -44, 41, 41 ],
+      [ 40, 20, -43, 42, 42 ],
+      [ 40, 20, -42, 41, 41 ],
+      [ 40, 20, -41, 42, 41 ],
+      [ 40, 20, -40, 42, 40 ],
+      [ 40, 20, -39, 43, 41 ],
+      [ 40, 20, -38, 42, 40 ],
+      [ 40, 20, -37, 42, 40 ],
+      [ 40, 20, -36, 43, 39 ],
+      [ 40, 20, -35, 42, 38 ],
+      [ 40, 20, -34, 43, 39 ],
+      [ 40, 20, -33, 43, 38 ],
+      [ 40, 20, -32, 43, 38 ],
+      [ 40, 20, -31, 43, 37 ],
+      [ 40, 20, -30, 43, 37 ],
+      [ 40, 20, -29, 43, 36 ],
+      [ 40, 20, -28, 43, 36 ],
+      [ 40, 20, -27, 43, 36 ],
+      [ 40, 20, -26, 43, 35 ],
+      [ 40, 20, -25, 43, 34 ],
+      [ 40, 20, -24, 43, 34 ],
+      [ 40, 20, -23, 43, 33 ],
+      [ 40, 20, -22, 43, 33 ],
+      [ 40, 20, -21, 43, 33 ],
+      [ 40, 20, -20, 43, 32 ],
+      [ 40, 20, -19, 43, 32 ],
+      [ 40, 20, -18, 43, 31 ],
+      [ 40, 20, -17, 43, 30 ],
+      [ 40, 20, -16, 43, 30 ],
+      [ 40, 20, -15, 42, 29 ],
+      [ 40, 20, -14, 42, 28 ],
+      [ 40, 20, -13, 41, 27 ],
+      [ 40, 20, -12, 42, 28 ],
+      [ 40, 20, -11, 42, 27 ],
+      [ 40, 20, -10, 41, 26 ],
+      [ 40, 20, -9, 41, 26 ],
+      [ 40, 20, -8, 41, 25 ],
+      [ 40, 20, -7, 40, 24 ],
+      [ 40, 20, -6, 40, 24 ],
+      [ 40, 20, -5, 40, 23 ],
+      [ 40, 20, -4, 39, 22 ],
+      [ 40, 20, -3, 39, 22 ],
+      [ 40, 20, -2, 39, 21 ],
+      [ 40, 20, -1, 39, 20 ],
+      [ 40, 20, 0, 40, 20 ],
+      [ 40, 20, 1, 39, 20 ],
+      [ 40, 20, 2, 40, 21 ],
+      [ 40, 20, 3, 40, 22 ],
+      [ 40, 20, 4, 40, 22 ],
+      [ 40, 20, 5, 41, 23 ],
+      [ 40, 20, 6, 41, 24 ],
+      [ 40, 20, 7, 41, 24 ],
+      [ 40, 20, 8, 42, 25 ],
+      [ 40, 20, 9, 42, 26 ],
+      [ 40, 20, 10, 42, 26 ],
+      [ 40, 20, 11, 43, 27 ],
+      [ 40, 20, 12, 43, 28 ],
+      [ 40, 20, 13, 42, 27 ],
+      [ 40, 20, 14, 43, 28 ],
+      [ 40, 20, 15, 43, 29 ],
+      [ 40, 20, 16, 44, 30 ],
+      [ 40, 20, 17, 44, 30 ],
+      [ 40, 20, 18, 44, 31 ],
+      [ 40, 20, 19, 44, 32 ],
+      [ 40, 20, 20, 44, 32 ],
+      [ 40, 20, 21, 44, 33 ],
+      [ 40, 20, 22, 44, 33 ],
+      [ 40, 20, 23, 44, 33 ],
+      [ 40, 20, 24, 44, 34 ],
+      [ 40, 20, 25, 44, 34 ],
+      [ 40, 20, 26, 44, 35 ],
+      [ 40, 20, 27, 44, 36 ],
+      [ 40, 20, 28, 44, 36 ],
+      [ 40, 20, 29, 44, 36 ],
+      [ 40, 20, 30, 44, 36 ],
+      [ 40, 20, 31, 44, 37 ],
+      [ 40, 20, 32, 44, 38 ],
+      [ 40, 20, 33, 44, 38 ],
+      [ 40, 20, 34, 44, 39 ],
+      [ 40, 20, 35, 43, 38 ],
+      [ 40, 20, 36, 44, 39 ],
+      [ 40, 20, 37, 43, 40 ],
+      [ 40, 20, 38, 43, 40 ],
+      [ 40, 20, 39, 44, 41 ],
+      [ 40, 20, 40, 43, 40 ],
+      [ 40, 20, 41, 43, 41 ],
+      [ 40, 20, 42, 42, 41 ],
+      [ 40, 20, 43, 43, 42 ],
+      [ 40, 20, 44, 42, 41 ],
+      [ 40, 20, 45, 42, 42 ],
+      [ 40, 20, 46, 41, 42 ],
+      [ 40, 20, 47, 42, 43 ],
+      [ 40, 20, 48, 41, 42 ],
+      [ 40, 20, 49, 41, 43 ],
+      [ 40, 20, 50, 40, 43 ],
+      [ 40, 20, 51, 41, 44 ],
+      [ 40, 20, 52, 40, 43 ],
+      [ 40, 20, 53, 40, 43 ],
+      [ 40, 20, 54, 39, 44 ],
+      [ 40, 20, 55, 38, 43 ],
+      [ 40, 20, 56, 39, 44 ],
+      [ 40, 20, 57, 38, 44 ],
+      [ 40, 20, 58, 38, 44 ],
+      [ 40, 20, 59, 37, 44 ],
+      [ 40, 20, 60, 36, 44 ],
+      [ 40, 20, 61, 36, 44 ],
+      [ 40, 20, 62, 36, 44 ],
+      [ 40, 20, 63, 36, 44 ],
+      [ 40, 20, 64, 35, 44 ],
+      [ 40, 20, 65, 34, 44 ],
+      [ 40, 20, 66, 34, 44 ],
+      [ 40, 20, 67, 33, 44 ],
+      [ 40, 20, 68, 33, 44 ],
+      [ 40, 20, 69, 33, 44 ],
+      [ 40, 20, 70, 32, 44 ],
+      [ 40, 20, 71, 32, 44 ],
+      [ 40, 20, 72, 31, 44 ],
+      [ 40, 20, 73, 30, 44 ],
+      [ 40, 20, 74, 30, 44 ],
+      [ 40, 20, 75, 29, 43 ],
+      [ 40, 20, 76, 28, 43 ],
+      [ 40, 20, 77, 27, 42 ],
+      [ 40, 20, 78, 28, 43 ],
+      [ 40, 20, 79, 27, 43 ],
+      [ 40, 20, 80, 26, 42 ],
+      [ 40, 20, 81, 26, 42 ],
+      [ 40, 20, 82, 25, 42 ],
+      [ 40, 20, 83, 24, 41 ],
+      [ 40, 20, 84, 24, 41 ],
+      [ 40, 20, 85, 23, 41 ],
+      [ 40, 20, 86, 22, 40 ],
+      [ 40, 20, 87, 22, 40 ],
+      [ 40, 20, 88, 21, 40 ],
+      [ 40, 20, 89, 20, 39 ],
+      [ 40, 20, 90, 20, 40 ],
+      [ 40, 20, 91, 20, 39 ],
+      [ 40, 20, 92, 21, 39 ],
+      [ 40, 20, 93, 22, 39 ],
+      [ 40, 20, 94, 22, 39 ],
+      [ 40, 20, 95, 23, 40 ],
+      [ 40, 20, 96, 24, 40 ],
+      [ 40, 20, 97, 24, 40 ],
+      [ 40, 20, 98, 25, 41 ],
+      [ 40, 20, 99, 26, 41 ],
+      [ 40, 20, 100, 26, 41 ],
+      [ 40, 20, 101, 27, 42 ],
+      [ 40, 20, 102, 28, 42 ],
+      [ 40, 20, 103, 27, 41 ],
+      [ 40, 20, 104, 28, 42 ],
+      [ 40, 20, 105, 29, 42 ],
+      [ 40, 20, 106, 30, 43 ],
+      [ 40, 20, 107, 30, 43 ],
+      [ 40, 20, 108, 31, 43 ],
+      [ 40, 20, 109, 32, 43 ],
+      [ 40, 20, 110, 32, 43 ],
+      [ 40, 20, 111, 33, 43 ],
+      [ 40, 20, 112, 33, 43 ],
+      [ 40, 20, 113, 33, 43 ],
+      [ 40, 20, 114, 34, 43 ],
+      [ 40, 20, 115, 34, 43 ],
+      [ 40, 20, 116, 35, 43 ],
+      [ 40, 20, 117, 36, 43 ],
+      [ 40, 20, 118, 36, 43 ],
+      [ 40, 20, 119, 36, 43 ],
+      [ 40, 20, 120, 36, 43 ],
+      [ 40, 20, 121, 37, 43 ],
+      [ 40, 20, 122, 38, 43 ],
+      [ 40, 20, 123, 38, 43 ],
+      [ 40, 20, 124, 39, 43 ],
+      [ 40, 20, 125, 38, 42 ],
+      [ 40, 20, 126, 39, 43 ],
+      [ 40, 20, 127, 40, 42 ],
+      [ 40, 20, 128, 40, 42 ],
+      [ 40, 20, 129, 41, 43 ],
+      [ 40, 20, 130, 40, 42 ],
+      [ 40, 20, 131, 41, 42 ],
+      [ 40, 20, 132, 41, 41 ],
+      [ 40, 20, 133, 42, 42 ],
+      [ 40, 20, 134, 41, 41 ],
+      [ 40, 20, 135, 42, 41 ],
+      [ 40, 20, 136, 42, 40 ],
+      [ 40, 20, 137, 43, 41 ],
+      [ 40, 20, 138, 42, 40 ],
+      [ 40, 20, 139, 43, 40 ],
+      [ 40, 20, 140, 43, 39 ],
+      [ 40, 20, 141, 44, 40 ],
+      [ 40, 20, 142, 43, 39 ],
+      [ 40, 20, 143, 43, 39 ],
+      [ 40, 20, 144, 44, 38 ],
+      [ 40, 20, 145, 43, 37 ],
+      [ 40, 20, 146, 44, 38 ],
+      [ 40, 20, 147, 44, 37 ],
+      [ 40, 20, 148, 44, 37 ],
+      [ 40, 20, 149, 44, 36 ],
+      [ 40, 20, 150, 44, 35 ],
+      [ 40, 20, 151, 44, 35 ],
+      [ 40, 20, 152, 44, 35 ],
+      [ 40, 20, 153, 44, 35 ],
+      [ 40, 20, 154, 44, 34 ],
+      [ 40, 20, 155, 44, 33 ],
+      [ 40, 20, 156, 44, 33 ],
+      [ 40, 20, 157, 44, 32 ],
+      [ 40, 20, 158, 44, 32 ],
+      [ 40, 20, 159, 44, 32 ],
+      [ 40, 20, 160, 44, 31 ],
+      [ 40, 20, 161, 44, 31 ],
+      [ 40, 20, 162, 44, 30 ],
+      [ 40, 20, 163, 44, 29 ],
+      [ 40, 20, 164, 44, 29 ],
+      [ 40, 20, 165, 43, 28 ],
+      [ 40, 20, 166, 43, 27 ],
+      [ 40, 20, 167, 42, 26 ],
+      [ 40, 20, 168, 43, 27 ],
+      [ 40, 20, 169, 43, 26 ],
+      [ 40, 20, 170, 42, 25 ],
+      [ 40, 20, 171, 42, 25 ],
+      [ 40, 20, 172, 42, 24 ],
+      [ 40, 20, 173, 41, 23 ],
+      [ 40, 20, 174, 41, 23 ],
+      [ 40, 20, 175, 41, 22 ],
+      [ 40, 20, 176, 40, 21 ],
+      [ 40, 20, 177, 40, 21 ],
+      [ 40, 20, 178, 40, 20 ],
+      [ 40, 20, 179, 39, 19 ],
+      [ 40, 20, 180, 40, 20 ],
+      [ 40, 20, 181, 39, 19 ],
+      [ 40, 20, 182, 39, 20 ],
+      [ 40, 20, 183, 39, 21 ],
+      [ 40, 20, 184, 39, 21 ],
+      [ 40, 20, 185, 40, 22 ],
+      [ 40, 20, 186, 40, 23 ],
+      [ 40, 20, 187, 40, 23 ],
+      [ 40, 20, 188, 41, 24 ],
+      [ 40, 20, 189, 41, 25 ],
+      [ 40, 20, 190, 41, 25 ],
+      [ 40, 20, 191, 42, 26 ],
+      [ 40, 20, 192, 42, 27 ],
+      [ 40, 20, 193, 41, 26 ],
+      [ 40, 20, 194, 42, 27 ],
+      [ 40, 20, 195, 42, 28 ],
+      [ 40, 20, 196, 43, 29 ],
+      [ 40, 20, 197, 43, 29 ],
+      [ 40, 20, 198, 43, 30 ],
+      [ 40, 20, 199, 43, 31 ],
+      [ 40, 20, 200, 43, 31 ],
+      [ 40, 20, 201, 43, 32 ],
+      [ 40, 20, 202, 43, 32 ],
+      [ 40, 20, 203, 43, 32 ],
+      [ 40, 20, 204, 43, 33 ],
+      [ 40, 20, 205, 43, 33 ],
+      [ 40, 20, 206, 43, 34 ],
+      [ 40, 20, 207, 43, 35 ],
+      [ 40, 20, 208, 43, 35 ],
+      [ 40, 20, 209, 43, 35 ],
+      [ 40, 20, 210, 43, 36 ],
+      [ 40, 20, 211, 43, 36 ],
+      [ 40, 20, 212, 43, 37 ],
+      [ 40, 20, 213, 43, 37 ],
+      [ 40, 20, 214, 43, 38 ],
+      [ 40, 20, 215, 42, 37 ],
+      [ 40, 20, 216, 43, 38 ],
+      [ 40, 20, 217, 42, 39 ],
+      [ 40, 20, 218, 42, 39 ],
+      [ 40, 20, 219, 43, 40 ],
+      [ 40, 20, 220, 42, 39 ],
+      [ 40, 20, 221, 42, 40 ],
+      [ 40, 20, 222, 41, 40 ],
+      [ 40, 20, 223, 42, 41 ],
+      [ 40, 20, 224, 41, 40 ],
+      [ 40, 20, 225, 41, 41 ],
+      [ 40, 20, 226, 40, 41 ],
+      [ 40, 20, 227, 41, 42 ],
+      [ 40, 20, 228, 40, 41 ],
+      [ 40, 20, 229, 40, 42 ],
+      [ 40, 20, 230, 39, 42 ],
+      [ 40, 20, 231, 40, 43 ],
+      [ 40, 20, 232, 39, 42 ],
+      [ 40, 20, 233, 39, 42 ],
+      [ 40, 20, 234, 38, 43 ],
+      [ 40, 20, 235, 37, 42 ],
+      [ 40, 20, 236, 38, 43 ],
+      [ 40, 20, 237, 37, 43 ],
+      [ 40, 20, 238, 37, 43 ],
+      [ 40, 20, 239, 36, 43 ],
+      [ 40, 20, 240, 36, 43 ],
+      [ 40, 20, 241, 35, 43 ],
+      [ 40, 20, 242, 35, 43 ],
+      [ 40, 20, 243, 35, 43 ],
+      [ 40, 20, 244, 34, 43 ],
+      [ 40, 20, 245, 33, 43 ],
+      [ 40, 20, 246, 33, 43 ],
+      [ 40, 20, 247, 32, 43 ],
+      [ 40, 20, 248, 32, 43 ],
+      [ 40, 20, 249, 32, 43 ],
+      [ 40, 20, 250, 31, 43 ],
+      [ 40, 20, 251, 31, 43 ],
+      [ 40, 20, 252, 30, 43 ],
+      [ 40, 20, 253, 29, 43 ],
+      [ 40, 20, 254, 29, 43 ],
+      [ 40, 20, 255, 28, 42 ],
+      [ 40, 20, 256, 27, 42 ],
+      [ 40, 20, 257, 26, 41 ],
+      [ 40, 20, 258, 27, 42 ],
+      [ 40, 20, 259, 26, 42 ],
+      [ 40, 20, 260, 25, 41 ],
+      [ 40, 20, 261, 25, 41 ],
+      [ 40, 20, 262, 24, 41 ],
+      [ 40, 20, 263, 23, 40 ],
+      [ 40, 20, 264, 23, 40 ],
+      [ 40, 20, 265, 22, 40 ],
+      [ 40, 20, 266, 21, 39 ],
+      [ 40, 20, 267, 21, 39 ],
+      [ 40, 20, 268, 20, 39 ],
+      [ 40, 20, 269, 19, 39 ],
+      [ 40, 20, 270, 20, 40 ],
+      [ 40, 20, 271, 19, 39 ],
+      [ 40, 20, 272, 20, 40 ],
+      [ 40, 20, 273, 21, 40 ],
+      [ 40, 20, 274, 21, 40 ],
+      [ 40, 20, 275, 22, 41 ],
+      [ 40, 20, 276, 23, 41 ],
+      [ 40, 20, 277, 23, 41 ],
+      [ 40, 20, 278, 24, 42 ],
+      [ 40, 20, 279, 25, 42 ],
+      [ 40, 20, 280, 25, 42 ],
+      [ 40, 20, 281, 26, 43 ],
+      [ 40, 20, 282, 27, 43 ],
+      [ 40, 20, 283, 26, 42 ],
+      [ 40, 20, 284, 27, 43 ],
+      [ 40, 20, 285, 28, 43 ],
+      [ 40, 20, 286, 29, 44 ],
+      [ 40, 20, 287, 29, 44 ],
+      [ 40, 20, 288, 30, 44 ],
+      [ 40, 20, 289, 31, 44 ],
+      [ 40, 20, 290, 31, 44 ],
+      [ 40, 20, 291, 32, 44 ],
+      [ 40, 20, 292, 32, 44 ],
+      [ 40, 20, 293, 32, 44 ],
+      [ 40, 20, 294, 33, 44 ],
+      [ 40, 20, 295, 33, 44 ],
+      [ 40, 20, 296, 34, 44 ],
+      [ 40, 20, 297, 35, 44 ],
+      [ 40, 20, 298, 35, 44 ],
+      [ 40, 20, 299, 35, 44 ],
+      [ 40, 20, 300, 35, 44 ],
+      [ 40, 20, 301, 36, 44 ],
+      [ 40, 20, 302, 37, 44 ],
+      [ 40, 20, 303, 37, 44 ],
+      [ 40, 20, 304, 38, 44 ],
+      [ 40, 20, 305, 37, 43 ],
+      [ 40, 20, 306, 38, 44 ],
+      [ 40, 20, 307, 39, 43 ],
+      [ 40, 20, 308, 39, 43 ],
+      [ 40, 20, 309, 40, 44 ],
+      [ 40, 20, 310, 39, 43 ],
+      [ 40, 20, 311, 40, 43 ],
+      [ 40, 20, 312, 40, 42 ],
+      [ 40, 20, 313, 41, 43 ],
+      [ 40, 20, 314, 40, 42 ],
+      [ 40, 20, 315, 41, 42 ],
+      [ 40, 20, 316, 41, 41 ],
+      [ 40, 20, 317, 42, 42 ],
+      [ 40, 20, 318, 41, 41 ],
+      [ 40, 20, 319, 42, 41 ],
+      [ 40, 20, 320, 42, 40 ],
+      [ 40, 20, 321, 43, 41 ],
+      [ 40, 20, 322, 42, 40 ],
+      [ 40, 20, 323, 42, 40 ],
+      [ 40, 20, 324, 43, 39 ],
+      [ 40, 20, 325, 42, 38 ],
+      [ 40, 20, 326, 43, 39 ],
+      [ 40, 20, 327, 43, 38 ],
+      [ 40, 20, 328, 43, 38 ],
+      [ 40, 20, 329, 43, 37 ],
+      [ 40, 20, 330, 43, 37 ],
+      [ 40, 20, 331, 43, 36 ],
+      [ 40, 20, 332, 43, 36 ],
+      [ 40, 20, 333, 43, 36 ],
+      [ 40, 20, 334, 43, 35 ],
+      [ 40, 20, 335, 43, 34 ],
+      [ 40, 20, 336, 43, 34 ],
+      [ 40, 20, 337, 43, 33 ],
+      [ 40, 20, 338, 43, 33 ],
+      [ 40, 20, 339, 43, 33 ],
+      [ 40, 20, 340, 43, 32 ],
+      [ 40, 20, 341, 43, 32 ],
+      [ 40, 20, 342, 43, 31 ],
+      [ 40, 20, 343, 43, 30 ],
+      [ 40, 20, 344, 43, 30 ],
+      [ 40, 20, 345, 42, 29 ],
+      [ 40, 20, 346, 42, 28 ],
+      [ 40, 20, 347, 41, 27 ],
+      [ 40, 20, 348, 42, 28 ],
+      [ 40, 20, 349, 42, 27 ],
+      [ 40, 20, 350, 41, 26 ],
+      [ 40, 20, 351, 41, 26 ],
+      [ 40, 20, 352, 41, 25 ],
+      [ 40, 20, 353, 40, 24 ],
+      [ 40, 20, 354, 40, 24 ],
+      [ 40, 20, 355, 40, 23 ],
+      [ 40, 20, 356, 39, 22 ],
+      [ 40, 20, 357, 39, 22 ],
+      [ 40, 20, 358, 39, 21 ],
+      [ 40, 20, 359, 39, 20 ],
+      [ 40, 20, 360, 40, 20 ],
+      [ 40, 20, 110.1, 32, 43 ],
+      [ 40, 20, 344.9, 42, 29 ],
+      [ 40, 20, 142.85, 43, 39 ],
+      [ 40, 20, -106.52, 29, 43 ],
+      [ 40, 20, -295.78, 35, 45 ],
+      [ 40, 20, 287.58, 30, 44 ],
+      [ 40, 20, -3.62, 39, 22 ],
+      [ 40, 20, -33.96, 43, 39 ],
+      [ 40, 20, 136.46, 42, 40 ],
+      [ 40, 20, -293.72, 34, 44 ],
+      [ 40, 20, 10.71, 43, 27 ],
+      [ 40, 20, -80.02, 25, 42 ],
+      [ 40, 20, 258.53, 26, 42 ],
+      [ 40, 20, -110.41, 31, 43 ],
+      [ 40, 20, 340.87, 43, 32 ],
+      [ 40, 20, 347.4, 42, 28 ],
+      [ 40, 20, -277.97, 25, 42 ],
+      [ 40, 20, 126.74, 39, 43 ],
+      [ 40, 20, 70.99, 32, 44 ],
+      [ 40, 20, 57.54, 38, 44 ],
+      [ 40, 20, 251.66, 30, 42 ],
+      [ 40, 20, -91.15, 19, 39 ],
+      [ 40, 20, 164.92, 43, 28 ],
+      [ 40, 20, -27.14, 43, 36 ],
+      [ 40, 20, 230.28, 39, 42 ],
+      [ 40, 20, 271.37, 19, 39 ],
+      [ 40, 20, -207.19, 44, 35 ],
+      [ 40, 20, -58.19, 37, 44 ],
+      [ 40, 20, -339.34, 44, 33 ],
+      [ 40, 20, 352.45, 41, 25 ],
+      [ 40, 20, -245.62, 34, 43 ],
+      [ 40, 20, 130.77, 41, 42 ],
+      [ 40, 20, 337.34, 43, 33 ],
+      [ 40, 20, 257.24, 27, 42 ],
+      [ 40, 20, -335.75, 44, 34 ],
+      [ 40, 20, -318.44, 42, 41 ],
+      [ 40, 20, 184.82, 40, 22 ],
+      [ 40, 20, 20.64, 44, 33 ],
+      [ 40, 20, 7.6, 42, 25 ],
+      [ 40, 20, -38.72, 43, 41 ],
+      [ 40, 20, 86.92, 22, 40 ],
+      [ 40, 20, -341.69, 43, 31 ],
+      [ 40, 20, 241.26, 36, 44 ],
+      [ 40, 20, -14.56, 42, 29 ],
+      [ 40, 20, -92.1, 20, 39 ],
+      [ 40, 20, 222.12, 41, 40 ],
+      [ 40, 20, -27.16, 43, 36 ],
+      [ 40, 20, -10.06, 41, 26 ],
+      [ 40, 20, -11.15, 42, 27 ],
+      [ 40, 20, -316.18, 42, 41 ],
+      [ 40, 20, -312.53, 42, 43 ],
+      [ 40, 20, -119.49, 35, 43 ],
+      [ 40, 20, -47.32, 41, 43 ],
+      [ 40, 20, 212.4, 43, 37 ],
+      [ 40, 20, 213.37, 43, 38 ],
+      [ 40, 20, -177.05, 39, 21 ],
+      [ 40, 20, 123.76, 39, 43 ],
+      [ 40, 20, -353.82, 41, 24 ],
+      [ 40, 20, 124.76, 38, 42 ],
+      [ 40, 20, 144.43, 44, 38 ],
+      [ 40, 20, 358.63, 39, 20 ],
+      [ 40, 20, 239.15, 36, 43 ],
+      [ 40, 20, -84.81, 22, 41 ],
+      [ 40, 20, 335.97, 43, 34 ],
+      [ 40, 20, 136.38, 42, 40 ],
+      [ 40, 20, -60.55, 35, 44 ],
+      [ 40, 20, -342.47, 44, 31 ],
+      [ 40, 20, -38.8, 43, 41 ],
+      [ 40, 20, 320.09, 42, 40 ],
+      [ 40, 20, 25.13, 44, 34 ],
+      [ 40, 20, 282.48, 27, 43 ],
+      [ 40, 20, 47, 42, 43 ],
+      [ 40, 20, 43.45, 43, 42 ],
+      [ 40, 20, 163.73, 44, 29 ],
+      [ 40, 20, -327.56, 44, 38 ],
+      [ 40, 20, 311.35, 40, 43 ],
+      [ 40, 20, 25.85, 44, 35 ],
+      [ 40, 20, 5.28, 41, 23 ],
+      [ 40, 20, -58.72, 36, 44 ],
+      [ 40, 20, -345.3, 43, 29 ],
+      [ 40, 20, 49.11, 41, 43 ],
+      [ 40, 20, -11.25, 42, 27 ],
+      [ 40, 20, -104.78, 28, 42 ],
+      [ 40, 20, -358.22, 40, 21 ],
+      [ 40, 20, -158.86, 43, 32 ],
+      [ 40, 20, -251.42, 31, 42 ],
+      [ 40, 20, -175.27, 40, 22 ],
+      [ 40, 20, 324.91, 42, 38 ],
+      [ 40, 20, -245.24, 34, 43 ],
+      [ 40, 20, 309.5, 39, 43 ],
+      [ 40, 20, 109.34, 32, 43 ],
+      [ 40, 20, -246.61, 33, 43 ],
+      [ 40, 20, 188.64, 41, 25 ],
+      [ 40, 20, -335.47, 44, 34 ],
+      [ 40, 20, -270.64, 20, 39 ],
+      [ 40, 20, -34.98, 42, 38 ],
+      [ 40, 20, -36.02, 43, 39 ],
+      [ 40, 20, -253.11, 30, 43 ],
+      [ 40, 20, 286.22, 29, 44 ],
+      [ 40, 20, -75.94, 27, 43 ],
+      [ 40, 20, 132.03, 41, 41 ],
+      [ 40, 20, 208.69, 44, 36 ],
+      [ 40, 20, 331.07, 44, 37 ],
+      [ 40, 20, -184.53, 41, 22 ],
+      [ 40, 20, 12.42, 43, 28 ],
+      [ 40, 20, -356.5, 40, 22 ],
+      [ 40, 20, -233.19, 39, 43 ],
+      [ 40, 20, -321.73, 43, 40 ],
+      [ 40, 20, 8.78, 42, 26 ],
+      [ 40, 20, 68.1, 33, 44 ],
+      [ 40, 20, -307.02, 40, 43 ],
+      [ 40, 20, -302.11, 38, 44 ],
+      [ 40, 20, -303.15, 38, 44 ],
+      [ 40, 20, -51.8, 39, 43 ],
+      [ 40, 20, -300.33, 37, 44 ],
+      [ 40, 20, -102, 27, 42 ],
+      [ 40, 20, 56.78, 38, 44 ],
+      [ 40, 20, -115.59, 34, 44 ],
+      [ 40, 20, -137.09, 42, 41 ],
+      [ 40, 20, 171.55, 42, 24 ],
+      [ 40, 20, -166.1, 42, 27 ],
+      [ 40, 20, 332.25, 43, 36 ],
+      [ 40, 20, 284.95, 28, 43 ],
+      [ 40, 20, -337.46, 44, 33 ],
+      [ 40, 20, 356.79, 39, 22 ],
+      [ 40, 20, -345.7, 43, 28 ],
+      [ 40, 20, -12.44, 42, 28 ],
+      [ 40, 20, -39.24, 42, 40 ],
+      [ 40, 20, -238.81, 37, 43 ],
+      [ 40, 20, -86.22, 21, 40 ],
+      [ 40, 20, 244.83, 34, 44 ],
+      [ 40, 20, 253.22, 29, 43 ],
+      [ 40, 20, -237.53, 38, 43 ],
+      [ 40, 20, 215.89, 43, 38 ],
+      [ 40, 20, -291.31, 33, 44 ],
+      [ 40, 20, 134.89, 42, 41 ],
+      [ 40, 20, 219.39, 42, 39 ],
+      [ 40, 20, -164.5, 42, 28 ],
+      [ 40, 20, 173.17, 41, 23 ],
+      [ 40, 20, -131.83, 40, 41 ],
+      [ 40, 20, 263.61, 23, 40 ],
+      [ 40, 20, 226.15, 40, 41 ],
+      [ 40, 20, -73.94, 29, 44 ],
+      [ 40, 20, 320.47, 42, 40 ],
+      [ 40, 20, -185.65, 41, 22 ],
+      [ 40, 20, -14.26, 42, 28 ],
+      [ 40, 20, -141.54, 42, 39 ],
+      [ 40, 20, 231.14, 40, 43 ],
+      [ 40, 20, 230.15, 39, 42 ],
+      [ 40, 20, 81.38, 25, 42 ],
+      [ 40, 20, 42.68, 43, 42 ],
+      [ 40, 20, -295.95, 35, 44 ],
+      [ 40, 20, 53.63, 39, 44 ],
+      [ 40, 20, -32.37, 43, 38 ],
+      [ 40, 20, -273.41, 22, 40 ],
+      [ 40, 20, 50.41, 40, 43 ],
+      [ 40, 20, -18.07, 43, 31 ],
+      [ 40, 20, 74.16, 29, 43 ],
+      [ 40, 20, -348.83, 43, 27 ],
+      [ 40, 20, 103.13, 28, 42 ],
+      [ 40, 20, 347.94, 42, 28 ],
+      [ 40, 20, 256.01, 27, 42 ],
+      [ 40, 20, -3.66, 39, 22 ],
+      [ 40, 20, -249.59, 32, 43 ],
+      [ 40, 20, 111.89, 33, 43 ],
+      [ 40, 20, 65.03, 34, 44 ],
+      [ 40, 20, 245.3, 33, 43 ],
+      [ 40, 20, -28.72, 44, 37 ],
+      [ 40, 20, 260.54, 25, 41 ],
+      [ 40, 20, 58.47, 37, 44 ],
+      [ 40, 20, 199.45, 43, 31 ],
+      [ 40, 20, 164.15, 43, 28 ],
+      [ 40, 20, -75.38, 28, 43 ],
+      [ 40, 20, -234.49, 39, 43 ],
+      [ 40, 20, 124.61, 38, 42 ],
+      [ 40, 20, 98.97, 26, 41 ],
+      [ 40, 20, 111.25, 33, 43 ],
+      [ 40, 20, 343.08, 43, 30 ],
+      [ 40, 20, -29.9, 43, 36 ],
+      [ 40, 20, -18.6, 42, 31 ],
+      [ 40, 20, 64.45, 35, 45 ],
+      [ 40, 20, -347.22, 43, 28 ],
+      [ 40, 20, 45.46, 42, 42 ],
+      [ 40, 20, -241.93, 36, 43 ],
+      [ 40, 20, -19.59, 43, 32 ],
+      [ 40, 20, 132.05, 41, 41 ],
+      [ 40, 20, 168.49, 43, 26 ],
+      [ 40, 20, 322.34, 42, 40 ],
+      [ 40, 20, -153.79, 43, 34 ],
+      [ 40, 20, 179.66, 39, 19 ],
+      [ 40, 20, 65.47, 34, 44 ],
+      [ 40, 20, -165.85, 42, 27 ],
+      [ 40, 20, 75.66, 28, 43 ],
+      [ 40, 20, -298.19, 36, 44 ],
+      [ 40, 20, -55.44, 37, 43 ],
+      [ 40, 20, -172.45, 41, 24 ],
+      [ 40, 20, 126.84, 39, 43 ],
+      [ 40, 20, -170.14, 41, 25 ],
+      [ 40, 20, 158.84, 44, 32 ],
+      [ 40, 20, 27.38, 44, 36 ],
+      [ 40, 20, 248.33, 32, 43 ],
+      [ 40, 20, -1.71, 39, 21 ],
+      [ 40, 20, -168.47, 42, 26 ],
+      [ 40, 20, -187.06, 41, 23 ],
+      [ 40, 20, 123.8, 39, 43 ],
+      [ 40, 20, 316.15, 41, 41 ],
+      [ 40, 20, 271.92, 20, 40 ],
+      [ 40, 20, -124.95, 37, 42 ],
+      [ 40, 20, 299.22, 35, 44 ],
+      [ 40, 20, -117.99, 35, 43 ],
+      [ 40, 20, 216.46, 43, 38 ],
+      [ 40, 20, 3.67, 40, 22 ],
+      [ 40, 20, -105.2, 28, 42 ],
+      [ 40, 20, -98.09, 24, 41 ],
+      [ 40, 20, 121.74, 38, 44 ],
+      [ 40, 20, 235.21, 37, 42 ],
+      [ 40, 20, -326.05, 44, 39 ],
+      [ 40, 20, -69.77, 31, 44 ],
+      [ 40, 20, 197.55, 43, 30 ],
+      [ 40, 20, -119.83, 35, 43 ],
+      [ 40, 20, -250.11, 32, 43 ],
+      [ 40, 20, -96.99, 23, 40 ],
+      [ 40, 20, 74.32, 29, 43 ],
+      [ 40, 20, 185.56, 40, 22 ],
+      [ 40, 20, -35.18, 43, 39 ],
+      [ 40, 20, -341.13, 43, 31 ],
+      [ 40, 20, -346.9, 43, 28 ],
+      [ 40, 20, -268.34, 21, 39 ],
+      [ 40, 20, -151.26, 44, 36 ],
+      [ 40, 20, 171.95, 42, 24 ],
+      [ 40, 20, 119.05, 36, 43 ],
+      [ 40, 20, -262.94, 24, 40 ],
+      [ 40, 20, -189.77, 42, 25 ],
+      [ 40, 20, 310.58, 40, 43 ],
+      [ 40, 20, -89.99, 19, 39 ],
+      [ 40, 20, 294.04, 33, 44 ],
+      [ 40, 20, 266.72, 21, 39 ],
+      [ 40, 20, -178.07, 39, 20 ],
+      [ 40, 20, -190.92, 43, 26 ],
+      [ 40, 20, 205.94, 43, 34 ],
+      [ 40, 20, 63.94, 35, 44 ],
+      [ 40, 20, -334.47, 45, 35 ],
+      [ 40, 20, -150.4, 43, 35 ],
+      [ 40, 20, 318.74, 42, 41 ],
+      [ 40, 20, -72.56, 29, 44 ],
+      [ 40, 20, 331.35, 44, 37 ],
+      [ 40, 20, 193.95, 42, 27 ],
+      [ 40, 20, -38.6, 42, 40 ],
+      [ 40, 20, -98.43, 24, 41 ],
+      [ 40, 20, 31.49, 44, 37 ],
+      [ 40, 20, 201.57, 43, 32 ],
+      [ 40, 20, 11.46, 43, 27 ],
+      [ 40, 20, 294.51, 33, 44 ],
+      [ 40, 20, -84.11, 23, 41 ],
+      [ 40, 20, -162.99, 43, 29 ],
+      [ 40, 20, -100.68, 26, 42 ],
+      [ 40, 20, -65.23, 33, 44 ],
+      [ 40, 20, -149.88, 43, 36 ],
+      [ 40, 20, -9.01, 41, 26 ],
+      [ 40, 20, 143.51, 44, 38 ],
+      [ 40, 20, -337.94, 45, 34 ],
+      [ 40, 20, -249.97, 32, 43 ],
+      [ 40, 20, 240.58, 35, 43 ],
+      [ 40, 20, -167.7, 42, 27 ],
+      [ 40, 20, -299.39, 36, 44 ],
+      [ 40, 20, -209.42, 44, 35 ],
+      [ 40, 20, -233.67, 39, 43 ],
+      [ 40, 20, 327.34, 43, 38 ],
+      [ 40, 20, -27.49, 43, 36 ],
+      [ 40, 20, -64.59, 34, 45 ],
+      [ 40, 20, 173.27, 41, 23 ],
+      [ 40, 20, -323.55, 44, 39 ],
+      [ 40, 20, -39.05, 43, 41 ],
+      [ 40, 20, -337.14, 44, 33 ],
+      [ 40, 20, 355.2, 40, 23 ],
+      [ 40, 20, 248.4, 32, 43 ],
+      [ 40, 20, 354.22, 40, 24 ],
+      [ 40, 20, 189.14, 41, 25 ],
+      [ 40, 20, -150.21, 43, 35 ],
+      [ 40, 20, -104.22, 27, 42 ],
+      [ 40, 20, -139.37, 42, 40 ],
+      [ 40, 20, -308.64, 40, 43 ],
+      [ 40, 20, 267.25, 20, 39 ],
+      [ 40, 20, -204.87, 44, 33 ],
+      [ 40, 20, -32.74, 43, 38 ],
+      [ 40, 20, -255.74, 28, 42 ],
+      [ 40, 20, 54.45, 39, 44 ],
+      [ 40, 20, 262.03, 24, 41 ],
+      [ 40, 20, -45.61, 40, 42 ],
+      [ 40, 20, -314.56, 42, 42 ],
+      [ 40, 20, 45.53, 42, 42 ],
+      [ 40, 20, -23.54, 43, 33 ],
+      [ 40, 20, -204.53, 44, 33 ],
+      [ 40, 20, -73.9, 29, 44 ],
+      [ 40, 20, 168.76, 43, 26 ],
+      [ 40, 20, -143.92, 43, 38 ],
+      [ 40, 20, 76.69, 28, 43 ],
+      [ 40, 20, 295.09, 33, 44 ],
+      [ 40, 20, -176.59, 39, 21 ],
+      [ 40, 20, -310.8, 41, 43 ],
+      [ 40, 20, -129.5, 39, 42 ],
+      [ 40, 20, 356.69, 39, 22 ],
+      [ 40, 20, -274.35, 23, 41 ],
+      [ 40, 20, 191.45, 42, 26 ],
+      [ 40, 20, -340.45, 44, 32 ],
+      [ 40, 20, -279.15, 26, 42 ],
+      [ 40, 20, 79.84, 27, 43 ],
+      [ 40, 20, -346.24, 43, 28 ],
+      [ 40, 20, 269.99, 19, 39 ],
+      [ 40, 20, 289.64, 31, 44 ],
+      [ 40, 20, -90.45, 19, 39 ],
+      [ 40, 20, -229.38, 41, 42 ],
+      [ 40, 20, 341.01, 43, 32 ],
+      [ 40, 20, -183.2, 40, 21 ],
+      [ 40, 20, -74.25, 28, 43 ],
+      [ 40, 20, -51.74, 39, 43 ],
+      [ 40, 20, -78.93, 26, 43 ],
+      [ 40, 20, 340.21, 43, 32 ],
+      [ 40, 20, -149.72, 43, 36 ],
+      [ 40, 20, 235.46, 37, 42 ],
+      [ 40, 20, -334.36, 45, 35 ],
+      [ 40, 20, 255.82, 27, 42 ],
+      [ 40, 20, -148.08, 43, 37 ],
+      [ 40, 20, -178.88, 39, 19 ],
+      [ 40, 20, -178.08, 39, 20 ],
+      [ 40, 20, -339.33, 44, 33 ],
+      [ 40, 20, 37.2, 43, 40 ],
+      [ 40, 20, 258.61, 26, 42 ],
+      [ 40, 20, 315.77, 41, 41 ],
+      [ 40, 20, 220.62, 42, 40 ],
+      [ 40, 20, 307.81, 39, 43 ],
+      [ 40, 20, -173.74, 40, 23 ],
+      [ 40, 20, 217.3, 42, 39 ],
+      [ 40, 20, -326.54, 44, 39 ],
+      [ 40, 20, -342.29, 44, 31 ],
+      [ 40, 20, 236.86, 37, 43 ],
+      [ 40, 20, -245.68, 34, 43 ],
+      [ 40, 20, 97.55, 25, 41 ],
+      [ 40, 20, 250.62, 31, 43 ],
+      [ 40, 20, -335.69, 44, 34 ],
+      [ 40, 20, 27.19, 44, 36 ],
+      [ 40, 20, -199.84, 44, 31 ],
+      [ 40, 20, -205.07, 44, 33 ],
+      [ 40, 20, 8.19, 42, 25 ],
+      [ 40, 20, -23.03, 43, 33 ],
+      [ 40, 20, 80.68, 26, 42 ],
+      [ 40, 20, 316.45, 41, 41 ],
+      [ 40, 20, 258.04, 27, 42 ],
+      [ 40, 20, 60.89, 36, 44 ],
+      [ 40, 20, -193.27, 43, 27 ],
+      [ 40, 20, 133.49, 42, 42 ],
+      [ 40, 20, 86.53, 22, 40 ],
+      [ 40, 20, -297.46, 36, 44 ],
+      [ 40, 20, 345.41, 42, 29 ],
+      [ 40, 20, 267.65, 20, 39 ],
+      [ 40, 20, -115.54, 34, 44 ],
+      [ 40, 20, -353.92, 41, 24 ],
+      [ 40, 20, -55.15, 37, 43 ],
+      [ 40, 20, -216.94, 43, 39 ],
+      [ 40, 20, 321.85, 42, 40 ],
+      [ 40, 20, -194.53, 43, 28 ],
+      [ 40, 20, -269.13, 20, 39 ],
+      [ 40, 20, -211.89, 44, 37 ],
+      [ 40, 20, -337.23, 44, 33 ],
+      [ 40, 20, -235.66, 39, 43 ],
+      [ 40, 20, -194.18, 43, 27 ],
+      [ 40, 20, 259.63, 26, 42 ],
+      [ 40, 20, -121.34, 36, 43 ],
+      [ 40, 20, 263.37, 23, 40 ],
+      [ 40, 20, 150.24, 44, 35 ],
+      [ 40, 20, -97.02, 23, 40 ],
+      [ 40, 20, -69.44, 32, 44 ],
+      [ 40, 20, 310.41, 39, 43 ],
+      [ 40, 20, 57.91, 38, 44 ],
+      [ 40, 20, 298.75, 36, 45 ],
+      [ 40, 20, -72.63, 29, 44 ],
+      [ 40, 20, -221.41, 42, 40 ],
+      [ 40, 20, 255.19, 28, 42 ],
+      [ 40, 20, -174.6, 40, 22 ],
+      [ 40, 20, 199.48, 43, 31 ],
+      [ 40, 20, -298.08, 36, 44 ],
+      [ 40, 20, 318.9, 42, 41 ],
+      [ 40, 20, -73.99, 29, 44 ],
+      [ 40, 20, -235.54, 38, 42 ],
+      [ 40, 20, 304.31, 38, 44 ],
+      [ 40, 20, -166.34, 42, 27 ],
+      [ 40, 20, 8.92, 42, 26 ],
+      [ 40, 20, 310.39, 39, 43 ],
+      [ 40, 20, 138.52, 42, 40 ],
+      [ 40, 20, 151.99, 44, 35 ],
+      [ 40, 20, 272.24, 20, 40 ],
+      [ 40, 20, 303.99, 38, 44 ],
+      [ 40, 20, 242.87, 35, 43 ],
+      [ 40, 20, -299.66, 36, 44 ],
+      [ 40, 20, 326.77, 43, 38 ],
+      [ 40, 20, -352.79, 42, 25 ],
+      [ 40, 20, -133.84, 40, 41 ],
+      [ 40, 20, 226.39, 40, 41 ],
+      [ 40, 20, -114.12, 33, 43 ],
+      [ 40, 20, -230.47, 40, 42 ],
+      [ 40, 20, 16.63, 44, 30 ],
+      [ 40, 20, 148.86, 44, 36 ],
+      [ 40, 20, 60.09, 36, 44 ],
+      [ 40, 20, -32.96, 43, 38 ],
+      [ 40, 20, -153.24, 43, 35 ],
+      [ 40, 20, -1.16, 39, 20 ],
+      [ 40, 20, 254.41, 28, 42 ],
+      [ 40, 20, -14.65, 42, 29 ],
+      [ 40, 20, -105.97, 29, 43 ],
+      [ 40, 20, -280.19, 27, 43 ],
+      [ 40, 20, -175.17, 40, 22 ],
+      [ 40, 20, -44.05, 41, 41 ],
+      [ 40, 20, -321.29, 44, 41 ],
+      [ 40, 20, 110.85, 33, 43 ],
+      [ 40, 20, 80.41, 26, 42 ],
+      [ 40, 20, 343.02, 43, 30 ],
+      [ 40, 20, 304.51, 37, 43 ],
+      [ 40, 20, -270.67, 20, 39 ],
+      [ 40, 20, 293.41, 32, 44 ],
+      [ 40, 20, 83.02, 24, 41 ],
+      [ 40, 20, 241.33, 36, 44 ],
+      [ 40, 20, 205.64, 44, 34 ],
+      [ 40, 20, 27.01, 44, 36 ],
+      [ 40, 20, 124.19, 39, 43 ],
+      [ 40, 20, 265.98, 21, 39 ],
+      [ 40, 20, -6.23, 40, 24 ],
+      [ 40, 20, 131.41, 41, 41 ],
+      [ 40, 20, -227.86, 41, 41 ],
+      [ 40, 20, -139.85, 42, 39 ],
+      [ 40, 20, -342.72, 44, 30 ],
+      [ 40, 20, -98.33, 24, 41 ],
+      [ 40, 20, 236.79, 37, 43 ],
+      [ 40, 20, 166.14, 43, 27 ],
+      [ 40, 20, 321.77, 42, 40 ],
+      [ 40, 20, -156.18, 43, 33 ],
+      [ 40, 20, -347.1, 42, 27 ],
+      [ 40, 20, -39.4, 42, 40 ],
+      [ 40, 20, -261.77, 25, 41 ],
+      [ 40, 20, -1.74, 39, 21 ],
+      [ 40, 20, 214.63, 42, 37 ],
+      [ 40, 20, -181.95, 40, 20 ],
+      [ 40, 20, 183.09, 39, 21 ],
+      [ 40, 20, -189.43, 42, 25 ],
+      [ 40, 20, -143.24, 43, 38 ],
+      [ 40, 20, -66.07, 33, 44 ],
+      [ 40, 20, 250.99, 31, 43 ],
+      [ 40, 20, -160.22, 43, 31 ],
+      [ 40, 20, -121.56, 36, 43 ],
+      [ 40, 20, 340.33, 43, 32 ],
+      [ 40, 20, -226.82, 42, 42 ],
+      [ 40, 20, 321.46, 42, 40 ],
+      [ 40, 20, 221.65, 41, 40 ],
+      [ 40, 20, 338.83, 43, 33 ],
+      [ 40, 20, -11.53, 42, 27 ],
+      [ 40, 20, -14.16, 42, 28 ],
+      [ 40, 20, 244.81, 34, 44 ],
+      [ 40, 20, 342.24, 43, 31 ],
+      [ 40, 20, -242.76, 36, 43 ],
+      [ 40, 20, -343.06, 44, 30 ],
+      [ 40, 20, -157.61, 43, 32 ],
+      [ 40, 20, -225.48, 42, 41 ],
+      [ 40, 20, -81.38, 24, 42 ],
+      [ 40, 20, -280.83, 27, 43 ],
+      [ 40, 20, 300.67, 36, 44 ],
+      [ 40, 20, -119.62, 35, 43 ],
+      [ 40, 20, -77, 26, 42 ],
+      [ 40, 20, 313.57, 40, 42 ],
+      [ 40, 20, 200.99, 43, 32 ],
+      [ 40, 20, 21.23, 44, 33 ],
+      [ 40, 20, -48.18, 40, 42 ],
+      [ 40, 20, 55.62, 39, 44 ],
+      [ 40, 20, 199.29, 43, 31 ],
+      [ 40, 20, -225.09, 42, 41 ],
+      [ 40, 20, 226.2, 40, 41 ],
+      [ 40, 20, -303.96, 39, 44 ],
+      [ 40, 20, 68.84, 33, 44 ],
+      [ 40, 20, 117.18, 36, 43 ],
+      [ 40, 20, -104.18, 27, 42 ],
+      [ 40, 20, 307.29, 39, 43 ],
+      [ 40, 20, 97.5, 25, 41 ],
+      [ 40, 20, 29.01, 44, 36 ],
+      [ 40, 20, 268.74, 19, 39 ],
+      [ 40, 20, -40.85, 42, 41 ],
+      [ 40, 20, 7.83, 42, 25 ],
+      [ 40, 20, -102.79, 27, 42 ],
+      [ 40, 20, 304.99, 37, 43 ],
+      [ 40, 20, -107.37, 29, 43 ],
+      [ 40, 20, -120.56, 36, 43 ],
+      [ 40, 20, -297.78, 36, 44 ],
+      [ 40, 20, -90.42, 19, 39 ],
+      [ 40, 20, 81.84, 25, 42 ],
+      [ 40, 20, -163.25, 43, 29 ],
+      [ 40, 20, 188.2, 41, 24 ],
+      [ 40, 20, 161.02, 44, 31 ],
+      [ 40, 20, -222.59, 43, 41 ],
+      [ 40, 20, -291.42, 33, 44 ],
+      [ 40, 20, -275.99, 24, 41 ],
+      [ 40, 20, -269.03, 20, 39 ],
+      [ 40, 20, 269.58, 19, 39 ],
+      [ 40, 20, 105.25, 29, 42 ],
+      [ 573, 347, -55.47, 609, 669 ],
+      [ 765, 205, 0.58, 766, 212 ],
+      [ 351, 714, 256.41, 775, 508 ],
+      [ 276, 434, -74.59, 490, 381 ],
+      [ 146, 6, 293.24, 62, 136 ],
+      [ 512, 715, -174.13, 581, 762 ],
+      [ 853, 14, 95.45, 95, 849 ],
+      [ 457, 224, -76.35, 324, 497 ],
+      [ 174, 370, -7.76, 221, 390 ],
+      [ 294, 467, -98.19, 502, 357 ],
+      [ 955, 129, 227, 744, 785 ],
+      [ 364, 702, -301.62, 788, 677 ],
+      [ 877, 197, -353.05, 894, 302 ],
+      [ 730, 404, 53.02, 762, 826 ],
+      [ 112, 514, 58.24, 495, 366 ],
+      [ 17, 129, 8.44, 35, 130 ],
+      [ 281, 768, 20.87, 536, 818 ],
+      [ 929, 343, 230.05, 858, 931 ],
+      [ 308, 473, -143.37, 528, 562 ],
+      [ 809, 693, 294.19, 962, 1021 ],
+      [ 158, 641, -305.47, 613, 500 ],
+      [ 993, 146, 352.59, 1002, 273 ],
+      [ 52, 36, -182.82, 53, 37 ],
+      [ 61, 583, 195.61, 214, 576 ],
+      [ 649, 666, -43.4, 928, 929 ],
+      [ 220, 678, 77.36, 710, 362 ],
+      [ 744, 121, 77.35, 280, 751 ],
+      [ 261, 49, -321.61, 234, 200 ],
+      [ 77, 280, 121.51, 279, 210 ],
+      [ 385, 119, 50.72, 335, 373 ],
+      [ 291, 237, -68.73, 325, 357 ],
+      [ 369, 213, 67.7, 337, 422 ],
+      [ 358, 251, 100.59, 312, 396 ],
+      [ 610, 297, -73.68, 455, 668 ],
+      [ 376, 15, -169.68, 371, 81 ],
+      [ 827, 179, -254.18, 397, 843 ],
+      [ 425, 737, -141.29, 791, 839 ],
+      [ 23, 164, -95.58, 164, 37 ],
+      [ 77, 222, 166.62, 125, 232 ],
+      [ 762, 510, 277.54, 604, 822 ],
+      [ 322, 728, -221.02, 720, 759 ],
+      [ 736, 236, -22.05, 770, 495 ],
+      [ 321, 504, 212.83, 541, 597 ],
+      [ 976, 193, -229.44, 781, 865 ],
+      [ 359, 475, -215.81, 569, 594 ],
+      [ 630, 326, -48.07, 662, 686 ],
+      [ 780, 644, -77.76, 793, 899 ],
+      [ 67, 661, 75.98, 657, 225 ],
+      [ 443, 718, 283.2, 799, 595 ],
+      [ 168, 522, 40.53, 466, 506 ],
+      [ 51, 763, 2.14, 78, 763 ],
+      [ 249, 547, 222.59, 552, 570 ],
+      [ 729, 19, -25.54, 664, 331 ],
+      [ 520, 750, 154.94, 789, 898 ],
+      [ 706, 251, -120.38, 573, 735 ],
+      [ 911, 723, 185.11, 970, 800 ],
+      [ 330, 540, 68.77, 622, 503 ],
+      [ 732, 590, -32.05, 932, 888 ],
+      [ 328, 154, -78.98, 212, 350 ],
+      [ 219, 279, -310.49, 354, 347 ],
+      [ 788, 317, -315.86, 786, 775 ],
+      [ 279, 503, 196.18, 406, 559 ],
+      [ 84, 282, 213.32, 224, 281 ],
+      [ 559, 671, 196.16, 722, 798 ],
+      [ 268, 432, -288.99, 495, 394 ],
+      [ 609, 347, -331.79, 700, 593 ],
+      [ 360, 594, 173.57, 424, 629 ],
+      [ 970, 375, 5.79, 1003, 470 ],
+      [ 412, 620, 149.31, 670, 742 ],
+      [ 812, 16, -309.25, 525, 638 ],
+      [ 882, 606, -12.36, 990, 780 ],
+      [ 945, 47, -261.03, 193, 939 ],
+      [ 712, 110, 2.68, 716, 143 ],
+      [ 503, 529, -88.4, 542, 517 ],
+      [ 270, 730, 316.29, 698, 714 ],
+      [ 371, 418, -79.07, 479, 443 ],
+      [ 412, 687, -242.53, 800, 681 ],
+      [ 146, 646, 108.15, 659, 338 ],
+      [ 667, 187, -31.06, 666, 504 ],
+      [ 367, 27, -16.94, 358, 132 ],
+      [ 439, 689, -168.99, 561, 758 ],
+      [ 934, 629, -125.04, 1050, 1124 ],
+      [ 50, 395, -22.51, 196, 384 ],
+      [ 566, 4, -246.96, 225, 521 ],
+      [ 952, 206, -283.43, 421, 973 ],
+      [ 890, 484, 107.7, 731, 993 ],
+      [ 266, 25, 31.52, 239, 160 ],
+      [ 433, 134, -83.19, 183, 445 ],
+      [ 75, 634, 91.53, 636, 90 ],
+      [ 543, 140, 116.69, 368, 547 ],
+      [ 6, 469, 41.81, 317, 353 ],
+      [ 278, 401, -88.97, 404, 284 ],
+      [ 612, 439, 280.54, 542, 681 ],
+      [ 68, 95, 283.63, 107, 88 ],
+      [ 229, 41, -243.53, 139, 221 ],
+      [ 338, 708, 210.11, 646, 780 ],
+      [ 1003, 139, 232.72, 717, 881 ],
+      [ 536, 463, 357.89, 551, 482 ],
+      [ 930, 519, 231.4, 985, 1049 ],
+      [ 548, 157, -357.44, 554, 181 ],
+      [ 202, 162, 82.14, 187, 222 ],
+      [ 773, 370, -262.23, 471, 814 ],
+      [ 135, 61, 148.43, 147, 121 ],
+      [ 22, 112, 236.79, 105, 78 ],
+      [ 937, 283, 274.47, 354, 956 ],
+      [ 79, 536, 217.74, 389, 471 ],
+      [ 890, 520, 347.55, 980, 699 ],
+      [ 708, 154, 61.36, 474, 695 ],
+      [ 705, 82, -172.68, 708, 169 ],
+      [ 523, 493, -25.61, 683, 671 ],
+      [ 526, 644, 125.61, 830, 801 ],
+      [ 131, 455, -248, 471, 290 ],
+      [ 270, 556, -191.46, 374, 597 ],
+      [ 993, 572, -87.31, 616, 1018 ],
+      [ 818, 506, 177.51, 839, 540 ],
+      [ 696, 565, -40.43, 894, 881 ],
+      [ 494, 464, -273.43, 492, 521 ],
+      [ 476, 227, -129.96, 478, 509 ],
+      [ 52, 755, -53.22, 635, 493 ],
+      [ 318, 379, -311.68, 494, 489 ],
+      [ 794, 5, 291.36, 293, 741 ],
+      [ 460, 103, -2.3, 462, 121 ],
+      [ 619, 305, -201.62, 687, 511 ],
+      [ 859, 282, 333.95, 894, 630 ],
+      [ 223, 127, 88.01, 134, 226 ],
+      [ 987, 649, -102.96, 852, 1106 ],
+      [ 418, 251, 331.17, 486, 421 ],
+      [ 541, 608, -176.92, 572, 635 ],
+      [ 868, 646, -189.3, 960, 777 ],
+      [ 281, 116, 165.4, 300, 181 ],
+      [ 349, 711, 169.74, 470, 761 ],
+      [ 252, 288, 265.89, 304, 271 ],
+      [ 760, 752, -168.4, 894, 888 ],
+      [ 986, 628, 95.31, 716, 1038 ],
+      [ 949, 27, 213.8, 802, 548 ],
+      [ 562, 767, 101.53, 864, 702 ],
+      [ 927, 312, 336.26, 973, 659 ],
+      [ 886, 717, 185.51, 949, 798 ],
+      [ 123, 600, 70.64, 606, 315 ],
+      [ 365, 42, 178.97, 365, 47 ],
+      [ 89, 304, 124.91, 299, 245 ],
+      [ 842, 492, -325.96, 972, 879 ],
+      [ 708, 294, -341.61, 764, 502 ],
+      [ 981, 265, 246.51, 633, 1004 ],
+      [ 604, 208, 271.05, 218, 607 ],
+      [ 396, 629, 269.55, 631, 399 ],
+      [ 29, 556, -158.42, 229, 526 ],
+      [ 1019, 453, -206.3, 1114, 856 ],
+      [ 771, 544, 355.98, 806, 597 ],
+      [ 359, 50, -324.83, 322, 247 ],
+      [ 102, 116, -40.39, 151, 154 ],
+      [ 791, 747, -299.35, 1038, 1055 ],
+      [ 840, 510, -23.99, 973, 807 ],
+      [ 866, 477, 224.07, 953, 944 ],
+      [ 705, 162, -301.25, 503, 686 ],
+      [ 578, 459, 288.1, 614, 692 ],
+      [ 450, 481, 89.13, 487, 456 ],
+      [ 736, 476, -207, 871, 757 ],
+      [ 955, 286, 302.83, 756, 957 ],
+      [ 949, 555, 349.29, 1034, 721 ],
+      [ 999, 631, -262.23, 760, 1073 ],
+      [ 430, 457, -281.97, 536, 515 ],
+      [ 516, 318, 195.96, 582, 446 ],
+      [ 994, 199, -76.86, 418, 1012 ],
+      [ 800, 727, 74.89, 910, 962 ],
+      [ 884, 393, -215, 949, 828 ],
+      [ 782, 729, 235.01, 1044, 1057 ],
+      [ 397, 513, -38.84, 630, 648 ],
+      [ 614, 461, 228.97, 750, 765 ],
+      [ 533, 404, 29.07, 661, 611 ],
+      [ 518, 385, -99.58, 465, 573 ],
+      [ 657, 707, 327.94, 930, 947 ],
+      [ 768, 326, -94.35, 382, 789 ],
+      [ 534, 303, 91.98, 321, 542 ],
+      [ 937, 135, 53.41, 666, 832 ],
+      [ 532, 29, -299.01, 282, 479 ],
+      [ 738, 615, -335.72, 925, 864 ],
+      [ 560, 144, 144.86, 540, 439 ],
+      [ 1017, 604, -143.59, 1176, 1088 ],
+      [ 830, 236, 234.95, 668, 814 ],
+      [ 360, 624, -124.39, 717, 648 ],
+      [ 730, 348, -181.98, 741, 372 ],
+      [ 684, 155, 122.85, 501, 657 ],
+      [ 38, 555, -313.91, 426, 412 ],
+      [ 681, 490, -188.19, 744, 581 ],
+      [ 245, 120, -161.22, 269, 191 ],
+      [ 332, 673, -304.93, 742, 657 ],
+      [ 366, 325, -170.16, 415, 381 ],
+      [ 60, 319, -323.93, 236, 293 ],
+      [ 368, 173, -103.4, 252, 396 ],
+      [ 190, 443, -239.3, 478, 388 ],
+      [ 525, 222, 86.17, 257, 538 ],
+      [ 779, 735, 231.02, 1060, 1066 ],
+      [ 441, 763, 31.22, 772, 881 ],
+      [ 507, 506, -230.09, 713, 712 ],
+      [ 751, 689, -118.02, 959, 985 ],
+      [ 10, 170, -207.58, 87, 154 ],
+      [ 88, 444, 96.25, 450, 134 ],
+      [ 358, 489, -325.38, 572, 605 ],
+      [ 410, 765, -163.49, 609, 848 ],
+      [ 774, 139, 250.99, 382, 775 ],
+      [ 946, 533, -261.54, 666, 1012 ],
+      [ 557, 348, -293.13, 538, 649 ],
+      [ 373, 679, -298.13, 774, 648 ],
+      [ 930, 291, 175.45, 950, 362 ],
+      [ 90, 86, 101, 101, 103 ],
+      [ 435, 93, 259.53, 169, 443 ],
+      [ 651, 159, -44.7, 573, 570 ],
+      [ 276, 427, -306.82, 507, 476 ],
+      [ 325, 734, -310.41, 769, 723 ],
+      [ 605, 546, -180.54, 609, 550 ],
+      [ 450, 487, 318.4, 658, 662 ],
+      [ 590, 137, -75.57, 279, 605 ],
+      [ 685, 416, -159.6, 786, 627 ],
+      [ 773, 345, 112.41, 613, 845 ],
+      [ 511, 412, 192.27, 586, 510 ],
+      [ 142, 738, 278.75, 749, 252 ],
+      [ 1023, 458, -293.08, 822, 1121 ],
+      [ 448, 665, 106.65, 765, 619 ],
+      [ 523, 141, 74, 280, 541 ],
+      [ 594, 594, -134.45, 838, 839 ],
+      [ 849, 163, 322.03, 768, 650 ],
+      [ 790, 605, -270.42, 610, 793 ],
+      [ 171, 351, 119.26, 389, 320 ],
+      [ 456, 162, -277.76, 222, 473 ],
+      [ 103, 545, 108.48, 549, 269 ],
+      [ 889, 651, 79.93, 796, 989 ],
+      [ 773, 650, -210.99, 997, 954 ],
+      [ 868, 218, -308.01, 706, 817 ],
+      [ 508, 610, -176.53, 543, 638 ],
+      [ 101, 287, -340.03, 192, 304 ],
+      [ 422, 155, -187.53, 438, 208 ],
+      [ 368, 747, -340.56, 596, 826 ],
+      [ 496, 107, -12.25, 506, 210 ],
+      [ 153, 448, 139.26, 407, 437 ],
+      [ 270, 525, -70.57, 583, 429 ],
+      [ 936, 424, -180.74, 940, 435 ],
+      [ 538, 235, -291.72, 417, 586 ],
+      [ 750, 118, -88.21, 140, 753 ],
+      [ 824, 499, -237.04, 867, 961 ],
+      [ 61, 575, 31.41, 352, 522 ],
+      [ 89, 123, 176.59, 95, 127 ],
+      [ 335, 399, 156.89, 465, 497 ],
+      [ 362, 2, 256.74, 84, 352 ],
+      [ 857, 117, -43.45, 701, 674 ],
+      [ 543, 319, -271.27, 331, 549 ],
+      [ 955, 253, 125.56, 761, 922 ],
+      [ 186, 656, 345.76, 340, 681 ],
+      [ 283, 450, -263.73, 477, 329 ],
+      [ 669, 300, 203.75, 732, 543 ],
+      [ 844, 345, 22.18, 911, 637 ],
+      [ 377, 412, 137.13, 556, 557 ],
+      [ 116, 663, -209.4, 426, 633 ],
+      [ 851, 166, -207.8, 829, 542 ],
+      [ 704, 40, -98.81, 146, 700 ],
+      [ 130, 447, 199.8, 272, 464 ],
+      [ 257, 395, -283.5, 443, 341 ],
+      [ 947, 534, 331.25, 1086, 923 ],
+      [ 927, 745, 33.05, 1183, 1129 ],
+      [ 40, 479, 313.89, 371, 360 ],
+      [ 842, 343, -82.76, 445, 878 ],
+      [ 361, 626, 303.08, 721, 644 ],
+      [ 44, 712, 203.88, 327, 667 ],
+      [ 258, 582, 359.09, 265, 586 ],
+      [ 475, 342, -323.57, 585, 557 ],
+      [ 846, 439, 95.2, 513, 881 ],
+      [ 618, 631, -255.2, 767, 757 ],
+      [ 727, 573, 244.51, 828, 902 ],
+      [ 686, 500, 222.61, 842, 831 ],
+      [ 221, 530, -49.12, 544, 514 ],
+      [ 156, 392, 272.31, 397, 171 ],
+      [ 550, 663, 138.28, 851, 860 ],
+      [ 469, 696, 85.4, 731, 523 ],
+      [ 247, 121, -89.45, 122, 247 ],
+      [ 246, 477, 230.48, 523, 492 ],
+      [ 298, 343, -78.27, 395, 361 ],
+      [ 945, 39, -206.96, 860, 462 ],
+      [ 70, 584, 329.99, 351, 541 ],
+      [ 930, 330, 78.29, 511, 977 ],
+      [ 734, 496, -145.75, 884, 822 ],
+      [ 153, 612, 221.61, 519, 558 ],
+      [ 28, 256, 122.53, 231, 160 ],
+      [ 736, 608, 54.16, 923, 952 ],
+      [ 346, 25, 167.09, 343, 100 ],
+      [ 731, 209, -106.47, 406, 759 ],
+      [ 546, 431, 214.67, 693, 663 ],
+      [ 947, 372, 250.3, 668, 1015 ],
+      [ 141, 424, 76.93, 444, 233 ],
+      [ 98, 353, -334.21, 242, 360 ],
+      [ 721, 135, 129.95, 565, 638 ],
+      [ 2, 249, -16.73, 72, 238 ],
+      [ 829, 270, 223.01, 789, 761 ],
+      [ 492, 54, 72.23, 201, 484 ],
+      [ 57, 313, 94.83, 316, 81 ],
+      [ 806, 92, 289.88, 360, 788 ],
+      [ 143, 502, -26.17, 348, 514 ],
+      [ 960, 444, 321.87, 1028, 941 ],
+      [ 804, 549, -1.2, 813, 565 ],
+      [ 402, 622, 329.13, 663, 740 ],
+      [ 438, 395, -264.53, 434, 473 ],
+      [ 111, 396, -31.3, 299, 395 ],
+      [ 599, 250, 221.13, 614, 581 ],
+      [ 404, 618, 271.02, 624, 414 ],
+      [ 1019, 661, -156.22, 1198, 1014 ],
+      [ 642, 497, -70.04, 685, 773 ],
+      [ 542, 604, -319.97, 803, 810 ],
+      [ 1017, 555, 95.73, 653, 1065 ],
+      [ 963, 390, -109.91, 693, 1037 ],
+      [ 449, 691, -246.89, 812, 682 ],
+      [ 405, 251, 123.08, 431, 475 ],
+      [ 541, 334, -225.77, 616, 619 ],
+      [ 1008, 15, 8.18, 999, 158 ],
+      [ 811, 318, -132.55, 781, 811 ],
+      [ 684, 314, -233.79, 657, 735 ],
+      [ 974, 27, 231.55, 625, 778 ],
+      [ 363, 434, 76.98, 504, 451 ],
+      [ 420, 428, -122.82, 586, 583 ],
+      [ 44, 382, 242.46, 358, 215 ],
+      [ 399, 718, 169.72, 520, 776 ],
+      [ 560, 254, -315.23, 576, 574 ],
+      [ 223, 659, -2.44, 249, 667 ],
+      [ 414, 647, 11.35, 532, 715 ],
+      [ 938, 487, 309.16, 969, 1035 ],
+      [ 237, 232, -116.8, 312, 315 ],
+      [ 417, 194, -91.67, 205, 421 ],
+      [ 234, 466, 314.41, 495, 493 ],
+      [ 856, 12, -4.73, 853, 82 ],
+      [ 169, 45, 352.78, 172, 66 ],
+      [ 2, 344, 305.73, 279, 202 ],
+      [ 755, 764, -176.75, 795, 804 ],
+      [ 819, 163, -279.19, 291, 834 ],
+      [ 303, 473, 327.13, 510, 561 ],
+      [ 832, 408, 63.3, 737, 926 ],
+      [ 759, 586, 280.36, 711, 851 ],
+      [ 81, 130, -257.92, 143, 105 ],
+      [ 463, 305, 178.43, 470, 316 ],
+      [ 398, 179, 189.44, 420, 241 ],
+      [ 903, 305, 230.84, 805, 892 ],
+      [ 893, 306, -167.29, 937, 494 ],
+      [ 816, 104, -171.82, 821, 218 ],
+      [ 52, 718, -19.67, 289, 693 ],
+      [ 167, 177, -296.63, 232, 228 ],
+      [ 120, 32, 85.5, 41, 122 ],
+      [ 722, 601, -85.84, 650, 764 ],
+      [ 609, 662, 35.57, 880, 892 ],
+      [ 754, 240, 321.29, 737, 658 ],
+      [ 496, 538, -231.74, 729, 721 ],
+      [ 254, 447, 53.71, 510, 469 ],
+      [ 70, 348, 340.06, 183, 350 ],
+      [ 344, 192, -282.97, 264, 378 ],
+      [ 612, 231, -330.59, 646, 501 ],
+      [ 72, 356, -165.26, 159, 361 ],
+      [ 162, 446, -135.64, 426, 431 ],
+      [ 795, 219, -292.56, 507, 818 ],
+      [ 161, 676, 327.18, 500, 655 ],
+      [ 724, 473, -168.11, 804, 611 ],
+      [ 669, 77, 336.01, 641, 342 ],
+      [ 851, 267, 34.78, 850, 704 ],
+      [ 416, 319, -359.02, 420, 326 ],
+      [ 387, 576, -179.64, 389, 577 ],
+      [ 497, 267, 36.17, 559, 509 ],
+      [ 539, 320, -350.8, 583, 402 ],
+      [ 816, 441, 66.6, 729, 923 ],
+      [ 111, 269, 271.66, 271, 118 ],
+      [ 207, 390, 184.72, 237, 405 ],
+      [ 160, 164, -92.13, 168, 164 ],
+      [ 433, 666, -20.46, 637, 775 ],
+      [ 399, 536, 229.18, 665, 650 ],
+      [ 960, 79, -192.4, 954, 282 ],
+      [ 962, 369, 347.54, 1018, 567 ],
+      [ 194, 741, -122.85, 727, 563 ],
+      [ 758, 377, 176.79, 777, 417 ],
+      [ 771, 220, -130.18, 664, 730 ],
+      [ 353, 303, 121.74, 443, 458 ],
+      [ 228, 458, -233.29, 503, 455 ],
+      [ 1002, 577, -79.69, 746, 1088 ],
+      [ 359, 133, -176.18, 366, 155 ],
+      [ 842, 432, 325.52, 938, 832 ],
+      [ 656, 384, -320.92, 751, 711 ],
+      [ 895, 337, 24.6, 953, 678 ],
+      [ 877, 482, -0.9, 883, 495 ],
+      [ 190, 282, 351.99, 226, 305 ],
+      [ 954, 91, -162, 934, 380 ],
+      [ 256, 356, 121.52, 436, 403 ],
+      [ 942, 526, -170.02, 1017, 680 ],
+      [ 98, 510, -349.45, 189, 518 ],
+      [ 496, 11, -224.86, 359, 356 ],
+      [ 758, 642, 179.75, 760, 644 ],
+      [ 709, 366, -180.86, 713, 375 ],
+      [ 764, 269, 134.32, 725, 733 ],
+      [ 287, 158, -134.37, 312, 314 ],
+      [ 798, 300, 129.27, 737, 806 ],
+      [ 787, 247, 214.41, 788, 647 ],
+      [ 44, 439, -172.34, 101, 439 ],
+      [ 729, 377, 320.69, 802, 753 ],
+      [ 999, 450, 78.19, 644, 1069 ],
+      [ 1014, 54, 88.04, 88, 1015 ],
+      [ 183, 622, -30.22, 470, 629 ],
+      [ 950, 385, 312.59, 924, 960 ],
+      [ 181, 190, -155.94, 241, 245 ],
+      [ 884, 405, -8.25, 931, 527 ],
+      [ 181, 236, 272.79, 243, 191 ],
+      [ 877, 57, -216.03, 743, 560 ],
+      [ 670, 90, 195.13, 668, 260 ],
+      [ 937, 637, -172.02, 1014, 760 ],
+      [ 881, 618, 249.25, 889, 1041 ],
+      [ 480, 610, 299.25, 765, 716 ],
+      [ 93, 747, 161.79, 321, 738 ],
+      [ 562, 691, -197.6, 744, 827 ],
+      [ 495, 59, -19.85, 484, 223 ],
+      [ 785, 721, 359.66, 787, 725 ],
+      [ 261, 89, -139.99, 255, 234 ],
+      [ 137, 746, -86.8, 751, 178 ],
+      [ 342, 480, -2.77, 363, 495 ],
+      [ 107, 414, -126.38, 395, 331 ],
+      [ 375, 306, -267.64, 321, 386 ],
+      [ 217, 666, 304.01, 672, 552 ],
+      [ 131, 735, 283.69, 744, 301 ],
+      [ 873, 388, 211.15, 947, 782 ],
+      [ 80, 759, 265.54, 762, 137 ],
+      [ 564, 579, 221.17, 804, 806 ],
+      [ 563, 7, 303.67, 317, 472 ],
+      [ 876, 109, 282.32, 291, 878 ],
+      [ 241, 365, 11.53, 309, 406 ],
+      [ 749, 446, -321.05, 862, 817 ],
+      [ 57, 726, -34.7, 458, 629 ],
+      [ 188, 121, -131.26, 213, 220 ],
+      [ 109, 219, -162.69, 168, 240 ],
+      [ 1024, 105, 200.79, 993, 460 ],
+      [ 812, 165, 191.77, 827, 326 ],
+      [ 678, 587, 14.3, 801, 736 ],
+      [ 481, 241, 20.14, 534, 391 ],
+      [ 401, 130, 122.08, 322, 407 ],
+      [ 290, 310, -255.92, 371, 355 ],
+      [ 818, 103, 161.27, 807, 359 ],
+      [ 874, 145, 121.63, 581, 819 ],
+      [ 313, 286, 234.41, 414, 419 ],
+      [ 638, 367, -281.16, 483, 696 ],
+      [ 918, 367, -183.26, 937, 417 ],
+      [ 692, 208, -29.51, 703, 521 ],
+      [ 453, 716, -199.75, 668, 826 ],
+      [ 985, 309, 25.67, 1021, 705 ],
+      [ 502, 609, 146.76, 753, 783 ],
+      [ 163, 58, -283.29, 93, 171 ],
+      [ 311, 671, -187.24, 393, 704 ],
+      [ 29, 558, -51.47, 454, 370 ],
+      [ 714, 24, 216.39, 587, 441 ],
+      [ 535, 502, -159.67, 674, 655 ],
+      [ 647, 423, 184.07, 674, 466 ],
+      [ 899, 174, -341.28, 907, 453 ],
+      [ 345, 513, 329.85, 555, 617 ],
+      [ 573, 483, -101.39, 585, 655 ],
+      [ 97, 91, -251.33, 117, 119 ],
+      [ 818, 213, -197.64, 844, 449 ],
+      [ 927, 447, -288.8, 721, 1021 ],
+      [ 149, 468, 234.16, 465, 393 ],
+      [ 587, 235, 256.52, 364, 624 ],
+      [ 383, 636, 7.03, 458, 677 ],
+      [ 668, 353, -317, 729, 713 ],
+      [ 418, 258, -154.77, 487, 410 ],
+      [ 444, 516, 325.47, 656, 676 ],
+      [ 402, 178, 58.01, 363, 434 ],
+      [ 769, 250, 143.01, 764, 661 ],
+      [ 924, 95, 342.54, 909, 368 ],
+      [ 131, 22, 40.69, 113, 102 ],
+      [ 232, 133, -241.28, 228, 266 ],
+      [ 53, 573, -21.74, 260, 551 ],
+      [ 930, 92, -146.28, 823, 592 ],
+      [ 428, 593, 183.95, 466, 620 ],
+      [ 489, 138, -294.32, 327, 502 ],
+      [ 781, 471, 189.43, 846, 591 ],
+      [ 732, 4, 355.43, 729, 62 ],
+      [ 302, 580, -130.66, 635, 606 ],
+      [ 1018, 505, -42.07, 1092, 1057 ],
+      [ 993, 603, -22.08, 1146, 932 ],
+      [ 539, 8, 102.05, 120, 528 ],
+      [ 708, 48, -81.14, 155, 706 ],
+      [ 165, 745, 4.73, 225, 755 ],
+      [ 469, 298, -160.01, 541, 439 ],
+      [ 218, 664, -31.28, 530, 680 ],
+      [ 312, 482, -310.38, 569, 549 ],
+      [ 69, 262, -307.45, 249, 213 ],
+      [ 63, 489, 236.14, 440, 323 ],
+      [ 389, 484, -10.97, 472, 549 ],
+      [ 841, 460, -166.4, 924, 643 ],
+      [ 298, 96, -158.96, 311, 195 ],
+      [ 955, 626, -114.48, 964, 1127 ],
+      [ 327, 749, -136.45, 752, 767 ],
+      [ 846, 332, 142.16, 872, 779 ],
+      [ 107, 496, 44.36, 423, 429 ],
+      [ 574, 729, -224.62, 920, 921 ],
+      [ 645, 13, 20.69, 608, 239 ],
+      [ 719, 59, -241.73, 392, 660 ],
+      [ 543, 351, 211.16, 645, 579 ],
+      [ 16, 213, -78.13, 210, 59 ],
+      [ 291, 436, 11.09, 369, 483 ],
+      [ 577, 383, -122.45, 631, 691 ],
+      [ 926, 629, -140.49, 1113, 1073 ],
+      [ 220, 495, 170.69, 297, 522 ],
+      [ 934, 574, -84.97, 652, 980 ],
+      [ 485, 236, -121.77, 455, 535 ],
+      [ 678, 720, -110.28, 909, 884 ],
+      [ 195, 491, -55.09, 513, 440 ],
+      [ 363, 130, 273.14, 148, 369 ],
+      [ 152, 141, -247.66, 187, 193 ],
+      [ 553, 359, 160.46, 641, 521 ],
+      [ 56, 23, -200.49, 60, 40 ],
+      [ 394, 717, -331.63, 687, 818 ],
+      [ 706, 114, 131.79, 555, 601 ],
+      [ 437, 46, -50.28, 313, 365 ],
+      [ 828, 410, 170.92, 882, 534 ],
+      [ 143, 150, 124.98, 204, 202 ],
+      [ 498, 296, -135.53, 561, 558 ],
+      [ 932, 568, -14.46, 1043, 782 ],
+      [ 808, 681, 117.2, 975, 1028 ],
+      [ 968, 327, -266.95, 378, 982 ],
+      [ 684, 369, -245.86, 616, 774 ],
+      [ 911, 665, -294.01, 977, 1103 ],
+      [ 952, 426, -187.84, 1001, 550 ],
+      [ 627, 753, -145.19, 943, 974 ],
+      [ 44, 606, 238.3, 538, 354 ],
+      [ 799, 713, -342, 979, 924 ],
+      [ 464, 319, -65.38, 482, 554 ],
+      [ 784, 249, -253.58, 460, 821 ],
+      [ 251, 87, -335.43, 264, 183 ],
+      [ 930, 45, -29.07, 833, 490 ],
+      [ 38, 558, 316.6, 409, 431 ],
+      [ 200, 473, 219.12, 452, 492 ],
+      [ 294, 418, -102, 469, 373 ],
+      [ 539, 120, -116.07, 343, 536 ],
+      [ 845, 153, -268.05, 181, 848 ],
+      [ 672, 751, -319.72, 998, 1007 ],
+      [ 697, 331, -21.35, 769, 561 ],
+      [ 92, 151, 211.96, 157, 175 ],
+      [ 244, 339, 293.35, 406, 358 ],
+      [ 279, 267, 335.17, 364, 359 ],
+      [ 749, 296, 137.87, 754, 721 ],
+      [ 687, 446, -139.04, 809, 786 ],
+      [ 487, 666, 252.84, 778, 660 ],
+      [ 854, 302, -354.74, 878, 379 ],
+      [ 177, 167, -212.02, 239, 234 ],
+      [ 308, 670, -228.12, 704, 675 ],
+      [ 365, 425, 81.96, 472, 420 ],
+      [ 847, 494, 222.68, 956, 936 ],
+      [ 636, 676, -180.42, 640, 679 ],
+      [ 541, 116, 69.88, 295, 547 ],
+      [ 506, 678, 346.6, 648, 777 ],
+      [ 190, 425, 43.89, 431, 437 ],
+      [ 504, 22, -52.24, 324, 411 ],
+      [ 352, 662, 230.37, 733, 692 ],
+      [ 359, 27, -333.47, 333, 184 ],
+      [ 570, 257, 294.55, 469, 625 ],
+      [ 757, 530, -27.59, 914, 820 ],
+      [ 362, 397, -285.26, 478, 453 ],
+      [ 167, 106, 347.98, 184, 138 ],
+      [ 422, 511, -263.32, 557, 477 ],
+      [ 9, 122, -348.21, 33, 120 ],
+      [ 1014, 264, 49.91, 855, 945 ],
+      [ 565, 642, 70.15, 795, 749 ],
+      [ 1003, 138, -29.48, 940, 613 ],
+      [ 818, 407, -5.06, 849, 477 ],
+      [ 856, 66, 235.38, 539, 740 ],
+      [ 763, 634, 12.1, 879, 779 ],
+      [ 212, 137, -336.25, 249, 210 ],
+      [ 318, 262, -237.7, 390, 407 ],
+      [ 301, 578, 241.1, 650, 541 ],
+      [ 438, 584, 355.3, 483, 617 ],
+      [ 455, 577, -117.24, 720, 667 ],
+      [ 14, 232, -235.53, 198, 141 ],
+      [ 626, 216, -106.74, 386, 660 ],
+      [ 72, 61, 274.4, 65, 76 ],
+      [ 577, 702, 335.87, 812, 876 ],
+      [ 399, 506, 209.55, 596, 635 ],
+      [ 929, 665, 337.4, 1112, 971 ],
+      [ 962, 135, -137.9, 803, 743 ],
+      [ 112, 360, -316.76, 328, 338 ],
+      [ 967, 688, 230.71, 1143, 1183 ],
+      [ 961, 261, 51.08, 806, 911 ],
+      [ 282, 271, 268.25, 278, 288 ],
+      [ 459, 740, -250.03, 852, 683 ],
+      [ 819, 26, -193.37, 802, 213 ],
+      [ 697, 458, -255.25, 620, 790 ],
+      [ 663, 757, 218.88, 990, 1004 ],
+      [ 449, 685, 121.42, 819, 739 ],
+      [ 417, 639, 247.11, 750, 632 ],
+      [ 733, 723, -136.06, 1028, 1028 ],
+      [ 794, 680, -211.41, 1031, 992 ],
+      [ 610, 632, 32.85, 855, 861 ],
+      [ 171, 75, 286.64, 119, 184 ],
+      [ 40, 419, 260.1, 418, 110 ],
+      [ 197, 264, 283.76, 301, 254 ],
+      [ 434, 19, -7.45, 431, 75 ],
+      [ 583, 516, -18.13, 714, 671 ],
+      [ 382, 84, -96.2, 124, 387 ],
+      [ 43, 397, -217.9, 277, 338 ],
+      [ 906, 178, -260.93, 318, 921 ],
+      [ 201, 5, -344.2, 194, 59 ],
+      [ 412, 462, 247.6, 583, 555 ],
+      [ 971, 590, 317.22, 1112, 1092 ],
+      [ 866, 620, -10.88, 966, 772 ],
+      [ 724, 768, 236.57, 1038, 1026 ],
+      [ 616, 325, 253.97, 481, 681 ],
+      [ 93, 761, 17.18, 313, 754 ],
+      [ 580, 280, 95.75, 337, 604 ],
+      [ 955, 311, -252.94, 577, 1002 ],
+      [ 133, 223, -86.78, 229, 145 ],
+      [ 274, 373, -82.53, 404, 319 ],
+      [ 296, 682, 350.52, 402, 721 ],
+      [ 136, 641, 183.43, 172, 647 ],
+      [ 76, 523, 44.45, 420, 426 ],
+      [ 572, 298, 43.57, 619, 610 ],
+      [ 397, 759, 347.43, 551, 827 ],
+      [ 246, 61, 340.77, 251, 139 ],
+      [ 782, 495, -117.54, 799, 921 ],
+      [ 406, 443, 173.94, 450, 482 ],
+      [ 559, 542, -337.71, 723, 713 ],
+      [ 947, 747, 11.49, 1077, 920 ],
+      [ 318, 201, -69.91, 297, 367 ],
+      [ 304, 303, -189.04, 348, 345 ],
+      [ 53, 359, 300.74, 335, 229 ],
+      [ 628, 20, -140.49, 496, 413 ],
+      [ 178, 317, -148.96, 314, 362 ],
+      [ 161, 501, -92.13, 505, 178 ],
+      [ 133, 319, -348.12, 196, 339 ],
+      [ 478, 624, 66.87, 761, 684 ],
+      [ 213, 274, -145.07, 330, 345 ],
+      [ 245, 216, -164.86, 291, 271 ],
+      [ 773, 454, 23.31, 889, 722 ],
+      [ 162, 682, 307.04, 640, 540 ],
+      [ 405, 722, -76.47, 795, 562 ],
+      [ 321, 425, -58.1, 529, 497 ],
+      [ 633, 558, 238.73, 804, 830 ],
+      [ 933, 678, -12.03, 1052, 857 ],
+      [ 290, 10, 286.84, 93, 280 ],
+      [ 307, 368, 151.05, 446, 469 ],
+      [ 914, 527, -312.32, 1005, 1030 ],
+      [ 196, 711, -110.04, 734, 427 ],
+      [ 473, 522, 315.35, 702, 703 ],
+      [ 1019, 643, 234.38, 1115, 1201 ],
+      [ 943, 179, 190.45, 958, 346 ],
+      [ 322, 419, -131.97, 526, 518 ],
+      [ 752, 126, -329.31, 710, 491 ],
+      [ 579, 57, 305.87, 384, 502 ],
+      [ 50, 274, 314.31, 229, 226 ],
+      [ 970, 504, -61.53, 904, 1092 ],
+      [ 673, 422, -287.69, 606, 769 ],
+      [ 741, 568, -341.9, 880, 770 ],
+      [ 72, 155, 147.35, 144, 168 ],
+      [ 9, 150, 30.13, 82, 134 ],
+      [ 854, 89, 197.41, 840, 339 ],
+      [ 613, 331, -130.07, 646, 681 ],
+      [ 937, 126, -12.79, 940, 330 ],
+      [ 981, 560, 40.29, 1110, 1061 ],
+      [ 904, 598, 297.04, 942, 1077 ],
+      [ 839, 557, 49.32, 968, 999 ],
+      [ 239, 293, -275.98, 315, 268 ],
+      [ 342, 80, 256.08, 159, 349 ],
+      [ 368, 134, -319.39, 366, 341 ],
+      [ 66, 141, -179.05, 66, 141 ],
+      [ 620, 13, -95.86, 75, 616 ],
+      [ 389, 472, 213.71, 584, 607 ],
+      [ 716, 407, 331.54, 822, 699 ],
+      [ 186, 374, 136.35, 392, 398 ],
+      [ 755, 284, -23.86, 804, 565 ],
+      [ 666, 145, -222.27, 590, 553 ],
+      [ 224, 324, 52.16, 393, 375 ],
+      [ 343, 580, 127.12, 668, 622 ],
+      [ 196, 88, 252.56, 141, 211 ],
+      [ 253, 137, -336.17, 286, 227 ],
+      [ 511, 602, -324.69, 764, 786 ],
+      [ 886, 125, 117.44, 519, 843 ],
+      [ 678, 662, -221.74, 946, 944 ],
+      [ 638, 33, 128.46, 422, 519 ],
+      [ 320, 599, -326.1, 599, 675 ],
+      [ 798, 330, -191.1, 847, 476 ],
+      [ 994, 498, 111.94, 833, 1107 ],
+      [ 556, 755, -64.69, 919, 825 ],
+      [ 225, 133, 17.12, 254, 193 ],
+      [ 72, 323, 144.73, 245, 304 ],
+      [ 106, 706, -11.75, 246, 712 ],
+      [ 156, 602, 105.1, 621, 306 ],
+      [ 835, 343, 5.2, 862, 417 ],
+      [ 8, 53, 35.77, 37, 47 ],
+      [ 702, 292, -122.9, 625, 747 ],
+      [ 751, 122, 186.23, 758, 201 ],
+      [ 991, 99, -67.53, 468, 953 ],
+      [ 638, 516, -80.16, 616, 716 ],
+      [ 34, 684, 44.43, 503, 511 ],
+      [ 570, 737, 346.85, 722, 847 ],
+      [ 264, 48, 288.03, 126, 266 ],
+      [ 760, 165, 132.14, 631, 673 ],
+      [ 397, 23, -267.13, 42, 396 ],
+      [ 916, 28, -218.24, 736, 587 ],
+      [ 455, 555, 55.17, 715, 690 ],
+      [ 792, 349, 169.23, 843, 489 ],
+      [ 545, 324, 261.67, 398, 585 ],
+      [ 961, 34, 24.65, 887, 431 ],
+      [ 335, 60, -54.7, 241, 308 ],
+      [ 910, 487, -83.82, 580, 956 ],
+      [ 892, 685, -38.88, 1123, 1092 ],
+      [ 789, 486, 115.43, 777, 920 ],
+      [ 465, 15, 136.55, 347, 329 ],
+      [ 597, 702, 162.75, 778, 846 ],
+      [ 799, 275, -37.53, 800, 704 ],
+      [ 365, 101, 289.64, 216, 377 ],
+      [ 94, 510, -126.88, 463, 380 ],
+      [ 978, 462, -95.12, 546, 1014 ],
+      [ 501, 713, -39.78, 840, 868 ],
+      [ 936, 628, -303.76, 1042, 1127 ],
+      [ 304, 528, 337.71, 480, 604 ],
+      [ 761, 352, 72.83, 560, 831 ],
+      [ 413, 701, 86.73, 723, 452 ],
+      [ 95, 380, 24.59, 244, 385 ],
+      [ 839, 211, 282.2, 382, 865 ],
+      [ 274, 485, -343.38, 401, 543 ],
+      [ 173, 555, 134.13, 518, 509 ],
+      [ 505, 520, -152.84, 685, 692 ],
+      [ 882, 128, -204.43, 856, 480 ],
+      [ 313, 61, -336.21, 311, 182 ],
+      [ 393, 289, 158.67, 471, 410 ],
+      [ 361, 92, -231.78, 295, 339 ],
+      [ 977, 401, -295.42, 781, 1054 ],
+      [ 588, 472, 60.64, 699, 743 ],
+      [ 111, 333, 258.13, 347, 175 ],
+      [ 1, 538, -7.75, 72, 533 ],
+      [ 24, 668, -207.79, 332, 601 ],
+      [ 727, 278, 279.69, 395, 763 ],
+      [ 1022, 171, -320.66, 898, 779 ],
+      [ 219, 406, -263.54, 427, 262 ],
+      [ 253, 700, 7.25, 338, 725 ],
+      [ 991, 203, 92.81, 251, 998 ],
+      [ 149, 167, -251.44, 205, 193 ],
+      [ 241, 608, 191.06, 352, 642 ],
+      [ 839, 691, -216.96, 1085, 1055 ],
+      [ 694, 691, 287.01, 863, 865 ],
+      [ 171, 709, 192.56, 319, 728 ],
+      [ 388, 486, -267.17, 504, 410 ],
+      [ 273, 484, -107.27, 542, 403 ],
+      [ 329, 648, 272.46, 660, 356 ],
+      [ 466, 69, 208.26, 442, 280 ],
+      [ 989, 44, -322.16, 808, 641 ],
+      [ 609, 155, -165.97, 627, 296 ],
+      [ 763, 335, -316.43, 783, 768 ],
+      [ 523, 196, 331.05, 551, 425 ],
+      [ 726, 716, 258.65, 843, 851 ],
+      [ 623, 76, 203, 602, 312 ],
+      [ 384, 366, -61.76, 502, 511 ],
+      [ 516, 571, -328.46, 738, 756 ],
+      [ 876, 49, 278.47, 176, 873 ],
+      [ 751, 399, 342.82, 834, 602 ],
+      [ 536, 372, -336.75, 639, 553 ],
+      [ 589, 60, -191.98, 588, 180 ],
+      [ 865, 632, 121.69, 992, 1067 ],
+      [ 927, 256, 304.9, 739, 906 ],
+      [ 886, 32, 255.78, 247, 865 ],
+      [ 742, 499, 326.58, 893, 824 ],
+      [ 519, 19, -50.51, 344, 412 ],
+      [ 943, 406, -235.77, 866, 1006 ],
+      [ 988, 294, -189.88, 1023, 458 ],
+      [ 872, 89, 183.64, 875, 143 ],
+      [ 847, 491, -187.97, 906, 602 ],
+      [ 880, 164, -131.9, 708, 763 ],
+      [ 95, 45, -259.59, 61, 100 ],
+      [ 780, 740, -19.97, 985, 962 ],
+      [ 702, 636, 10, 801, 747 ],
+      [ 554, 424, -242.69, 631, 686 ],
+      [ 506, 45, -225.48, 386, 391 ],
+      [ 946, 752, 154.49, 1177, 1085 ],
+      [ 99, 724, -290.08, 713, 341 ],
+      [ 341, 610, -206.71, 578, 697 ],
+      [ 90, 477, 252.85, 481, 225 ],
+      [ 335, 368, -313.57, 497, 496 ],
+      [ 659, 440, -271.91, 461, 673 ],
+      [ 802, 257, -298.62, 610, 827 ],
+      [ 262, 15, 297.37, 132, 239 ],
+      [ 788, 430, -25.32, 895, 726 ],
+      [ 955, 41, 16.33, 928, 307 ],
+      [ 122, 750, 0.56, 128, 751 ],
+      [ 854, 56, -41.09, 679, 603 ],
+      [ 953, 312, -190.15, 993, 473 ],
+      [ 147, 379, 256.2, 402, 231 ],
+      [ 1019, 630, -118.81, 1042, 1195 ],
+      [ 61, 356, 292.86, 350, 194 ],
+      [ 186, 189, -187.11, 207, 210 ],
+      [ 274, 385, -173.82, 312, 411 ],
+      [ 184, 208, 228.5, 276, 274 ],
+      [ 660, 155, 266.41, 195, 667 ],
+      [ 172, 247, 249.42, 290, 247 ],
+      [ 684, 119, 301.76, 460, 644 ],
+      [ 114, 65, -126.46, 118, 129 ],
+      [ 356, 175, 228.43, 366, 381 ],
+      [ 208, 171, 98.43, 199, 229 ],
+      [ 551, 216, -288.35, 378, 590 ],
+      [ 456, 356, -111.48, 496, 553 ],
+      [ 701, 560, 249.07, 772, 853 ],
+      [ 966, 698, -276.73, 806, 1041 ],
+      [ 779, 425, -131.54, 833, 864 ],
+      [ 646, 554, 99.15, 649, 724 ],
+      [ 489, 299, 209.84, 572, 501 ],
+      [ 406, 384, 270.44, 386, 408 ],
+      [ 738, 650, -285.75, 826, 886 ],
+      [ 551, 38, -125.87, 352, 467 ],
+      [ 179, 451, 76.5, 480, 279 ],
+      [ 281, 24, -310.54, 200, 229 ],
+      [ 634, 550, 214.41, 833, 811 ],
+      [ 477, 506, 148.69, 670, 678 ],
+      [ 595, 322, -173, 628, 391 ],
+      [ 920, 38, 345.67, 899, 264 ],
+      [ 549, 404, -94.74, 447, 579 ],
+      [ 335, 708, 264.69, 735, 398 ],
+      [ 208, 494, 153.81, 404, 533 ],
+      [ 314, 138, 188.81, 330, 183 ],
+      [ 647, 272, -109.12, 467, 699 ],
+      [ 243, 482, -87.11, 492, 266 ],
+      [ 314, 190, -292.29, 295, 362 ],
+      [ 107, 547, 181.54, 120, 548 ],
+      [ 830, 225, -237.15, 639, 818 ],
+      [ 72, 146, -201.94, 121, 160 ],
+      [ 52, 557, 176.6, 84, 558 ],
+      [ 429, 41, 120.19, 250, 390 ],
+      [ 293, 196, -137.62, 347, 341 ],
+      [ 1024, 431, -8.38, 1075, 575 ],
+      [ 781, 147, 246.32, 447, 773 ],
+      [ 113, 330, -21.87, 226, 348 ],
+      [ 502, 564, 155.6, 690, 720 ],
+      [ 598, 644, -52.24, 874, 866 ],
+      [ 344, 498, 157.9, 505, 589 ],
+      [ 519, 552, 294.48, 716, 701 ],
+      [ 744, 590, 96.63, 671, 806 ],
+      [ 483, 144, 134.21, 439, 445 ],
+      [ 142, 363, 317.65, 348, 363 ],
+      [ 458, 363, 1.19, 465, 372 ],
+      [ 958, 180, 138.96, 840, 764 ],
+      [ 796, 265, -272.53, 300, 807 ],
+      [ 253, 641, 256.2, 681, 397 ],
+      [ 987, 321, 139.53, 958, 883 ],
+      [ 400, 578, -113.84, 689, 598 ],
+      [ 113, 199, -316.9, 218, 222 ],
+      [ 20, 756, 236.02, 637, 438 ],
+      [ 669, 350, -349.85, 720, 462 ],
+      [ 348, 456, -9.77, 418, 508 ],
+      [ 288, 31, 330.03, 263, 170 ],
+      [ 801, 749, -221.64, 1096, 1091 ],
+      [ 487, 578, 26.13, 692, 733 ],
+      [ 611, 768, -93.8, 805, 659 ],
+      [ 464, 739, 206.31, 742, 866 ],
+      [ 150, 271, 27.98, 259, 309 ],
+      [ 500, 355, 214.08, 612, 573 ],
+      [ 562, 370, 202.66, 660, 556 ],
+      [ 385, 103, -189.69, 396, 165 ],
+      [ 400, 364, 237.25, 521, 532 ],
+      [ 898, 579, 265.83, 641, 936 ],
+      [ 855, 412, 247.68, 704, 945 ],
+      [ 28, 8, 69.11, 16, 29 ],
+      [ 577, 467, 68.26, 647, 708 ],
+      [ 956, 46, 40.72, 754, 658 ],
+      [ 737, 158, 294.26, 445, 736 ],
+      [ 265, 533, -93.23, 545, 293 ],
+      [ 57, 186, 252.73, 193, 108 ],
+      [ 858, 475, 348.77, 933, 633 ],
+      [ 76, 6, -30.9, 67, 44 ],
+      [ 925, 679, -208.65, 1137, 1038 ],
+      [ 791, 552, 176.74, 820, 594 ],
+      [ 632, 573, 184.2, 671, 616 ],
+      [ 218, 237, -98.78, 266, 250 ],
+      [ 827, 186, -56.01, 615, 789 ],
+      [ 373, 738, 92.05, 751, 397 ],
+      [ 279, 169, -128.47, 304, 322 ],
+      [ 659, 211, 45.56, 612, 618 ],
+      [ 506, 86, -229.86, 392, 440 ],
+      [ 490, 143, -224.56, 449, 444 ],
+      [ 958, 68, -308.34, 647, 793 ],
+      [ 150, 661, 208.86, 449, 650 ],
+      [ 913, 367, 25.37, 981, 723 ],
+      [ 663, 530, 247.34, 743, 814 ],
+      [ 10, 381, -299.04, 337, 193 ],
+      [ 443, 661, -327.45, 729, 795 ],
+      [ 62, 102, -169.91, 78, 109 ],
+      [ 391, 596, 27.65, 623, 709 ],
+      [ 968, 207, 107.88, 494, 984 ],
+      [ 129, 574, 241.1, 564, 388 ],
+      [ 321, 524, 304.55, 613, 561 ],
+      [ 395, 636, 204.06, 618, 741 ],
+      [ 180, 553, -172.71, 247, 570 ],
+      [ 728, 281, 323.36, 751, 659 ],
+      [ 568, 289, -39.48, 621, 584 ],
+      [ 655, 620, -140.52, 898, 894 ],
+      [ 701, 666, -45.48, 965, 966 ],
+      [ 971, 191, -207.62, 949, 618 ],
+      [ 499, 149, -14.17, 518, 266 ],
+      [ 140, 245, -196.4, 203, 273 ],
+      [ 995, 485, 294.81, 856, 1107 ],
+      [ 916, 13, 170.8, 906, 158 ],
+      [ 694, 148, -31.69, 667, 490 ],
+      [ 961, 694, 231.56, 1140, 1182 ],
+      [ 908, 351, -218.24, 930, 837 ],
+      [ 340, 74, -357.1, 343, 91 ],
+      [ 652, 599, 267.04, 630, 681 ],
+      [ 76, 559, -274.31, 562, 117 ],
+      [ 293, 164, -135.55, 323, 321 ],
+      [ 784, 269, 93.44, 316, 797 ],
+      [ 1017, 247, -171.9, 1040, 387 ],
+      [ 924, 165, -159.9, 923, 471 ],
+      [ 655, 686, -21.69, 861, 879 ],
+      [ 98, 638, -91.92, 640, 117 ],
+      [ 939, 551, 236.78, 974, 1086 ],
+      [ 117, 38, 305.36, 97, 117 ],
+      [ 121, 527, 146.37, 392, 505 ],
+      [ 1013, 583, -50.09, 1095, 1151 ],
+      [ 111, 34, 103.63, 59, 114 ],
+      [ 430, 622, 355.41, 477, 654 ],
+      [ 51, 616, -133.67, 480, 460 ],
+      [ 318, 541, 20.97, 490, 618 ],
+      [ 603, 264, -56.65, 551, 648 ],
+      [ 60, 337, -179.21, 63, 336 ],
+      [ 441, 274, 336.64, 512, 426 ],
+      [ 266, 361, -348.6, 331, 406 ],
+      [ 189, 452, 144.59, 416, 476 ],
+      [ 909, 443, -29.3, 1008, 830 ],
+      [ 325, 526, 2.12, 343, 538 ],
+      [ 985, 80, -135.32, 755, 748 ],
+      [ 978, 118, -278.03, 253, 984 ],
+      [ 276, 356, 228.81, 448, 440 ],
+      [ 818, 40, -244.03, 394, 752 ],
+      [ 225, 85, 71.79, 151, 240 ],
+      [ 483, 416, 327.8, 629, 609 ],
+      [ 449, 615, -54.23, 760, 723 ],
+      [ 466, 756, -351.4, 573, 816 ],
+      [ 159, 669, 63.34, 669, 442 ],
+      [ 630, 145, -164.34, 644, 309 ],
+      [ 121, 115, -89.96, 114, 120 ],
+      [ 440, 80, 19.91, 440, 224 ],
+      [ 557, 287, 353.35, 585, 349 ],
+      [ 370, 132, -329.54, 385, 301 ],
+      [ 535, 301, -250.42, 463, 604 ],
+      [ 125, 663, 138.77, 531, 580 ],
+      [ 79, 231, -5.19, 98, 237 ],
+      [ 514, 580, -16.94, 659, 704 ],
+      [ 526, 699, -110.11, 835, 732 ],
+      [ 105, 403, 25.22, 266, 409 ],
+      [ 383, 493, 132.67, 621, 614 ],
+      [ 767, 55, 207.66, 704, 404 ],
+      [ 283, 472, -243.5, 548, 463 ],
+      [ 274, 749, -119.81, 785, 608 ],
+      [ 317, 382, 162.07, 419, 459 ],
+      [ 473, 476, 62.93, 639, 638 ],
+      [ 158, 535, 279.41, 552, 242 ],
+      [ 663, 152, 102.91, 296, 679 ],
+      [ 127, 547, 38.04, 437, 509 ],
+      [ 482, 625, -304.52, 788, 751 ],
+      [ 6, 143, 157.38, 60, 133 ],
+      [ 707, 718, 208.39, 961, 967 ],
+      [ 490, 162, -69.52, 322, 516 ],
+      [ 656, 367, -87.51, 394, 671 ],
+      [ 997, 605, 270.38, 610, 1000 ],
+      [ 716, 191, -4.08, 727, 241 ],
+      [ 293, 309, -223.07, 425, 425 ],
+      [ 179, 38, -80.84, 65, 182 ],
+      [ 837, 133, -288.78, 395, 835 ],
+      [ 379, 494, 296.46, 609, 559 ],
+      [ 458, 498, -289.49, 621, 597 ],
+      [ 170, 260, -336.57, 258, 306 ],
+      [ 978, 627, -184.85, 1027, 706 ],
+      [ 367, 351, 158.99, 468, 458 ],
+      [ 755, 330, 5.41, 782, 400 ],
+      [ 628, 99, 184.02, 632, 142 ],
+      [ 110, 319, -246.44, 335, 227 ],
+      [ 304, 452, -211.14, 494, 543 ],
+      [ 702, 312, -87.03, 347, 717 ],
+      [ 803, 596, -344.23, 934, 792 ],
+      [ 712, 171, 122.5, 526, 691 ],
+      [ 813, 298, -354.2, 838, 378 ],
+      [ 846, 263, 233.36, 714, 834 ],
+      [ 71, 539, -158.35, 263, 526 ],
+      [ 809, 337, 150.89, 870, 686 ],
+      [ 305, 39, 243.13, 171, 289 ],
+      [ 55, 121, -178.71, 56, 121 ],
+      [ 216, 349, 244.81, 406, 343 ],
+      [ 428, 106, -183.44, 433, 130 ],
+      [ 816, 708, -345.39, 968, 890 ],
+      [ 839, 474, -185.56, 881, 552 ],
+      [ 501, 315, 93.42, 343, 518 ],
+      [ 509, 181, 339.95, 539, 344 ],
+      [ 329, 234, 124.48, 379, 402 ],
+      [ 616, 73, -280.47, 183, 618 ],
+      [ 318, 301, -244.54, 408, 415 ],
+      [ 152, 342, -131.81, 355, 340 ],
+      [ 410, 504, 194.66, 523, 590 ],
+      [ 246, 56, 294.02, 150, 247 ],
+      [ 497, 668, 237.51, 828, 777 ],
+      [ 518, 529, -38.43, 733, 735 ],
+      [ 766, 136, 256.73, 306, 775 ],
+      [ 387, 517, -293.6, 628, 561 ],
+      [ 358, 763, -74.25, 830, 551 ],
+      [ 23, 457, -6.24, 71, 456 ],
+      [ 137, 695, 275.85, 703, 207 ],
+      [ 301, 41, -123.98, 201, 271 ],
+      [ 625, 348, 347.85, 682, 471 ],
+      [ 390, 532, -319.83, 641, 658 ],
+      [ 296, 137, 306, 283, 320 ],
+      [ 122, 525, 90, 525, 122 ],
+      [ 579, 331, 210, 666, 575 ],
+      [ 433, 621, -30, 684, 754 ],
+      [ 527, 121, -30, 516, 368 ],
+      [ 933, 138, -330, 877, 586 ],
+      [ 413, 240, 330, 476, 414 ],
+      [ 293, 466, -360, 293, 466 ],
+      [ 629, 166, -30, 626, 458 ],
+      [ 611, 458, -270, 458, 611 ],
+      [ 668, 680, -120, 922, 917 ],
+      [ 592, 3, -360, 592, 3 ],
+      [ 195, 438, -30, 386, 476 ],
+      [ 1003, 762, -180, 1003, 762 ],
+      [ 451, 389, -60, 561, 584 ],
+      [ 917, 320, 60, 735, 954 ],
+      [ 967, 629, 300, 1027, 1151 ],
+      [ 920, 80, 0, 920, 80 ],
+      [ 926, 551, 150, 1076, 938 ],
+      [ 372, 242, -150, 442, 395 ],
+      [ 526, 742, -240, 905, 825 ],
+      [ 862, 418, -210, 955, 791 ],
+      [ 873, 563, 210, 1037, 923 ],
+      [ 300, 547, 210, 532, 623 ],
+      [ 554, 117, -180, 554, 117 ],
+      [ 969, 36, 150, 857, 514 ],
+      [ 544, 761, 0, 544, 761 ],
+      [ 438, 683, 90, 683, 438 ],
+      [ 953, 609, -120, 1002, 1129 ],
+      [ 664, 120, 90, 120, 664 ],
+      [ 986, 514, 90, 514, 986 ],
+      [ 167, 392, -270, 392, 167 ],
+      [ 375, 279, 300, 428, 463 ],
+      [ 142, 503, 60, 506, 373 ],
+      [ 923, 151, 180, 923, 151 ],
+      [ 175, 109, 210, 205, 180 ],
+      [ 876, 517, 210, 1016, 885 ],
+      [ 368, 78, 120, 251, 356 ],
+      [ 990, 24, -30, 868, 516 ],
+      [ 299, 522, 90, 522, 299 ],
+      [ 954, 493, -150, 1072, 903 ],
+      [ 549, 618, 210, 783, 808 ],
+      [ 701, 130, -240, 463, 671 ],
+      [ 579, 236, 240, 492, 618 ],
+      [ 162, 160, -360, 162, 160 ],
+      [ 925, 291, -270, 291, 925 ],
+      [ 711, 180, 240, 510, 704 ],
+      [ 488, 455, 330, 649, 638 ],
+      [ 150, 429, 330, 343, 447 ],
+      [ 625, 653, 90, 653, 625 ],
+      [ 235, 600, -180, 235, 600 ],
+      [ 529, 244, -300, 475, 580 ],
+      [ 322, 1, -180, 322, 1 ],
+      [ 487, 435, 30, 638, 620 ],
+      [ 298, 556, 210, 535, 630 ],
+      [ 309, 482, -270, 482, 309 ],
+      [ 466, 246, -90, 246, 466 ],
+      [ 287, 612, 360, 287, 612 ],
+      [ 211, 724, 30, 544, 732 ],
+      [ 167, 425, -90, 425, 167 ],
+      [ 818, 600, -270, 600, 818 ],
+      [ 77, 229, -30, 180, 236 ],
+      [ 160, 470, -30, 372, 487 ],
+      [ 416, 67, -330, 393, 265 ],
+      [ 987, 289, 210, 998, 742 ],
+      [ 747, 521, -90, 521, 747 ],
+      [ 894, 101, 150, 824, 532 ],
+      [ 256, 316, 0, 256, 316 ],
+      [ 225, 474, -30, 430, 522 ],
+      [ 765, 599, -360, 765, 599 ],
+      [ 128, 444, 210, 331, 448 ],
+      [ 291, 502, -300, 580, 503 ],
+      [ 778, 621, 150, 983, 925 ],
+      [ 241, 165, 210, 290, 262 ],
+      [ 284, 137, -270, 137, 284 ],
+      [ 44, 697, 240, 625, 386 ],
+      [ 446, 599, 360, 446, 599 ],
+      [ 152, 23, -90, 23, 152 ],
+      [ 673, 191, 360, 673, 191 ],
+      [ 110, 764, 210, 476, 716 ],
+      [ 113, 92, -120, 135, 142 ],
+      [ 916, 309, -360, 916, 309 ],
+      [ 999, 124, 240, 605, 926 ],
+      [ 683, 305, -360, 683, 305 ],
+      [ 456, 517, -210, 652, 674 ],
+      [ 614, 550, -300, 782, 806 ],
+      [ 441, 116, 300, 319, 439 ],
+      [ 403, 230, 300, 399, 464 ],
+      [ 786, 734, -240, 1028, 1046 ],
+      [ 777, 48, -270, 48, 777 ],
+      [ 543, 133, -180, 543, 133 ],
+      [ 899, 52, 150, 804, 493 ],
+      [ 900, 32, 270, 32, 900 ],
+      [ 704, 544, -210, 881, 821 ],
+      [ 728, 118, 300, 464, 689 ],
+      [ 935, 577, 90, 577, 935 ],
+      [ 22, 140, 210, 88, 131 ],
+      [ 931, 441, -330, 1026, 847 ],
+      [ 846, 263, -360, 846, 263 ],
+      [ 1015, 77, -300, 574, 917 ],
+      [ 154, 484, -180, 154, 484 ],
+      [ 439, 390, -120, 556, 574 ],
+      [ 112, 297, -90, 297, 112 ],
+      [ 974, 56, -300, 534, 871 ],
+      [ 194, 602, -210, 469, 616 ],
+      [ 103, 535, 360, 103, 535 ],
+      [ 744, 551, -240, 848, 918 ],
+      [ 517, 481, 180, 517, 481 ],
+      [ 595, 348, -300, 598, 689 ],
+      [ 627, 341, -240, 608, 711 ],
+      [ 723, 456, 240, 755, 853 ],
+      [ 996, 17, -150, 870, 512 ],
+      [ 312, 101, 150, 320, 241 ],
+      [ 695, 63, 210, 632, 401 ],
+      [ 779, 208, 60, 569, 778 ],
+      [ 1018, 285, -180, 1018, 285 ],
+      [ 1003, 75, 360, 1003, 75 ],
+      [ 149, 462, 90, 462, 149 ],
+      [ 907, 140, -330, 855, 574 ],
+      [ 991, 610, 0, 991, 610 ],
+      [ 153, 384, -300, 409, 324 ],
+      [ 984, 363, -300, 805, 1033 ],
+      [ 287, 597, -180, 287, 597 ],
+      [ 1008, 350, -120, 806, 1046 ],
+      [ 780, 165, 60, 532, 757 ],
+      [ 331, 161, 360, 331, 161 ],
+      [ 594, 144, -330, 586, 421 ],
+      [ 568, 256, 120, 505, 618 ],
+      [ 160, 168, 270, 168, 160 ],
+      [ 214, 143, 90, 143, 214 ],
+      [ 722, 257, -270, 257, 722 ],
+      [ 813, 227, 90, 227, 813 ],
+      [ 926, 441, -90, 441, 926 ],
+      [ 149, 429, 240, 445, 343 ],
+      [ 480, 246, -330, 538, 452 ],
+      [ 64, 493, -180, 64, 493 ],
+      [ 26, 171, -30, 107, 161 ],
+      [ 87, 597, 210, 373, 559 ],
+      [ 764, 716, 360, 764, 716 ],
+      [ 602, 108, -240, 394, 574 ],
+      [ 229, 649, 0, 229, 649 ],
+      [ 367, 490, 240, 606, 561 ],
+      [ 989, 416, -90, 416, 989 ],
+      [ 357, 528, 330, 572, 635 ],
+      [ 190, 119, -180, 190, 119 ],
+      [ 243, 167, 300, 265, 293 ],
+      [ 510, 186, -270, 186, 510 ],
+      [ 968, 251, 300, 699, 963 ],
+      [ 743, 55, 240, 418, 670 ],
+      [ 741, 506, 360, 741, 506 ],
+      [ 928, 678, 240, 1050, 1141 ],
+      [ 434, 185, -30, 467, 377 ],
+      [ 241, 158, 360, 241, 158 ],
+      [ 636, 425, 150, 762, 684 ],
+      [ 578, 568, 240, 780, 783 ],
+      [ 847, 750, -330, 1108, 1073 ],
+      [ 750, 364, -150, 830, 689 ],
+      [ 880, 322, 90, 322, 880 ],
+      [ 780, 111, 150, 730, 484 ],
+      [ 610, 666, -120, 881, 860 ],
+      [ 584, 594, -210, 802, 804 ],
+      [ 398, 151, -30, 419, 330 ],
+      [ 864, 331, 120, 718, 912 ],
+      [ 861, 39, -210, 764, 463 ],
+      [ 536, 472, 360, 536, 472 ],
+      [ 370, 340, 330, 489, 479 ],
+      [ 425, 134, -60, 327, 435 ],
+      [ 728, 25, 240, 385, 642 ],
+      [ 341, 610, 360, 341, 610 ],
+      [ 27, 299, 270, 299, 27 ],
+      [ 388, 737, 90, 737, 388 ],
+      [ 628, 267, 240, 544, 676 ],
+      [ 90, 147, -180, 90, 147 ],
+      [ 785, 24, -150, 690, 412 ],
+      [ 1023, 426, 300, 879, 1098 ],
+      [ 994, 703, -120, 1105, 1211 ],
+      [ 939, 253, 30, 939, 688 ],
+      [ 344, 31, 60, 198, 312 ],
+      [ 179, 287, -120, 337, 298 ],
+      [ 160, 307, 180, 160, 307 ],
+      [ 6, 597, 150, 303, 518 ],
+      [ 643, 300, -330, 706, 581 ],
+      [ 456, 367, -210, 577, 544 ],
+      [ 710, 188, -180, 710, 188 ],
+      [ 1016, 187, 240, 669, 972 ],
+      [ 927, 164, 180, 927, 164 ],
+      [ 267, 99, -330, 280, 219 ],
+      [ 808, 357, -300, 712, 877 ],
+      [ 358, 491, -30, 555, 604 ],
+      [ 721, 611, 270, 611, 721 ],
+      [ 458, 615, 120, 761, 702 ],
+      [ 153, 328, -330, 296, 360 ],
+      [ 204, 670, 30, 511, 681 ],
+      [ 449, 434, 210, 604, 599 ],
+      [ 725, 428, -360, 725, 428 ],
+      [ 545, 355, -210, 648, 578 ],
+      [ 277, 554, -120, 617, 515 ],
+      [ 345, 392, 240, 510, 493 ],
+      [ 455, 660, -30, 723, 799 ],
+      [ 946, 432, -180, 946, 432 ],
+      [ 822, 7, -330, 714, 416 ],
+      [ 469, 122, -30, 466, 340 ],
+      [ 516, 274, -120, 494, 582 ],
+      [ 27, 611, 300, 541, 328 ],
+      [ 812, 386, -30, 895, 740 ],
+      [ 822, 27, 330, 724, 434 ],
+      [ 24, 234, 120, 214, 136 ],
+      [ 383, 492, -270, 492, 383 ],
+      [ 194, 65, -360, 194, 65 ],
+      [ 658, 7, 60, 334, 572 ],
+      [ 912, 623, 60, 995, 1100 ],
+      [ 961, 206, 180, 961, 206 ],
+      [ 424, 593, -300, 725, 663 ],
+      [ 778, 613, 300, 918, 979 ],
+      [ 687, 454, -60, 735, 821 ],
+      [ 142, 302, -60, 331, 273 ],
+      [ 69, 320, 180, 69, 320 ],
+      [ 734, 607, -90, 607, 734 ],
+      [ 898, 752, -30, 1152, 1100 ],
+      [ 916, 477, -30, 1031, 871 ],
+      [ 487, 393, -150, 617, 582 ],
+      [ 66, 346, 30, 230, 332 ],
+      [ 832, 663, -120, 989, 1051 ],
+      [ 938, 478, -300, 882, 1051 ],
+      [ 834, 225, 150, 834, 610 ],
+      [ 221, 331, -300, 397, 356 ],
+      [ 666, 382, 0, 666, 382 ],
+      [ 398, 165, -150, 426, 341 ],
+      [ 786, 70, -150, 714, 453 ],
+      [ 236, 757, 300, 772, 582 ],
+      [ 718, 353, -60, 663, 797 ],
+      [ 1006, 403, 270, 403, 1006 ],
+      [ 545, 258, 180, 545, 258 ],
+      [ 874, 193, -120, 603, 852 ],
+      [ 996, 51, 120, 541, 886 ],
+      [ 699, 216, -330, 713, 536 ],
+      [ 805, 715, 60, 1021, 1054 ],
+      [ 312, 245, 210, 392, 367 ],
+      [ 628, 66, 270, 66, 628 ],
+      [ 922, 242, 270, 242, 922 ],
+      [ 827, 12, -120, 422, 721 ],
+      [ 231, 766, 270, 766, 231 ],
+      [ 95, 407, -240, 399, 284 ],
+      [ 842, 294, -60, 674, 876 ],
+      [ 178, 272, 0, 178, 272 ],
+      [ 838, 28, 210, 738, 442 ],
+      [ 914, 631, 150, 1106, 1001 ],
+      [ 476, 97, -360, 476, 97 ],
+      [ 257, 567, -300, 619, 505 ],
+      [ 131, 490, -60, 488, 358 ],
+      [ 1013, 342, -60, 801, 1048 ],
+      [ 317, 515, -60, 603, 531 ],
+      [ 157, 585, 360, 157, 585 ],
+      [ 341, 448, -120, 557, 518 ],
+      [ 781, 581, 150, 966, 892 ],
+      [ 265, 441, 180, 265, 441 ],
+      [ 35, 359, 30, 209, 328 ],
+      [ 757, 716, 150, 1013, 997 ],
+      [ 782, 141, -60, 511, 747 ],
+      [ 893, 238, -330, 892, 652 ],
+      [ 302, 230, 0, 302, 230 ],
+      [ 752, 467, -240, 779, 883 ],
+      [ 174, 585, 330, 442, 594 ],
+      [ 138, 72, 0, 138, 72 ],
+      [ 492, 658, -180, 492, 658 ],
+      [ 185, 88, 270, 88, 185 ],
+      [ 939, 113, -150, 869, 566 ],
+      [ 487, 681, -180, 487, 681 ],
+      [ 163, 499, -60, 512, 390 ],
+      [ 594, 400, 180, 594, 400 ],
+      [ 655, 626, -360, 655, 626 ],
+      [ 148, 422, 120, 438, 338 ],
+      [ 325, 552, -60, 639, 557 ],
+      [ 259, 655, 0, 259, 655 ],
+      [ 789, 255, -120, 614, 810 ],
+      [ 46, 394, -30, 235, 364 ],
+      [ 915, 330, 90, 330, 915 ],
+      [ 214, 695, 0, 214, 695 ],
+      [ 466, 48, -270, 48, 466 ],
+      [ 906, 494, 120, 880, 1030 ],
+      [ 638, 217, 0, 638, 217 ],
+      [ 676, 327, -360, 676, 327 ],
+      [ 312, 571, 180, 312, 571 ],
+      [ 727, 765, 90, 765, 727 ],
+      [ 214, 588, 330, 478, 616 ],
+      [ 576, 622, -30, 808, 827 ],
+      [ 31, 540, 270, 540, 31 ],
+      [ 661, 701, 210, 922, 936 ],
+      [ 149, 282, 270, 282, 149 ],
+      [ 302, 193, 0, 302, 193 ],
+      [ 987, 671, 210, 1189, 1073 ],
+      [ 459, 410, -240, 584, 601 ],
+      [ 492, 644, 330, 747, 804 ],
+      [ 236, 421, 330, 414, 483 ],
+      [ 853, 581, 150, 1028, 928 ],
+      [ 785, 245, 0, 785, 245 ],
+      [ 217, 268, -210, 321, 339 ],
+      [ 90, 763, -300, 705, 458 ],
+      [ 888, 107, 0, 888, 107 ],
+      [ 726, 333, 180, 726, 333 ],
+      [ 198, 305, 90, 305, 198 ],
+      [ 983, 649, -270, 649, 983 ],
+      [ 155, 250, 360, 155, 250 ],
+      [ 89, 427, 30, 290, 414 ],
+      [ 17, 298, -150, 162, 265 ],
+      [ 729, 118, 90, 118, 729 ],
+      [ 223, 280, 330, 332, 353 ],
+      [ 436, 347, 330, 550, 519 ],
+      [ 558, 244, -300, 489, 605 ],
+      [ 32, 20, 0, 32, 20 ],
+      [ 787, 169, 300, 538, 765 ],
+      [ 387, 137, 180, 387, 137 ],
+      [ 534, 253, -330, 588, 485 ],
+      [ 514, 320, 90, 320, 514 ],
+      [ 31, 332, -360, 31, 332 ],
+      [ 321, 111, -240, 256, 331 ],
+      [ 936, 277, 30, 948, 707 ],
+      [ 884, 604, 360, 884, 604 ],
+      [ 825, 254, -150, 840, 631 ],
+      [ 907, 278, -120, 693, 923 ],
+      [ 408, 100, 30, 403, 290 ],
+      [ 315, 390, 180, 315, 390 ],
+      [ 62, 22, -330, 64, 49 ],
+      [ 141, 407, -30, 325, 422 ],
+      [ 789, 429, 300, 765, 897 ],
+      [ 808, 670, -330, 1034, 983 ],
+      [ 984, 603, -60, 1012, 1153 ],
+      [ 509, 498, -240, 685, 688 ],
+      [ 496, 349, 30, 603, 549 ],
+      [ 808, 260, 300, 627, 829 ],
+      [ 122, 566, -360, 122, 566 ],
+      [ 684, 33, 30, 608, 370 ],
+      [ 405, 79, 30, 389, 270 ],
+      [ 463, 185, -330, 492, 391 ],
+      [ 947, 8, 90, 8, 947 ],
+      [ 850, 614, 0, 850, 614 ],
+      [ 899, 584, -150, 1069, 954 ],
+      [ 294, 197, 330, 352, 318 ],
+      [ 493, 568, -90, 568, 493 ],
+      [ 7, 406, 180, 7, 406 ],
+      [ 914, 497, -30, 1039, 887 ],
+      [ 930, 242, 0, 930, 242 ],
+      [ 440, 546, 90, 546, 440 ],
+      [ 1002, 125, 270, 125, 1002 ],
+      [ 58, 67, 270, 67, 58 ],
+      [ 710, 703, 120, 963, 964 ],
+      [ 205, 609, -60, 628, 481 ],
+      [ 505, 61, 120, 305, 466 ],
+      [ 445, 431, -60, 594, 600 ],
+      [ 848, 435, 330, 951, 801 ],
+      [ 574, 352, 60, 591, 673 ],
+      [ 29, 281, 300, 256, 165 ],
+      [ 552, 611, 90, 611, 552 ],
+      [ 155, 594, 210, 430, 590 ],
+      [ 4, 637, 270, 637, 4 ],
+      [ 887, 401, 210, 968, 789 ],
+      [ 539, 555, 60, 750, 743 ],
+      [ 968, 165, 120, 626, 919 ],
+      [ 635, 498, -210, 798, 747 ],
+      [ 36, 366, 210, 213, 334 ],
+      [ 1001, 28, -210, 880, 523 ],
+      [ 580, 49, 60, 331, 526 ],
+      [ 481, 463, -90, 463, 481 ],
+      [ 85, 579, -240, 543, 361 ],
+      [ 878, 581, 360, 878, 581 ],
+      [ 735, 478, 0, 735, 478 ],
+      [ 506, 113, -210, 494, 349 ],
+      [ 64, 71, -30, 90, 93 ],
+      [ 728, 547, -300, 837, 903 ],
+      [ 941, 574, 60, 967, 1101 ],
+      [ 710, 556, 90, 556, 710 ],
+      [ 948, 223, 120, 666, 930 ],
+      [ 536, 583, -180, 536, 583 ],
+      [ 938, 646, -360, 938, 646 ],
+      [ 83, 536, 210, 338, 504 ],
+      [ 76, 319, -60, 312, 224 ],
+      [ 603, 698, 30, 871, 905 ],
+      [ 846, 746, 120, 1068, 1104 ],
+      [ 284, 523, -120, 594, 506 ],
+      [ 385, 461, -300, 591, 563 ],
+      [ 974, 225, 240, 681, 955 ],
+      [ 575, 167, -300, 432, 580 ],
+      [ 241, 569, 270, 569, 241 ],
+      [ 524, 504, 150, 705, 696 ],
+      [ 554, 566, -60, 765, 762 ],
+      [ 334, 622, 240, 705, 599 ],
+      [ 750, 306, 180, 750, 306 ],
+      [ 294, 172, 150, 340, 294 ],
+      [ 955, 385, -90, 385, 955 ],
+      [ 297, 673, 360, 297, 673 ],
+      [ 403, 635, -180, 403, 635 ],
+      [ 226, 298, 0, 226, 298 ],
+      [ 345, 478, -210, 537, 585 ],
+      [ 216, 103, 300, 195, 238 ],
+      [ 948, 518, 90, 518, 948 ],
+      [ 346, 768, -60, 836, 683 ],
+      [ 169, 562, 240, 570, 426 ],
+      [ 921, 14, -330, 804, 472 ],
+      [ 618, 730, 30, 900, 940 ],
+      [ 1013, 184, -60, 664, 969 ],
+      [ 998, 486, -180, 998, 486 ],
+      [ 257, 655, 120, 695, 548 ],
+      [ 764, 146, -180, 764, 146 ],
+      [ 1004, 308, -60, 767, 1023 ],
+      [ 892, 250, -330, 897, 662 ],
+      [ 510, 510, -330, 696, 696 ],
+      [ 956, 636, 240, 1028, 1144 ],
+      [ 787, 558, 240, 875, 959 ],
+      [ 846, 253, 210, 858, 641 ],
+      [ 395, 245, -360, 395, 245 ],
+      [ 840, 225, 120, 614, 838 ],
+      [ 83, 417, 0, 83, 417 ],
+      [ 746, 222, 150, 757, 563 ],
+      [ 1022, 206, -300, 688, 988 ],
+      [ 412, 107, -60, 297, 409 ],
+      [ 491, 489, -330, 669, 668 ],
+      [ 569, 438, 300, 662, 711 ],
+      [ 372, 260, 90, 260, 372 ],
+      [ 194, 126, 330, 230, 206 ],
+      [ 988, 422, -180, 988, 422 ],
+      [ 1003, 283, 60, 746, 1009 ],
+      [ 641, 345, -300, 619, 727 ],
+      [ 129, 136, -90, 136, 129 ],
+      [ 835, 134, 120, 533, 789 ],
+      [ 926, 443, 240, 846, 1022 ],
+      [ 326, 42, -30, 302, 199 ],
+      [ 405, 469, -360, 405, 469 ],
+      [ 307, 747, -120, 799, 638 ],
+      [ 952, 124, 0, 952, 124 ],
+      [ 911, 96, -330, 836, 538 ],
+      [ 171, 80, -60, 153, 188 ],
+      [ 754, 561, 270, 561, 754 ],
+      [ 868, 657, -330, 1079, 1002 ],
+      [ 254, 515, -210, 476, 571 ],
+      [ 937, 441, 240, 849, 1031 ],
+      [ 740, 685, 270, 685, 740 ],
+      [ 169, 220, -30, 255, 275 ],
+      [ 183, 449, -30, 382, 480 ],
+      [ 541, 395, 90, 395, 541 ],
+      [ 44, 310, 180, 44, 310 ],
+      [ 108, 438, 240, 432, 311 ],
+      [ 549, 235, 30, 592, 478 ],
+      [ 425, 118, -60, 313, 427 ],
+      [ 481, 308, -300, 507, 570 ],
+      [ 715, 243, 120, 567, 739 ],
+      [ 515, 29, 30, 460, 282 ],
+      [ 370, 156, 240, 319, 397 ],
+      [ 849, 292, -60, 676, 881 ],
+      [ 275, 698, 330, 586, 741 ],
+      [ 891, 731, -120, 1077, 1136 ],
+      [ 610, 43, 300, 340, 549 ],
+      [ 434, 455, -210, 602, 609 ],
+      [ 1006, 6, -90, 6, 1006 ],
+      [ 405, 366, 210, 532, 518 ],
+      [ 491, 134, -330, 492, 361 ],
+      [ 139, 520, -300, 519, 380 ],
+      [ 699, 29, -150, 619, 373 ],
+      [ 528, 665, 150, 789, 838 ],
+      [ 955, 103, 90, 103, 955 ],
+      [ 884, 3, 30, 766, 444 ],
+      [ 203, 460, 90, 460, 203 ],
+      [ 104, 17, -210, 98, 65 ],
+      [ 319, 3, -210, 277, 161 ],
+      [ 691, 307, 150, 751, 610 ],
+      [ 448, 674, 270, 674, 448 ],
+      [ 529, 10, 30, 463, 273 ],
+      [ 647, 535, 60, 786, 827 ],
+      [ 973, 162, -30, 922, 626 ],
+      [ 663, 110, 60, 426, 629 ],
+      [ 259, 5, 60, 133, 226 ],
+      [ 829, 157, -240, 550, 794 ],
+      [ 432, 235, -240, 419, 490 ],
+      [ 641, 473, -210, 791, 729 ],
+      [ 857, 223, 60, 621, 853 ],
+      [ 537, 559, -30, 744, 752 ],
+      [ 396, 187, 0, 396, 187 ],
+      [ 947, 672, -240, 1055, 1155 ],
+      [ 512, 633, -90, 633, 512 ],
+      [ 963, 362, 30, 1014, 795 ],
+      [ 527, 556, 30, 734, 745 ],
+      [ 95, 410, 180, 95, 410 ],
+      [ 274, 733, -330, 603, 771 ],
+      [ 476, 446, 120, 623, 634 ],
+      [ 681, 321, 330, 749, 618 ],
+      [ 271, 723, 150, 595, 760 ],
+      [ 759, 252, 330, 782, 597 ],
+      [ 236, 194, 240, 285, 300 ],
+      [ 426, 578, 90, 578, 426 ],
+      [ 831, 532, -300, 876, 985 ],
+      [ 358, 159, 240, 316, 389 ],
+      [ 915, 229, -120, 654, 906 ],
+      [ 657, 435, -150, 785, 704 ],
+      [ 711, 23, 300, 374, 626 ],
+      [ 371, 534, -150, 587, 646 ],
+      [ 327, 736, -180, 327, 736 ],
+      [ 4, 537, 60, 466, 271 ],
+      [ 953, 714, 240, 1093, 1181 ],
+      [ 749, 265, 60, 603, 780 ],
+      [ 365, 119, -180, 365, 119 ],
+      [ 464, 388, -30, 594, 568 ],
+      [ 280, 306, 210, 394, 404 ],
+      [ 641, 30, -120, 345, 569 ],
+      [ 956, 563, -90, 563, 956 ],
+      [ 840, 72, -330, 763, 481 ],
+      [ 128, 317, -360, 128, 317 ],
+      [ 379, 320, 150, 488, 465 ],
+      [ 966, 266, 120, 712, 968 ],
+      [ 786, 60, 360, 786, 60 ],
+      [ 352, 333, -270, 333, 352 ],
+      [ 626, 681, 120, 902, 881 ],
+      [ 87, 122, -330, 136, 149 ],
+      [ 878, 603, -300, 960, 1061 ],
+      [ 199, 551, 240, 575, 447 ],
+      [ 575, 413, 300, 644, 703 ],
+      [ 638, 509, -120, 759, 806 ],
+      [ 658, 25, 180, 658, 25 ],
+      [ 369, 749, -300, 833, 693 ],
+      [ 7, 570, -240, 497, 290 ],
+      [ 1022, 66, 60, 567, 918 ],
+      [ 147, 535, 0, 147, 535 ],
+      [ 812, 600, 120, 925, 1002 ],
+      [ 861, 490, -60, 853, 990 ],
+      [ 949, 640, -270, 640, 949 ],
+      [ 763, 303, 120, 643, 810 ],
+      [ 673, 13, -120, 346, 588 ],
+      [ 1006, 506, -90, 506, 1006 ],
+      [ 740, 14, -120, 381, 646 ],
+      [ 829, 19, -300, 430, 726 ],
+      [ 996, 17, -240, 512, 869 ],
+      [ 583, 127, 270, 127, 583 ],
+      [ 53, 736, 120, 663, 412 ],
+      [ 709, 613, -150, 920, 884 ],
+      [ 121, 556, -270, 556, 121 ],
+      [ 266, 360, 0, 266, 360 ],
+      [ 962, 96, 30, 881, 563 ],
+      [ 287, 82, -240, 214, 288 ],
+      [ 668, 637, -210, 896, 884 ],
+      [ 1024, 490, -210, 1131, 934 ],
+      [ 91, 468, -180, 91, 468 ],
+      [ 269, 137, -60, 252, 300 ],
+      [ 137, 177, -90, 177, 137 ],
+      [ 804, 708, -240, 1014, 1049 ],
+      [ 76, 30, 300, 62, 80 ],
+      [ 200, 229, -90, 229, 200 ],
+      [ 728, 182, 0, 728, 182 ],
+      [ 248, 397, 60, 467, 412 ],
+      [ 442, 130, -60, 332, 447 ],
+      [ 654, 130, -330, 631, 439 ],
+      [ 892, 197, 120, 616, 869 ],
+      [ 128, 399, 270, 399, 128 ],
+      [ 557, 501, -330, 732, 712 ],
+      [ 942, 335, -360, 942, 335 ],
+      [ 95, 392, -360, 95, 392 ],
+      [ 1014, 542, -120, 975, 1148 ],
+      [ 364, 320, 60, 458, 475 ],
+      [ 866, 505, -300, 869, 1001 ],
+      [ 453, 68, -180, 453, 68 ],
+      [ 888, 558, -60, 925, 1048 ],
+      [ 952, 459, 150, 1053, 872 ],
+      [ 616, 554, -210, 810, 786 ],
+      [ 462, 203, 270, 203, 462 ],
+      [ 543, 141, -150, 540, 392 ],
+      [ 544, 212, 240, 455, 576 ],
+      [ 585, 204, 0, 585, 204 ],
+      [ 931, 477, 330, 1044, 878 ],
+      [ 495, 358, 60, 557, 607 ],
+      [ 588, 697, 120, 897, 856 ],
+      [ 854, 594, -90, 594, 854 ],
+      [ 268, 540, 360, 268, 540 ],
+      [ 968, 234, 150, 955, 685 ],
+      [ 152, 580, 360, 152, 580 ],
+      [ 3, 219, -270, 219, 3 ],
+      [ 301, 627, -60, 692, 573 ],
+      [ 96, 297, 150, 231, 303 ],
+      [ 614, 227, -150, 644, 503 ],
+      [ 533, 598, 210, 759, 783 ],
+      [ 101, 271, 150, 222, 284 ],
+      [ 782, 143, -30, 748, 515 ],
+      [ 160, 344, -240, 377, 309 ],
+      [ 148, 301, -30, 278, 335 ],
+      [ 874, 415, -210, 963, 794 ],
+      [ 847, 417, 0, 847, 417 ],
+      [ 1007, 642, -120, 1058, 1192 ],
+      [ 426, 714, 150, 725, 829 ],
+      [ 117, 406, -360, 117, 406 ],
+      [ 443, 37, 210, 401, 252 ],
+      [ 222, 113, -270, 113, 222 ],
+      [ 928, 699, -120, 1068, 1152 ],
+      [ 378, 50, 210, 351, 231 ],
+      [ 548, 161, -270, 161, 548 ],
+      [ 4, 48, 150, 27, 42 ],
+      [ 233, 682, -180, 233, 682 ],
+      [ 754, 670, -330, 987, 956 ],
+      [ 61, 221, -360, 61, 221 ],
+      [ 789, 309, 30, 837, 662 ],
+      [ 795, 641, 60, 952, 1008 ],
+      [ 573, 39, 180, 573, 39 ],
+      [ 712, 734, 90, 734, 712 ],
+      [ 18, 250, 150, 140, 224 ],
+      [ 805, 660, 300, 973, 1027 ],
+      [ 968, 663, 360, 968, 663 ],
+      [ 661, 69, 270, 69, 661 ],
+      [ 908, 634, 180, 908, 634 ],
+      [ 986, 680, -360, 986, 680 ],
+      [ 992, 503, -60, 930, 1110 ],
+      [ 514, 331, -180, 514, 331 ],
+      [ 85, 760, -150, 452, 699 ],
+      [ 830, 526, -180, 830, 526 ],
+      [ 458, 539, 60, 695, 665 ],
+      [ 152, 374, -30, 317, 400 ],
+      [ 59, 332, -150, 216, 316 ],
+      [ 29, 59, -90, 59, 29 ],
+      [ 909, 740, -210, 1157, 1094 ],
+      [ 633, 711, -300, 932, 903 ],
+      [ 651, 686, 180, 651, 686 ],
+      [ 56, 303, -240, 289, 198 ],
+      [ 314, 366, -240, 473, 453 ],
+      [ 624, 220, 270, 220, 624 ],
+      [ 888, 563, 60, 931, 1050 ],
+      [ 459, 676, -330, 735, 814 ],
+      [ 911, 720, 0, 911, 720 ],
+      [ 197, 742, 30, 541, 741 ],
+      [ 599, 655, 30, 845, 866 ],
+      [ 823, 361, -30, 892, 724 ],
+      [ 929, 81, -120, 533, 844 ],
+      [ 681, 122, 180, 681, 122 ],
+      [ 874, 358, -210, 935, 745 ],
+      [ 31, 57, 0, 31, 57 ],
+      [ 914, 722, -210, 1152, 1080 ],
+      [ 468, 298, -300, 491, 554 ],
+      [ 520, 213, -330, 556, 443 ],
+      [ 1014, 360, -360, 1014, 360 ],
+      [ 563, 42, 270, 42, 563 ],
+      [ 73, 658, -120, 605, 391 ],
+      [ 530, 587, -60, 771, 751 ],
+      [ 877, 329, 60, 723, 923 ],
+      [ 604, 216, -330, 631, 488 ],
+      [ 818, 239, -270, 239, 818 ],
+      [ 302, 156, -330, 339, 285 ],
+      [ 534, 507, -30, 715, 706 ],
+      [ 644, 128, 180, 644, 128 ],
+      [ 690, 121, -210, 657, 448 ],
+      [ 699, 542, -180, 699, 542 ],
+      [ 557, 597, -300, 795, 780 ],
+      [ 896, 226, 270, 226, 896 ],
+      [ 318, 116, -150, 332, 258 ],
+      [ 926, 568, 60, 954, 1085 ],
+      [ 987, 414, 300, 851, 1061 ],
+      [ 98, 639, -300, 601, 403 ],
+      [ 173, 272, 180, 173, 272 ],
+      [ 644, 755, 330, 934, 976 ],
+      [ 375, 504, -300, 623, 576 ],
+      [ 585, 259, 210, 635, 515 ],
+      [ 851, 677, 60, 1011, 1074 ],
+      [ 970, 580, 270, 580, 970 ],
+      [ 846, 51, -360, 846, 51 ],
+      [ 136, 745, 180, 136, 745 ],
+      [ 737, 716, -150, 995, 987 ],
+      [ 632, 22, -300, 334, 558 ],
+      [ 734, 151, -30, 710, 498 ],
+      [ 488, 633, -30, 738, 792 ],
+      [ 412, 146, -300, 331, 429 ],
+      [ 497, 585, -30, 722, 755 ],
+      [ 280, 455, -120, 533, 469 ],
+      [ 857, 413, -330, 948, 786 ],
+      [ 712, 279, -270, 279, 712 ],
+      [ 719, 381, -300, 689, 812 ],
+      [ 460, 165, -330, 480, 372 ],
+      [ 751, 639, -330, 969, 928 ],
+      [ 870, 421, -180, 870, 421 ],
+      [ 327, 18, -300, 179, 292 ],
+      [ 790, 327, -150, 847, 677 ],
+      [ 900, 699, -330, 1128, 1054 ],
+      [ 330, 141, 90, 141, 330 ],
+      [ 663, 16, -240, 345, 581 ],
+      [ 744, 549, 30, 918, 846 ],
+      [ 892, 320, -360, 892, 320 ],
+      [ 1009, 664, -180, 1009, 664 ],
+      [ 33, 459, -330, 257, 414 ],
+      [ 108, 344, 90, 344, 108 ],
+      [ 385, 589, 120, 702, 626 ],
+      [ 481, 413, -330, 622, 598 ],
+      [ 771, 320, 360, 771, 320 ],
+      [ 817, 567, -240, 899, 989 ],
+      [ 444, 296, -240, 477, 531 ],
+      [ 622, 86, 300, 383, 581 ],
+      [ 148, 755, -150, 505, 727 ],
+      [ 181, 743, -240, 733, 526 ],
+      [ 434, 767, 210, 758, 880 ],
+      [ 514, 80, -210, 485, 324 ],
+      [ 131, 368, 360, 131, 368 ],
+      [ 796, 728, 30, 1053, 1027 ],
+      [ 872, 539, 330, 1024, 903 ],
+      [ 856, 383, 150, 932, 758 ],
+      [ 3, 716, -330, 360, 621 ],
+      [ 194, 414, -240, 455, 374 ],
+      [ 93, 525, -240, 501, 341 ],
+      [ 417, 660, -270, 660, 417 ],
+      [ 602, 218, -270, 218, 602 ],
+      [ 376, 603, -210, 626, 708 ],
+      [ 607, 701, 150, 875, 909 ],
+      [ 599, 529, 120, 757, 781 ],
+      [ 117, 415, -120, 416, 308 ],
+      [ 61, 289, 270, 289, 61 ],
+      [ 760, 291, 210, 803, 631 ],
+      [ 830, 436, -120, 792, 935 ],
+      [ 1013, 505, -360, 1013, 505 ],
+      [ 153, 50, 270, 50, 153 ],
+      [ 283, 501, -270, 501, 283 ],
+      [ 412, 15, 330, 363, 219 ],
+      [ 646, 469, 270, 469, 646 ],
+      [ 347, 150, 30, 375, 303 ],
+      [ 1019, 237, -330, 1000, 714 ],
+      [ 360, 283, -30, 452, 425 ],
+      [ 211, 85, 240, 178, 224 ],
+      [ 1016, 707, -90, 707, 1016 ],
+      [ 323, 698, -330, 628, 765 ],
+      [ 330, 44, -300, 202, 307 ],
+      [ 192, 256, 210, 293, 317 ],
+      [ 343, 564, 210, 578, 658 ],
+      [ 274, 281, -90, 281, 274 ],
+      [ 115, 541, 60, 526, 369 ],
+      [ 661, 537, 300, 794, 840 ],
+      [ 736, 38, -180, 736, 38 ],
+      [ 171, 196, -90, 196, 171 ],
+      [ 1018, 190, -150, 975, 673 ],
+      [ 397, 432, -210, 559, 571 ],
+      [ 450, 679, -180, 450, 679 ],
+      [ 568, 54, 60, 330, 518 ],
+      [ 330, 311, -120, 433, 440 ],
+      [ 111, 517, 150, 354, 502 ],
+      [ 517, 602, -90, 602, 517 ],
+      [ 99, 330, -300, 335, 250 ],
+      [ 1021, 113, -270, 113, 1021 ],
+      [ 271, 241, -90, 241, 271 ],
+      [ 657, 236, 120, 532, 685 ],
+      [ 961, 534, -210, 1099, 941 ],
+      [ 147, 103, -300, 162, 178 ],
+      [ 415, 529, -270, 529, 415 ],
+      [ 1023, 8, 60, 518, 889 ],
+      [ 335, 91, -210, 335, 245 ],
+      [ 20, 479, -360, 20, 479 ],
+      [ 426, 553, -30, 644, 692 ],
+      [ 523, 550, 60, 737, 727 ],
+      [ 671, 752, 300, 985, 957 ],
+      [ 55, 477, -210, 285, 439 ],
+      [ 715, 429, 300, 728, 833 ],
+      [ 927, 539, -330, 1071, 930 ],
+      [ 1018, 82, 180, 1018, 82 ],
+      [ 158, 81, 180, 158, 81 ],
+      [ 736, 332, 270, 332, 736 ],
+      [ 978, 347, 0, 978, 347 ],
+      [ 999, 666, -210, 1198, 1075 ],
+      [ 435, 290, 300, 467, 521 ],
+      [ 21, 25, 300, 31, 30 ],
+      [ 951, 66, 0, 951, 66 ],
+      [ 148, 602, -330, 429, 594 ],
+      [ 55, 528, 210, 310, 483 ],
+      [ 99, 524, 300, 502, 347 ],
+      [ 847, 642, 360, 847, 642 ],
+      [ 581, 425, -60, 657, 715 ],
+      [ 436, 390, 270, 390, 436 ],
+      [ 929, 371, 180, 929, 371 ],
+      [ 111, 697, -300, 659, 444 ],
+      [ 24, 712, -270, 712, 24 ],
+      [ 941, 657, -210, 1142, 1038 ],
+      [ 444, 768, -360, 444, 768 ],
+      [ 519, 41, 150, 469, 294 ],
+      [ 288, 115, -90, 115, 288 ],
+      [ 166, 749, -210, 517, 730 ],
+      [ 152, 417, 210, 339, 436 ],
+      [ 579, 744, -180, 579, 744 ],
+      [ 444, 673, 180, 444, 673 ],
+      [ 173, 755, 120, 740, 525 ],
+      [ 288, 5, 60, 147, 251 ],
+      [ 436, 710, -30, 731, 833 ],
+      [ 670, 275, -30, 717, 573 ],
+      [ 683, 664, 0, 683, 664 ],
+      [ 375, 111, 120, 283, 378 ],
+      [ 765, 236, 90, 236, 765 ],
+      [ 986, 349, -240, 794, 1026 ],
+      [ 749, 15, -270, 15, 749 ],
+      [ 8, 348, -360, 8, 348 ],
+      [ 786, 477, 360, 786, 477 ],
+      [ 443, 693, 360, 443, 693 ],
+      [ 26, 251, 330, 147, 230 ],
+      [ 483, 753, -180, 483, 753 ],
+      [ 940, 497, -270, 497, 940 ],
+      [ 426, 10, -150, 372, 221 ],
+      [ 64, 583, 60, 536, 346 ],
+      [ 701, 555, -330, 884, 831 ],
+      [ 870, 348, -330, 927, 735 ],
+      [ 1005, 354, 0, 1005, 354 ],
+      [ 1013, 175, -270, 175, 1013 ],
+      [ 1004, 507, -330, 1122, 940 ],
+      [ 1001, 526, -90, 526, 1001 ],
+      [ 921, 120, -120, 563, 856 ],
+      [ 183, 56, 360, 183, 56 ],
+      [ 329, 376, -360, 329, 376 ],
+      [ 623, 423, 210, 750, 676 ],
+      [ 207, 181, 0, 207, 181 ],
+      [ 256, 65, 330, 253, 184 ],
+      [ 324, 50, -60, 203, 305 ],
+      [ 855, 42, 90, 42, 855 ],
+      [ 998, 27, -150, 877, 521 ],
+      [ 16, 9, 360, 16, 9 ],
+      [ 392, 700, -270, 700, 392 ],
+      [ 749, 69, -240, 434, 681 ],
+      [ 743, 316, 150, 801, 644 ],
+      [ 749, 15, -210, 655, 386 ],
+      [ 509, 170, -30, 524, 401 ],
+      [ 1007, 362, 30, 1053, 817 ],
+      [ 945, 604, 90, 604, 945 ],
+      [ 331, 477, 120, 578, 523 ],
+      [ 973, 458, 150, 1071, 882 ],
+      [ 243, 469, 180, 243, 469 ],
+      [ 214, 763, 90, 763, 214 ],
+      [ 344, 557, 180, 344, 557 ],
+      [ 549, 345, -270, 345, 549 ],
+      [ 229, 139, -270, 139, 229 ],
+      [ 474, 520, -90, 520, 474 ],
+      [ 959, 506, 270, 506, 959 ],
+      [ 506, 447, 90, 447, 506 ],
+      [ 119, 694, -180, 119, 694 ],
+      [ 811, 656, 270, 656, 811 ],
+      [ 514, 70, -30, 479, 318 ],
+      [ 229, 230, -30, 312, 313 ],
+      [ 877, 487, -240, 860, 1001 ],
+      [ 592, 131, 90, 131, 592 ],
+      [ 727, 302, 240, 624, 779 ],
+      [ 882, 657, -30, 1091, 1010 ],
+      [ 240, 608, -270, 608, 240 ],
+      [ 78, 219, 150, 176, 227 ],
+      [ 722, 308, 90, 308, 722 ],
+      [ 977, 147, -30, 919, 615 ],
+      [ 818, 533, 60, 870, 974 ],
+      [ 261, 704, 270, 704, 261 ],
+      [ 721, 593, 0, 721, 593 ],
+      [ 898, 268, 120, 680, 910 ],
+      [ 510, 46, -330, 464, 294 ],
+      [ 307, 707, 300, 764, 618 ],
+      [ 796, 118, 150, 748, 498 ],
+      [ 935, 177, 360, 935, 177 ],
+      [ 646, 718, -90, 718, 646 ],
+      [ 258, 682, 60, 719, 564 ],
+      [ 744, 528, -180, 744, 528 ],
+      [ 298, 723, -240, 774, 618 ],
+      [ 158, 495, 360, 158, 495 ],
+      [ 668, 400, -150, 777, 679 ],
+      [ 327, 14, -90, 14, 327 ],
+      [ 389, 244, -150, 457, 404 ],
+      [ 302, 73, -30, 297, 214 ],
+      [ 1, 6, 120, 5, 2 ],
+      [ 1016, 490, 90, 490, 1016 ],
+      [ 392, 683, 0, 392, 683 ],
+      [ 989, 472, -240, 903, 1091 ],
+      [ 246, 695, -270, 695, 246 ],
+      [ 442, 46, 210, 404, 260 ],
+      [ 404, 547, -150, 622, 675 ],
+      [ 723, 24, -150, 637, 381 ],
+      [ 78, 315, 90, 315, 78 ],
+      [ 375, 540, 150, 594, 654 ],
+      [ 829, 541, 180, 829, 541 ],
+      [ 494, 534, -120, 708, 693 ],
+      [ 92, 60, -180, 92, 60 ],
+      [ 598, 33, 270, 33, 598 ],
+      [ 783, 218, 210, 786, 579 ],
+      [ 907, 549, 240, 927, 1059 ],
+      [ 667, 83, 30, 618, 405 ],
+      [ 960, 625, 60, 1020, 1143 ],
+      [ 247, 683, 360, 247, 683 ],
+      [ 883, 196, 120, 611, 861 ],
+      [ 590, 50, -90, 50, 590 ],
+      [ 305, 420, -330, 474, 516 ],
+      [ 672, 489, -270, 489, 672 ],
+      [ 924, 168, -240, 606, 883 ],
+      [ 782, 755, -30, 1054, 1045 ],
+      [ 542, 668, -240, 849, 802 ],
+      [ 363, 400, -150, 513, 526 ],
+      [ 912, 351, -300, 759, 964 ],
+      [ 467, 536, -360, 467, 536 ],
+      [ 442, 430, -180, 442, 430 ],
+      [ 112, 104, -120, 145, 147 ],
+      [ 503, 332, 270, 332, 503 ],
+      [ 581, 68, 0, 581, 68 ],
+      [ 739, 761, 180, 739, 761 ],
+      [ 941, 579, 150, 1103, 970 ],
+      [ 409, 217, 60, 392, 462 ],
+      [ 607, 489, -300, 726, 769 ],
+      [ 916, 404, 30, 995, 807 ],
+      [ 11, 754, -180, 11, 754 ],
+      [ 15, 317, 240, 281, 170 ],
+      [ 280, 401, 330, 442, 487 ],
+      [ 611, 10, -90, 10, 611 ],
+      [ 478, 446, -30, 635, 625 ],
+      [ 995, 232, -30, 976, 698 ],
+      [ 713, 169, -210, 701, 501 ],
+      [ 413, 475, 0, 413, 475 ],
+      [ 1002, 162, -270, 162, 1002 ],
+      [ 75, 81, 120, 107, 103 ],
+      [ 640, 89, 90, 89, 640 ],
+      [ 896, 100, -330, 825, 534 ],
+      [ 699, 310, 60, 617, 760 ],
+      [ 641, 768, 60, 985, 939 ],
+      [ 1, 358, -270, 358, 1 ],
+      [ 475, 336, -30, 578, 528 ],
+      [ 938, 103, 120, 557, 862 ],
+      [ 125, 412, -150, 313, 418 ],
+      [ 623, 395, 0, 623, 395 ],
+      [ 749, 450, 90, 450, 749 ],
+      [ 390, 162, 180, 390, 162 ],
+      [ 11, 66, 270, 66, 11 ],
+      [ 55, 590, -180, 55, 590 ],
+      [ 633, 302, -180, 633, 302 ],
+      [ 199, 303, 180, 199, 303 ],
+      [ 359, 659, -240, 750, 638 ],
+      [ 827, 595, -150, 1013, 927 ],
+      [ 496, 688, 240, 843, 772 ],
+      [ 799, 387, -120, 733, 884 ],
+      [ 293, 180, 330, 342, 302 ],
+      [ 920, 472, -270, 472, 920 ],
+      [ 640, 480, -210, 794, 734 ],
+      [ 493, 521, 360, 493, 521 ],
+      [ 759, 227, -90, 227, 759 ],
+      [ 1023, 376, 210, 1072, 836 ],
+      [ 741, 645, 90, 645, 741 ],
+      [ 906, 497, -60, 881, 1032 ],
+      [ 183, 101, -150, 208, 177 ],
+      [ 9, 700, 240, 609, 356 ],
+      [ 360, 152, -330, 387, 311 ],
+      [ 287, 73, 120, 206, 283 ],
+      [ 429, 553, -150, 647, 692 ],
+      [ 659, 154, 330, 646, 462 ],
+      [ 651, 723, -180, 651, 723 ],
+      [ 21, 722, 180, 21, 722 ],
+      [ 819, 509, 60, 850, 963 ],
+      [ 447, 420, -210, 597, 586 ],
+      [ 867, 557, -90, 557, 867 ],
+      [ 155, 563, -180, 155, 563 ],
+      [ 982, 64, -30, 881, 546 ],
+      [ 1, 279, 60, 242, 139 ],
+      [ 674, 600, -150, 882, 856 ],
+      [ 962, 326, 0, 962, 326 ],
+      [ 920, 46, -60, 498, 819 ],
+      [ 157, 61, -90, 61, 157 ],
+      [ 918, 675, -360, 918, 675 ],
+      [ 492, 242, 60, 455, 547 ],
+      [ 728, 124, -150, 691, 470 ],
+      [ 74, 240, -360, 74, 240 ],
+      [ 353, 208, -300, 356, 409 ],
+      [ 833, 209, -30, 825, 597 ],
+      [ 386, 714, -180, 386, 714 ],
+      [ 676, 667, 120, 915, 917 ],
+      [ 146, 588, 180, 146, 588 ],
+      [ 580, 705, 240, 900, 854 ],
+      [ 950, 626, 150, 1135, 1015 ],
+      [ 975, 226, -360, 975, 226 ],
+      [ 534, 4, -240, 269, 463 ],
+      [ 835, 59, 0, 835, 59 ],
+      [ 861, 323, 180, 861, 323 ],
+      [ 972, 179, -360, 972, 179 ],
+      [ 430, 469, 330, 606, 621 ],
+      [ 688, 207, 240, 522, 698 ],
+      [ 356, 316, 60, 451, 466 ],
+      [ 85, 751, 0, 85, 751 ],
+      [ 920, 695, -150, 1143, 1061 ],
+      [ 606, 658, 90, 658, 606 ],
+      [ 614, 290, 90, 290, 614 ],
+      [ 786, 148, 150, 754, 519 ],
+      [ 254, 26, -300, 149, 232 ],
+      [ 1022, 755, -120, 1164, 1262 ],
+      [ 20, 309, 330, 171, 278 ],
+      [ 994, 57, -210, 888, 544 ],
+      [ 807, 324, 90, 324, 807 ],
+      [ 381, 387, 90, 387, 381 ],
+      [ 894, 309, 0, 894, 309 ],
+      [ 193, 763, -90, 763, 193 ],
+      [ 817, 455, 180, 817, 455 ],
+      [ 421, 276, 330, 501, 449 ],
+      [ 102, 466, 360, 102, 466 ],
+      [ 213, 464, 330, 415, 508 ],
+      [ 562, 479, -120, 695, 725 ],
+      [ 512, 456, -60, 649, 671 ],
+      [ 737, 294, 270, 294, 737 ],
+      [ 359, 579, -120, 679, 599 ],
+      [ 982, 481, 180, 982, 481 ],
+      [ 483, 626, 180, 483, 626 ],
+      [ 861, 470, -120, 836, 979 ],
+      [ 601, 17, 150, 528, 314 ],
+      [ 538, 93, -150, 511, 349 ],
+      [ 509, 252, 300, 471, 566 ],
+      [ 462, 674, 30, 737, 814 ],
+      [ 827, 289, -270, 289, 827 ],
+      [ 242, 73, 0, 242, 73 ],
+      [ 89, 343, -180, 89, 343 ],
+      [ 451, 311, 300, 493, 545 ],
+      [ 200, 673, 150, 509, 681 ],
+      [ 965, 550, -150, 1109, 957 ],
+      [ 288, 232, -120, 344, 364 ],
+      [ 1003, 635, -30, 1185, 1051 ],
+      [ 290, 249, 210, 375, 360 ],
+      [ 196, 595, 120, 612, 465 ],
+      [ 740, 447, -360, 740, 447 ],
+      [ 868, 628, -270, 628, 868 ],
+      [ 363, 694, 60, 782, 661 ],
+      [ 629, 264, 360, 629, 264 ],
+      [ 512, 413, 270, 413, 512 ],
+      [ 204, 369, 60, 421, 360 ],
+      [ 522, 584, 270, 584, 522 ],
+      [ 862, 568, 150, 1030, 921 ],
+      [ 302, 17, -360, 302, 17 ],
+      [ 78, 164, 210, 148, 180 ],
+      [ 751, 718, -90, 718, 751 ],
+      [ 785, 601, -240, 912, 978 ],
+      [ 916, 105, -300, 548, 845 ],
+      [ 480, 577, -60, 738, 703 ],
+      [ 457, 192, 360, 457, 192 ],
+      [ 307, 345, -30, 437, 452 ],
+      [ 888, 736, -210, 1137, 1079 ],
+      [ 755, 615, 330, 960, 910 ],
+      [ 443, 73, 360, 443, 73 ],
+      [ 462, 131, -240, 343, 464 ],
+      [ 250, 694, -270, 694, 250 ],
+      [ 632, 514, 300, 759, 804 ],
+      [ 827, 433, -360, 827, 433 ],
+      [ 922, 25, 210, 810, 482 ],
+      [ 345, 367, -360, 345, 367 ],
+      [ 317, 597, 0, 317, 597 ],
+      [ 780, 495, -30, 922, 819 ],
+      [ 998, 293, -180, 998, 293 ],
+      [ 948, 625, -120, 1014, 1132 ],
+      [ 921, 203, 0, 921, 203 ],
+      [ 87, 390, -60, 380, 270 ],
+      [ 211, 96, -300, 188, 230 ],
+      [ 111, 716, 120, 675, 453 ],
+      [ 152, 639, 120, 628, 449 ],
+      [ 961, 130, -270, 130, 961 ],
+      [ 1001, 367, 330, 1049, 818 ],
+      [ 477, 183, 60, 396, 504 ],
+      [ 933, 163, 330, 889, 607 ],
+      [ 160, 106, 210, 190, 171 ],
+      [ 508, 28, -360, 508, 28 ],
+      [ 6, 93, 30, 51, 83 ],
+      [ 428, 251, 120, 430, 494 ],
+      [ 511, 334, 60, 544, 609 ],
+      [ 147, 448, -60, 460, 351 ],
+      [ 840, 400, 60, 765, 927 ],
+      [ 997, 383, -330, 1054, 830 ],
+      [ 926, 740, -150, 1170, 1103 ],
+      [ 490, 671, 30, 759, 825 ],
+      [ 442, 23, 120, 240, 392 ],
+      [ 203, 403, 150, 376, 449 ],
+      [ 234, 407, 240, 468, 405 ],
+      [ 785, 728, -270, 728, 785 ],
+      [ 439, 343, 60, 516, 551 ],
+      [ 23, 453, -270, 453, 23 ],
+      [ 459, 314, 120, 501, 553 ],
+      [ 42, 294, -240, 275, 182 ],
+      [ 115, 220, -270, 220, 115 ],
+      [ 431, 587, -360, 431, 587 ],
+      [ 965, 150, -330, 910, 612 ],
+      [ 615, 303, 60, 569, 683 ],
+      [ 303, 478, -300, 565, 501 ],
+      [ 114, 298, -330, 247, 314 ],
+      [ 260, 627, 0, 260, 627 ],
+      [ 851, 644, -330, 1058, 983 ],
+      [ 1014, 219, 0, 1014, 219 ],
+      [ 686, 251, 270, 251, 686 ],
+      [ 868, 336, -270, 336, 868 ],
+      [ 1011, 659, 300, 1075, 1204 ],
+      [ 1024, 615, -300, 1044, 1193 ],
+      [ 43, 307, 0, 43, 307 ],
+      [ 623, 534, -270, 534, 623 ],
+      [ 722, 619, 0, 722, 619 ],
+      [ 767, 46, -120, 422, 686 ],
+      [ 243, 684, -240, 713, 551 ],
+      [ 323, 676, -30, 616, 746 ],
+      [ 821, 423, 210, 922, 775 ],
+      [ 687, 305, -210, 746, 606 ],
+      [ 845, 295, -330, 878, 677 ],
+      [ 762, 295, 270, 295, 762 ],
+      [ 878, 327, -180, 878, 327 ],
+      [ 373, 26, 360, 373, 26 ],
+      [ 505, 567, 210, 720, 742 ],
+      [ 10, 374, 240, 328, 194 ],
+      [ 350, 556, 180, 350, 556 ],
+      [ 524, 30, 90, 30, 524 ],
+      [ 989, 645, -270, 645, 989 ],
+      [ 765, 392, 30, 858, 721 ],
+      [ 988, 257, 330, 983, 717 ],
+      [ 41, 60, -150, 64, 71 ],
+      [ 938, 718, 180, 938, 718 ],
+      [ 196, 230, 210, 283, 296 ],
+      [ 165, 608, 0, 165, 608 ],
+      [ 959, 615, 360, 959, 615 ],
+      [ 790, 109, 180, 790, 109 ],
+      [ 508, 502, 210, 689, 688 ],
+      [ 104, 475, 60, 462, 327 ],
+      [ 262, 281, -300, 373, 366 ],
+      [ 827, 253, -30, 842, 632 ],
+      [ 760, 284, 30, 800, 625 ],
+      [ 62, 219, -30, 162, 221 ],
+      [ 822, 365, 180, 822, 365 ],
+      [ 593, 488, 30, 757, 719 ],
+      [ 95, 439, -120, 426, 301 ],
+      [ 95, 263, 0, 95, 263 ],
+      [ 835, 644, -270, 644, 835 ],
+      [ 590, 722, 180, 590, 722 ],
+      [ 180, 150, -270, 150, 180 ],
+      [ 292, 2, -30, 252, 148 ],
+      [ 746, 571, 240, 867, 931 ],
+      [ 256, 617, -300, 661, 529 ],
+      [ 723, 466, 60, 765, 859 ],
+      [ 472, 142, -210, 479, 357 ],
+      [ 7, 213, 210, 112, 186 ],
+      [ 362, 284, -270, 284, 362 ],
+      [ 862, 141, 360, 862, 141 ],
+      [ 1006, 583, 300, 1006, 1162 ],
+      [ 760, 718, -300, 1001, 1017 ],
+      [ 887, 169, -300, 589, 852 ],
+      [ 326, 728, 270, 728, 326 ],
+      [ 144, 152, 120, 203, 199 ],
+      [ 252, 694, -180, 252, 694 ],
+      [ 846, 279, -60, 663, 871 ],
+      [ 43, 284, 150, 179, 266 ],
+      [ 848, 555, -300, 904, 1011 ],
+      [ 980, 433, -180, 980, 433 ],
+      [ 946, 419, -360, 946, 419 ],
+      [ 849, 221, 330, 845, 615 ],
+      [ 952, 117, -240, 576, 881 ],
+      [ 32, 361, -270, 361, 32 ],
+      [ 897, 469, -120, 853, 1010 ],
+      [ 536, 657, -210, 792, 835 ],
+      [ 795, 524, 60, 851, 950 ],
+      [ 219, 556, 330, 466, 591 ],
+      [ 950, 424, 120, 841, 1033 ],
+      [ 11, 390, -180, 11, 390 ],
+      [ 283, 331, 210, 410, 427 ],
+      [ 308, 199, -330, 365, 325 ],
+      [ 267, 145, -210, 303, 258 ],
+      [ 450, 168, 150, 473, 368 ],
+      [ 578, 73, -150, 536, 351 ],
+      [ 909, 474, -240, 864, 1023 ],
+      [ 115, 303, 270, 303, 115 ],
+      [ 717, 467, 60, 762, 853 ],
+      [ 673, 411, -300, 692, 787 ],
+      [ 344, 419, 90, 419, 344 ],
+      [ 592, 630, -330, 827, 841 ],
+      [ 374, 93, -150, 369, 267 ],
+      [ 450, 293, 0, 450, 293 ],
+      [ 681, 630, 150, 904, 885 ],
+      [ 369, 295, 240, 438, 466 ],
+      [ 681, 208, -60, 519, 693 ],
+      [ 846, 295, 240, 677, 879 ],
+      [ 684, 64, -60, 395, 624 ],
+      [ 238, 569, 360, 238, 569 ],
+      [ 357, 58, 0, 357, 58 ],
+      [ 994, 502, -120, 931, 1110 ],
+      [ 25, 14, -30, 27, 24 ],
+      [ 345, 351, 240, 475, 473 ],
+      [ 857, 93, 120, 509, 787 ],
+      [ 569, 370, -360, 569, 370 ],
+      [ 378, 112, -150, 382, 285 ],
+      [ 818, 747, 150, 1081, 1054 ],
+      [ 637, 491, 210, 796, 742 ],
+      [ 54, 669, 0, 54, 669 ],
+      [ 17, 169, 60, 154, 98 ],
+      [ 539, 146, -210, 539, 394 ],
+      [ 876, 164, -180, 876, 164 ],
+      [ 312, 422, 150, 481, 519 ],
+      [ 139, 297, 240, 325, 268 ],
+      [ 805, 723, -150, 1058, 1027 ],
+      [ 839, 238, -30, 844, 625 ],
+      [ 127, 83, -60, 134, 150 ],
+      [ 832, 561, -330, 1000, 901 ],
+      [ 597, 601, 330, 817, 818 ],
+      [ 96, 613, -240, 578, 388 ],
+      [ 696, 249, -120, 563, 726 ],
+      [ 941, 137, 60, 589, 882 ],
+      [ 180, 371, -300, 410, 340 ],
+      [ 911, 475, 0, 911, 475 ],
+      [ 743, 310, -30, 797, 639 ],
+      [ 42, 171, 180, 42, 171 ],
+      [ 515, 266, 270, 266, 515 ],
+      [ 959, 122, 60, 585, 891 ],
+      [ 9, 569, -90, 569, 9 ],
+      [ 975, 640, -240, 1041, 1163 ],
+      [ 117, 394, 0, 117, 394 ],
+      [ 477, 331, 120, 525, 577 ],
+      [ 31, 465, -270, 465, 31 ],
+      [ 148, 381, 210, 318, 403 ],
+      [ 660, 169, -240, 475, 654 ],
+      [ 87, 201, -90, 201, 87 ],
+      [ 855, 587, 180, 855, 587 ],
+      [ 710, 538, 300, 819, 883 ],
+      [ 288, 544, 90, 544, 288 ],
+      [ 665, 507, -30, 828, 771 ],
+      [ 836, 594, 360, 836, 594 ],
+      [ 314, 183, -60, 313, 362 ],
+      [ 997, 206, -360, 997, 206 ],
+      [ 126, 316, 0, 126, 316 ],
+      [ 912, 43, 180, 912, 43 ],
+      [ 62, 108, 360, 62, 108 ],
+      [ 464, 749, 180, 464, 749 ],
+      [ 197, 513, -30, 426, 542 ],
+      [ 91, 728, -240, 675, 441 ],
+      [ 743, 459, 240, 768, 872 ],
+      [ 201, 318, 60, 375, 333 ],
+      [ 183, 553, 240, 569, 434 ],
+      [ 605, 532, -300, 763, 789 ],
+      [ 623, 627, 0, 623, 627 ],
+      [ 123, 542, 60, 530, 377 ],
+      [ 873, 589, 150, 1050, 945 ],
+      [ 866, 169, 150, 833, 577 ],
+      [ 616, 316, -120, 581, 690 ],
+      [ 59, 384, -150, 242, 361 ],
+      [ 227, 173, 300, 262, 282 ],
+      [ 45, 323, -150, 199, 301 ],
+      [ 655, 460, -360, 655, 460 ],
+      [ 484, 145, 150, 491, 366 ],
+      [ 587, 611, 30, 813, 822 ],
+      [ 87, 704, -210, 427, 652 ],
+      [ 668, 590, -360, 668, 590 ],
+      [ 368, 471, -210, 553, 590 ],
+      [ 41, 165, 90, 165, 41 ],
+      [ 398, 209, -270, 209, 398 ],
+      [ 702, 379, -120, 678, 796 ],
+      [ 593, 412, 210, 718, 652 ],
+      [ 907, 135, -90, 135, 907 ],
+      [ 934, 498, 60, 897, 1057 ],
+      [ 646, 170, -120, 469, 643 ],
+      [ 168, 235, -180, 168, 235 ],
+      [ 413, 736, -330, 725, 843 ],
+      [ 419, 243, 120, 419, 482 ],
+      [ 648, 274, 270, 274, 648 ],
+      [ 274, 572, -270, 572, 274 ],
+      [ 411, 330, 90, 330, 411 ],
+      [ 778, 6, -240, 393, 675 ],
+      [ 551, 686, -120, 868, 819 ],
+      [ 936, 618, 360, 936, 618 ],
+      [ 490, 334, -210, 591, 532 ],
+      [ 858, 460, 30, 973, 826 ],
+      [ 115, 1, -30, 99, 58 ],
+      [ 159, 315, 210, 294, 351 ],
+      [ 830, 33, -270, 33, 830 ],
+      [ 696, 238, 300, 552, 721 ],
+      [ 841, 546, -120, 892, 1000 ],
+      [ 466, 362, -120, 546, 583 ],
+      [ 641, 7, -210, 558, 325 ],
+      [ 995, 708, -360, 995, 708 ],
+      [ 989, 307, -30, 1009, 760 ],
+      [ 185, 182, -330, 251, 250 ],
+      [ 717, 268, -330, 754, 590 ],
+      [ 183, 387, -30, 351, 426 ],
+      [ 995, 241, 0, 995, 241 ],
+      [ 124, 763, 240, 722, 488 ],
+      [ 15, 625, 30, 324, 548 ],
+      [ 345, 207, -360, 345, 207 ],
+      [ 683, 687, -360, 683, 687 ],
+      [ 910, 665, 330, 1120, 1031 ],
+      [ 938, 638, -120, 1021, 1130 ],
+      [ 385, 8, 60, 199, 337 ],
+      [ 445, 546, 300, 694, 658 ],
+      [ 506, 682, -60, 842, 779 ],
+      [ 986, 660, 180, 986, 660 ],
+      [ 485, 753, 180, 485, 753 ],
+      [ 302, 764, 30, 643, 812 ],
+      [ 846, 254, 240, 642, 858 ],
+      [ 847, 765, 150, 1115, 1085 ],
+      [ 857, 680, 60, 1017, 1082 ],
+      [ 786, 615, -90, 615, 786 ],
+      [ 100, 135, -60, 165, 153 ],
+      [ 681, 469, -300, 746, 823 ],
+      [ 595, 80, -360, 595, 80 ],
+      [ 1023, 51, 270, 51, 1023 ],
+      [ 749, 415, 270, 415, 749 ],
+      [ 467, 641, 240, 787, 724 ],
+      [ 1017, 507, -240, 947, 1132 ],
+      [ 819, 374, -240, 733, 895 ],
+      [ 511, 248, -330, 566, 470 ],
+      [ 66, 69, 270, 69, 66 ],
+      [ 469, 144, -360, 469, 144 ],
+      [ 883, 655, 90, 655, 883 ],
+      [ 1000, 332, 180, 1000, 332 ],
+      [ 1003, 331, 210, 1033, 787 ],
+      [ 861, 125, -120, 537, 807 ],
+      [ 697, 474, -240, 758, 839 ],
+      [ 528, 469, 240, 669, 691 ],
+      [ 696, 315, -150, 759, 620 ],
+      [ 860, 698, 120, 1033, 1092 ],
+      [ 906, 747, 180, 906, 747 ],
+      [ 747, 330, 300, 658, 811 ],
+      [ 768, 224, 210, 776, 577 ],
+      [ 389, 206, -210, 439, 371 ],
+      [ 116, 190, 90, 190, 116 ],
+      [ 935, 67, 210, 842, 524 ],
+      [ 259, 590, -60, 639, 519 ],
+      [ 437, 217, -360, 437, 217 ],
+      [ 265, 739, -60, 771, 598 ],
+      [ 592, 616, -120, 828, 819 ],
+      [ 225, 527, -150, 457, 567 ],
+      [ 974, 319, 180, 974, 319 ],
+      [ 891, 126, -360, 891, 126 ],
+      [ 656, 417, -150, 776, 688 ],
+      [ 864, 504, 30, 1000, 867 ],
+      [ 489, 437, 90, 437, 489 ],
+      [ 279, 630, -90, 630, 279 ],
+      [ 701, 190, 150, 702, 514 ],
+      [ 723, 388, 120, 697, 819 ],
+      [ 140, 64, -30, 152, 125 ],
+      [ 486, 233, -270, 233, 486 ],
+      [ 803, 195, 30, 792, 570 ],
+      [ 536, 95, 150, 511, 348 ],
+      [ 567, 587, -180, 567, 587 ],
+      [ 873, 466, 300, 839, 989 ],
+      [ 408, 65, -30, 385, 260 ],
+      [ 31, 274, -150, 162, 251 ],
+      [ 440, 31, 30, 396, 246 ],
+      [ 114, 573, -330, 384, 552 ],
+      [ 772, 678, -270, 678, 772 ],
+      [ 203, 274, -60, 337, 312 ],
+      [ 336, 108, 150, 344, 260 ],
+      [ 894, 510, 240, 888, 1028 ],
+      [ 594, 167, 60, 441, 597 ],
+      [ 850, 54, -240, 471, 762 ],
+      [ 753, 359, -180, 753, 359 ],
+      [ 214, 382, 90, 382, 214 ],
+      [ 514, 712, 120, 873, 800 ],
+      [ 43, 29, -60, 45, 51 ],
+      [ 89, 608, -150, 380, 570 ],
+      [ 219, 760, 90, 760, 219 ],
+      [ 659, 244, 210, 691, 539 ],
+      [ 334, 146, -30, 361, 293 ],
+      [ 134, 591, 120, 578, 410 ],
+      [ 717, 460, 180, 717, 460 ],
+      [ 896, 257, -240, 670, 902 ],
+      [ 137, 417, 150, 326, 428 ],
+      [ 767, 34, 90, 34, 767 ],
+      [ 414, 66, 120, 263, 390 ],
+      [ 825, 132, -30, 779, 526 ],
+      [ 91, 296, -60, 300, 226 ],
+      [ 745, 22, 180, 745, 22 ],
+      [ 520, 272, 330, 585, 496 ],
+      [ 974, 372, 150, 1029, 807 ],
+      [ 626, 141, -150, 612, 434 ],
+      [ 350, 45, 120, 213, 324 ],
+      [ 552, 147, -240, 402, 550 ],
+      [ 239, 722, -210, 567, 743 ],
+      [ 873, 265, -150, 888, 664 ],
+      [ 521, 115, 0, 521, 115 ],
+      [ 979, 183, 270, 183, 979 ],
+      [ 401, 741, 300, 841, 717 ],
+      [ 147, 363, -180, 147, 363 ],
+      [ 86, 325, 180, 86, 325 ],
+      [ 813, 26, 300, 428, 717 ],
+      [ 105, 288, 360, 105, 288 ],
+      [ 763, 702, -240, 989, 1010 ],
+      [ 952, 112, -300, 572, 880 ],
+      [ 163, 767, -30, 524, 745 ],
+      [ 485, 389, 90, 389, 485 ],
+      [ 983, 355, 240, 797, 1028 ],
+      [ 852, 655, 240, 992, 1064 ],
+      [ 749, 765, -180, 749, 765 ],
+      [ 1007, 61, 150, 902, 555 ],
+      [ 737, 671, 180, 737, 671 ],
+      [ 654, 749, -300, 975, 940 ],
+      [ 631, 553, -360, 631, 553 ],
+      [ 803, 498, -240, 832, 943 ],
+      [ 914, 620, -240, 993, 1100 ],
+      [ 353, 215, 120, 362, 411 ],
+      [ 968, 185, -270, 185, 968 ],
+      [ 803, 55, 360, 803, 55 ],
+      [ 601, 616, 360, 601, 616 ],
+      [ 882, 604, -330, 1065, 963 ],
+      [ 571, 388, 330, 687, 621 ],
+      [ 295, 111, 300, 242, 310 ],
+      [ 402, 583, 90, 583, 402 ],
+      [ 420, 417, -180, 420, 417 ],
+      [ 588, 334, -330, 676, 582 ],
+      [ 753, 598, -120, 893, 950 ],
+      [ 412, 556, 60, 687, 634 ],
+      [ 545, 390, 120, 610, 665 ],
+      [ 526, 72, -30, 490, 325 ],
+      [ 502, 733, -180, 502, 733 ],
+      [ 560, 393, 210, 680, 619 ],
+      [ 487, 613, 300, 773, 727 ],
+      [ 388, 146, 120, 319, 408 ],
+      [ 1, 461, -210, 230, 398 ],
+      [ 278, 133, 90, 133, 278 ],
+      [ 357, 698, -60, 781, 658 ],
+      [ 723, 238, -270, 238, 723 ],
+      [ 310, 646, 120, 713, 590 ],
+      [ 994, 272, 180, 994, 272 ],
+      [ 451, 649, 150, 714, 786 ],
+      [ 713, 300, -210, 767, 615 ],
+      [ 467, 665, -360, 467, 665 ],
+      [ 369, 187, -240, 346, 411 ],
+      [ 24, 188, 210, 113, 174 ],
+      [ 234, 396, 360, 234, 396 ],
+      [ 889, 663, 270, 663, 889 ],
+      [ 293, 437, -240, 524, 470 ],
+      [ 438, 669, -360, 438, 669 ],
+      [ 78, 646, -90, 646, 78 ],
+      [ 836, 216, -210, 831, 603 ],
+      [ 524, 750, 90, 750, 524 ],
+      [ 733, 332, -30, 799, 654 ],
+      [ 736, 608, 180, 736, 608 ],
+      [ 933, 626, 360, 933, 626 ],
+      [ 721, 33, -30, 640, 389 ],
+      [ 686, 699, -120, 947, 943 ],
+      [ 556, 151, 300, 407, 556 ],
+      [ 743, 479, 210, 882, 785 ],
+      [ 767, 537, 90, 537, 767 ],
+      [ 130, 396, 300, 406, 310 ],
+      [ 357, 20, 270, 20, 357 ],
+      [ 984, 570, -150, 1136, 985 ],
+      [ 449, 353, -300, 530, 564 ],
+      [ 164, 285, 300, 327, 284 ],
+      [ 127, 57, 330, 137, 112 ],
+      [ 618, 571, 270, 571, 618 ],
+      [ 968, 220, -330, 948, 674 ],
+      [ 875, 9, 150, 761, 444 ],
+      [ 649, 584, -90, 584, 649 ],
+      [ 258, 681, 300, 717, 563 ],
+      [ 155, 181, 330, 224, 234 ],
+      [ 27, 151, 120, 144, 97 ],
+      [ 340, 487, -270, 487, 340 ],
+      [ 441, 610, 0, 441, 610 ],
+      [ 350, 705, 60, 785, 655 ],
+      [ 303, 400, -150, 461, 496 ],
+      [ 164, 357, 60, 390, 320 ],
+      [ 225, 245, 90, 245, 225 ],
+      [ 924, 731, -90, 731, 924 ],
+      [ 291, 156, -180, 291, 156 ],
+      [ 184, 272, 0, 184, 272 ],
+      [ 103, 292, 150, 235, 303 ],
+      [ 782, 547, -150, 950, 864 ],
+      [ 906, 109, -300, 546, 838 ],
+      [ 387, 371, -360, 387, 371 ],
+      [ 966, 598, 30, 1135, 1000 ],
+      [ 259, 721, -360, 259, 721 ],
+      [ 868, 121, -120, 538, 811 ],
+      [ 464, 46, -180, 464, 46 ],
+      [ 838, 264, 0, 838, 264 ],
+      [ 72, 402, 240, 383, 262 ],
+      [ 570, 479, -210, 732, 698 ],
+      [ 244, 297, 330, 359, 379 ],
+      [ 567, 208, -330, 595, 463 ],
+      [ 679, 497, 30, 836, 769 ],
+      [ 706, 454, -120, 745, 837 ],
+      [ 242, 648, -180, 242, 648 ],
+      [ 253, 531, -60, 585, 484 ],
+      [ 589, 111, 0, 589, 111 ],
+      [ 876, 739, 240, 1077, 1127 ],
+      [ 346, 25, -120, 194, 311 ],
+      [ 178, 452, 360, 178, 452 ],
+      [ 399, 634, -120, 747, 661 ],
+      [ 324, 292, 90, 292, 324 ],
+      [ 394, 33, -180, 394, 33 ],
+      [ 959, 562, 270, 562, 959 ],
+      [ 272, 743, 150, 606, 777 ],
+      [ 547, 164, -90, 164, 547 ],
+      [ 982, 606, 30, 1153, 1015 ],
+      [ 455, 494, 0, 455, 494 ],
+      [ 279, 753, 30, 617, 791 ],
+      [ 638, 118, -270, 118, 638 ],
+      [ 610, 417, 330, 736, 666 ],
+      [ 977, 660, -120, 1059, 1175 ],
+      [ 597, 187, -90, 187, 597 ],
+      [ 880, 138, -300, 559, 831 ],
+      [ 743, 342, -330, 814, 667 ],
+      [ 445, 752, -150, 760, 872 ],
+      [ 854, 720, -330, 1099, 1050 ],
+      [ 387, 292, 150, 481, 445 ],
+      [ 905, 501, 150, 1033, 885 ],
+      [ 431, 211, 270, 211, 431 ],
+      [ 558, 668, -90, 668, 558 ],
+      [ 507, 633, -180, 507, 633 ],
+      [ 843, 312, 0, 843, 312 ],
+      [ 199, 203, 120, 275, 272 ],
+      [ 303, 760, -300, 809, 642 ],
+      [ 374, 325, -300, 467, 485 ],
+      [ 662, 198, -360, 662, 198 ],
+      [ 734, 488, -60, 788, 879 ],
+      [ 440, 398, -330, 580, 564 ],
+      [ 126, 721, -120, 686, 469 ],
+      [ 993, 371, -210, 1044, 816 ],
+      [ 367, 750, -360, 367, 750 ],
+      [ 621, 615, -60, 842, 844 ],
+      [ 100, 764, 150, 468, 710 ],
+      [ 787, 223, 150, 792, 585 ],
+      [ 906, 503, -300, 888, 1035 ],
+      [ 1001, 231, -90, 231, 1001 ],
+      [ 8, 13, -360, 8, 13 ],
+      [ 428, 343, 0, 428, 343 ],
+      [ 491, 436, -30, 642, 623 ],
+      [ 835, 412, 330, 928, 774 ],
+      [ 20, 687, 300, 603, 360 ],
+      [ 49, 385, 150, 234, 356 ],
+      [ 493, 460, 150, 656, 643 ],
+      [ 183, 282, 360, 183, 282 ],
+      [ 886, 193, 120, 609, 862 ],
+      [ 999, 175, 330, 952, 651 ],
+      [ 350, 181, 360, 350, 181 ],
+      [ 352, 502, -60, 609, 555 ],
+      [ 883, 102, 360, 883, 102 ],
+      [ 327, 728, 0, 327, 728 ],
+      [ 264, 743, -60, 773, 599 ],
+      [ 177, 11, 300, 97, 158 ],
+      [ 909, 380, 0, 909, 380 ],
+      [ 610, 517, 270, 517, 610 ],
+      [ 608, 413, -270, 413, 608 ],
+      [ 251, 394, -120, 465, 413 ],
+      [ 202, 656, 60, 668, 502 ],
+      [ 170, 152, -180, 170, 152 ],
+      [ 594, 46, -90, 46, 594 ],
+      [ 575, 290, -120, 537, 641 ],
+      [ 82, 488, -150, 314, 463 ],
+      [ 504, 620, -150, 745, 788 ],
+      [ 415, 533, 210, 625, 668 ],
+      [ 939, 222, -30, 923, 661 ],
+      [ 813, 678, -360, 813, 678 ],
+      [ 944, 98, 0, 944, 98 ],
+      [ 284, 249, -90, 249, 284 ],
+      [ 888, 377, 60, 769, 957 ],
+      [ 113, 54, 90, 54, 113 ],
+      [ 498, 485, -360, 498, 485 ],
+      [ 828, 546, 90, 546, 828 ],
+      [ 99, 156, -30, 162, 184 ],
+      [ 409, 467, -270, 467, 409 ],
+      [ 200, 403, -60, 447, 374 ],
+      [ 679, 244, -150, 709, 549 ],
+      [ 685, 184, -60, 500, 685 ],
+      [ 191, 396, 210, 362, 437 ],
+      [ 572, 294, -180, 572, 294 ],
+      [ 130, 378, -120, 391, 300 ],
+      [ 773, 751, 330, 1044, 1036 ],
+      [ 778, 604, 120, 911, 974 ],
+      [ 409, 678, 270, 678, 409 ],
+      [ 867, 216, -30, 857, 620 ],
+      [ 1010, 366, 360, 1010, 366 ],
+      [ 425, 107, -150, 421, 304 ],
+      [ 743, 620, 30, 953, 908 ],
+      [ 167, 763, -330, 525, 744 ],
+      [ 946, 424, -30, 1030, 840 ],
+      [ 179, 521, 330, 415, 540 ],
+      [ 507, 332, 300, 540, 605 ],
+      [ 457, 147, 150, 468, 354 ],
+      [ 110, 453, 60, 446, 321 ],
+      [ 994, 335, 270, 335, 994 ],
+      [ 453, 324, -120, 506, 553 ],
+      [ 448, 642, -30, 707, 780 ],
+      [ 768, 431, -150, 880, 756 ],
+      [ 307, 556, -150, 542, 634 ],
+      [ 374, 497, 240, 616, 571 ],
+      [ 831, 631, 0, 831, 631 ],
+      [ 768, 243, 330, 786, 594 ],
+      [ 683, 585, -270, 585, 683 ],
+      [ 377, 667, 150, 659, 765 ],
+      [ 976, 645, -270, 645, 976 ],
+      [ 838, 216, 60, 605, 833 ],
+      [ 163, 552, -60, 558, 417 ],
+      [ 654, 359, 360, 654, 359 ],
+      [ 947, 589, 150, 1114, 982 ],
+      [ 210, 101, -120, 191, 231 ],
+      [ 37, 724, -240, 645, 393 ],
+      [ 557, 532, -30, 747, 739 ],
+      [ 495, 276, -180, 495, 276 ],
+      [ 628, 558, -300, 796, 822 ],
+      [ 341, 522, 330, 555, 622 ],
+      [ 500, 382, -210, 624, 579 ],
+      [ 66, 503, 330, 308, 469 ],
+      [ 488, 225, -60, 437, 534 ],
+      [ 460, 168, -240, 374, 481 ],
+      [ 148, 325, -150, 290, 354 ],
+      [ 499, 352, -180, 499, 352 ],
+      [ 667, 2, 330, 577, 335 ],
+      [ 133, 373, -150, 301, 388 ],
+      [ 379, 76, -360, 379, 76 ],
+      [ 490, 332, 150, 590, 531 ],
+      [ 435, 706, -210, 729, 827 ],
+      [ 668, 755, 270, 755, 668 ],
+      [ 612, 353, -270, 353, 612 ],
+      [ 10, 697, -90, 697, 10 ],
+      [ 193, 40, 210, 186, 130 ],
+      [ 509, 414, -180, 509, 414 ],
+      [ 766, 146, -180, 766, 146 ],
+      [ 707, 245, 180, 707, 245 ],
+      [ 1016, 529, 240, 965, 1143 ],
+      [ 20, 128, -180, 20, 128 ],
+      [ 743, 454, -240, 764, 869 ],
+      [ 950, 187, -240, 636, 914 ],
+      [ 804, 646, 90, 646, 804 ],
+      [ 957, 653, 30, 1154, 1044 ],
+      [ 309, 30, 60, 180, 282 ],
+      [ 94, 411, -270, 411, 94 ],
+      [ 347, 217, -150, 408, 360 ],
+      [ 603, 747, 90, 747, 603 ],
+      [ 331, 741, -150, 656, 806 ],
+      [ 160, 755, 0, 160, 755 ],
+      [ 431, 544, -330, 645, 686 ],
+      [ 618, 488, -150, 778, 731 ],
+      [ 788, 323, -270, 323, 788 ],
+      [ 404, 272, -360, 404, 272 ],
+      [ 948, 504, -330, 1072, 909 ],
+      [ 522, 574, 60, 757, 739 ],
+      [ 648, 66, 270, 66, 648 ],
+      [ 967, 518, 240, 931, 1095 ],
+      [ 589, 766, 210, 892, 956 ],
+      [ 915, 118, 210, 850, 558 ],
+      [ 387, 441, 0, 387, 441 ],
+      [ 464, 136, -270, 136, 464 ],
+      [ 790, 727, 30, 1047, 1024 ],
+      [ 952, 262, 300, 701, 955 ],
+      [ 960, 204, 30, 933, 656 ],
+      [ 1008, 596, -150, 1169, 1019 ],
+      [ 579, 313, -90, 313, 579 ],
+      [ 438, 270, -330, 514, 452 ],
+      [ 270, 711, -330, 588, 750 ],
+      [ 64, 629, -210, 369, 575 ],
+      [ 865, 151, 210, 824, 562 ],
+      [ 343, 499, 330, 546, 603 ],
+      [ 471, 323, 300, 514, 568 ],
+      [ 5, 268, -180, 5, 268 ],
+      [ 926, 220, 0, 926, 220 ],
+      [ 470, 208, -150, 510, 414 ],
+      [ 778, 641, 150, 993, 942 ],
+      [ 150, 202, -330, 230, 249 ],
+      [ 212, 404, 360, 212, 404 ],
+      [ 270, 451, 210, 458, 525 ],
+      [ 485, 332, 360, 485, 332 ],
+      [ 262, 588, 90, 588, 262 ],
+      [ 220, 173, -330, 276, 259 ],
+      [ 124, 176, -60, 212, 195 ],
+      [ 375, 102, 150, 375, 274 ],
+      [ 898, 454, 330, 1003, 842 ],
+      [ 166, 269, 210, 277, 315 ],
+      [ 876, 381, -330, 948, 767 ],
+      [ 921, 540, 60, 928, 1067 ],
+      [ 891, 742, -240, 1088, 1141 ],
+      [ 674, 337, 60, 628, 751 ],
+      [ 659, 533, -90, 533, 659 ],
+      [ 284, 698, 60, 745, 594 ],
+      [ 339, 22, 240, 187, 303 ],
+      [ 750, 303, 330, 800, 637 ],
+      [ 431, 208, 30, 477, 395 ],
+      [ 388, 332, 300, 480, 502 ],
+      [ 176, 221, -90, 221, 176 ],
+      [ 231, 144, -300, 240, 272 ],
+      [ 824, 43, -330, 734, 448 ],
+      [ 995, 548, 0, 995, 548 ],
+      [ 582, 274, -240, 527, 640 ],
+      [ 953, 486, -300, 897, 1068 ],
+      [ 529, 740, -300, 905, 828 ],
+      [ 340, 535, 0, 340, 535 ],
+      [ 285, 90, 210, 290, 219 ],
+      [ 835, 380, -210, 913, 745 ],
+      [ 719, 512, 0, 719, 512 ],
+      [ 86, 685, 150, 416, 634 ],
+      [ 172, 535, 180, 172, 535 ],
+      [ 222, 512, -30, 447, 554 ],
+      [ 721, 180, 240, 515, 713 ],
+      [ 906, 127, -30, 847, 563 ],
+      [ 997, 523, -60, 950, 1124 ],
+      [ 94, 10, -300, 55, 86 ],
+      [ 617, 223, -210, 645, 500 ],
+      [ 393, 81, 150, 380, 265 ],
+      [ 612, 620, -90, 620, 612 ],
+      [ 100, 684, -180, 100, 684 ],
+      [ 804, 44, 360, 804, 44 ],
+      [ 540, 211, 90, 211, 540 ],
+      [ 1007, 751, 270, 751, 1007 ],
+      [ 815, 663, -360, 815, 663 ],
+      [ 247, 642, 150, 534, 678 ],
+      [ 665, 712, 180, 665, 712 ],
+      [ 771, 407, -360, 771, 407 ],
+      [ 995, 701, -300, 1104, 1211 ],
+      [ 702, 392, 330, 802, 690 ],
+      [ 67, 467, 240, 436, 291 ],
+      [ 343, 301, 270, 301, 343 ],
+      [ 308, 705, -270, 705, 308 ],
+      [ 955, 692, -270, 692, 955 ],
+      [ 817, 535, 360, 817, 535 ],
+      [ 847, 720, 240, 1046, 1092 ],
+      [ 551, 450, 180, 551, 450 ],
+      [ 267, 259, -180, 267, 259 ],
+      [ 279, 237, -240, 344, 358 ],
+      [ 400, 764, 150, 728, 860 ],
+      [ 322, 45, -150, 300, 199 ],
+      [ 131, 302, 150, 264, 326 ],
+      [ 1023, 533, 90, 533, 1023 ],
+      [ 147, 480, 0, 147, 480 ],
+      [ 271, 324, -210, 396, 415 ],
+      [ 255, 192, -270, 192, 255 ],
+      [ 71, 604, 180, 71, 604 ],
+      [ 835, 36, -330, 741, 448 ],
+      [ 93, 245, -90, 245, 93 ],
+      [ 286, 545, -90, 545, 286 ],
+      [ 1000, 17, -60, 513, 874 ],
+      [ 288, 115, 240, 243, 306 ],
+      [ 1000, 114, 0, 1000, 114 ],
+      [ 604, 223, -270, 223, 604 ],
+      [ 106, 427, 60, 422, 304 ],
+      [ 322, 618, 240, 695, 586 ],
+      [ 472, 670, 60, 815, 743 ],
+      [ 197, 528, 120, 555, 433 ],
+      [ 267, 597, 360, 267, 597 ],
+      [ 653, 43, 120, 363, 585 ],
+      [ 9, 25, 150, 19, 25 ],
+      [ 448, 240, 270, 240, 448 ],
+      [ 265, 222, 360, 265, 222 ],
+      [ 792, 674, -180, 792, 674 ],
+      [ 934, 753, 240, 1118, 1184 ],
+      [ 484, 226, 90, 226, 484 ],
+      [ 289, 580, 0, 289, 580 ],
+      [ 900, 727, -240, 1079, 1141 ],
+      [ 533, 159, 360, 533, 159 ],
+      [ 493, 649, -360, 493, 649 ],
+      [ 155, 655, -330, 461, 644 ],
+      [ 863, 223, -90, 223, 863 ],
+      [ 700, 421, 120, 714, 815 ],
+      [ 688, 247, 30, 718, 557 ],
+      [ 973, 179, 0, 973, 179 ],
+      [ 803, 542, 240, 869, 965 ],
+      [ 431, 758, 60, 871, 752 ],
+      [ 952, 665, 0, 952, 665 ],
+      [ 128, 297, 150, 258, 319 ],
+      [ 100, 666, 60, 626, 419 ],
+      [ 129, 14, -60, 75, 118 ],
+      [ 190, 661, 150, 494, 665 ],
+      [ 570, 417, -180, 570, 417 ],
+      [ 221, 165, 60, 253, 273 ],
+      [ 769, 126, 240, 492, 727 ],
+      [ 274, 728, 0, 274, 728 ],
+      [ 80, 282, 0, 80, 282 ],
+      [ 658, 228, -90, 228, 658 ],
+      [ 157, 324, 180, 157, 324 ],
+      [ 892, 399, 90, 399, 892 ],
+      [ 442, 495, 90, 495, 442 ],
+      [ 866, 637, 0, 866, 637 ],
+      [ 561, 296, -360, 561, 296 ],
+      [ 818, 461, -180, 818, 461 ],
+      [ 379, 270, -60, 422, 463 ],
+      [ 178, 475, -120, 499, 391 ],
+      [ 699, 535, 180, 699, 535 ],
+      [ 182, 260, -360, 182, 260 ],
+      [ 551, 378, -30, 665, 602 ],
+      [ 291, 278, 360, 291, 278 ],
+      [ 919, 609, 90, 609, 919 ],
+      [ 541, 490, -60, 693, 713 ],
+      [ 19, 143, 240, 132, 87 ],
+      [ 53, 756, -60, 680, 423 ],
+      [ 305, 272, 210, 399, 387 ],
+      [ 725, 405, -90, 405, 725 ],
+      [ 66, 161, -300, 171, 137 ],
+      [ 807, 297, -60, 659, 846 ],
+      [ 827, 710, 300, 1027, 1071 ],
+      [ 255, 160, -180, 255, 160 ],
+      [ 214, 81, -330, 225, 176 ],
+      [ 833, 487, 150, 964, 837 ],
+      [ 253, 501, 300, 559, 469 ],
+      [ 66, 540, 270, 540, 66 ],
+      [ 494, 1, -210, 427, 246 ],
+      [ 257, 544, 180, 257, 544 ],
+      [ 652, 593, 360, 652, 593 ],
+      [ 737, 430, -120, 739, 852 ],
+      [ 143, 282, -180, 143, 282 ],
+      [ 53, 472, -30, 280, 435 ],
+      [ 333, 633, 60, 714, 604 ],
+      [ 401, 489, -210, 591, 622 ],
+      [ 98, 678, 270, 678, 98 ],
+      [ 1009, 727, 60, 1134, 1236 ],
+      [ 879, 329, 60, 724, 925 ],
+      [ 87, 522, -180, 87, 522 ],
+      [ 858, 243, -330, 864, 638 ],
+      [ 819, 27, 90, 27, 819 ],
+      [ 151, 134, 360, 151, 134 ],
+      [ 429, 174, 60, 365, 458 ],
+      [ 921, 423, -60, 825, 1008 ],
+      [ 496, 724, -330, 791, 874 ],
+      [ 719, 29, 330, 636, 384 ],
+      [ 585, 17, 270, 17, 585 ],
+      [ 147, 676, -150, 464, 657 ],
+      [ 733, 740, 360, 733, 740 ],
+      [ 1020, 615, -150, 1190, 1042 ],
+      [ 48, 461, -120, 422, 271 ],
+      [ 672, 574, 0, 672, 574 ],
+      [ 647, 128, 180, 647, 128 ],
+      [ 227, 50, -150, 220, 155 ],
+      [ 651, 421, -210, 773, 689 ],
+      [ 701, 192, -180, 701, 192 ],
+      [ 631, 631, -150, 861, 860 ],
+      [ 506, 741, -240, 894, 807 ],
+      [ 820, 522, -270, 522, 820 ],
+      [ 805, 519, 330, 956, 851 ],
+      [ 89, 554, 30, 354, 524 ],
+      [ 432, 290, -180, 432, 290 ],
+      [ 953, 7, -60, 481, 828 ],
+      [ 680, 177, 0, 680, 177 ],
+      [ 972, 665, -330, 1173, 1061 ],
+      [ 179, 422, -150, 365, 453 ],
+      [ 448, 127, -270, 127, 448 ],
+      [ 738, 507, -300, 807, 892 ],
+      [ 905, 354, 210, 959, 758 ],
+      [ 10, 189, -30, 102, 169 ],
+      [ 959, 255, -240, 700, 956 ],
+      [ 474, 578, 30, 699, 737 ],
+      [ 755, 524, 30, 915, 831 ],
+      [ 181, 266, 210, 288, 319 ],
+      [ 698, 227, 120, 545, 716 ],
+      [ 751, 361, -240, 688, 829 ],
+      [ 37, 696, -120, 620, 379 ],
+      [ 163, 482, -360, 163, 482 ],
+      [ 252, 392, -30, 413, 465 ],
+      [ 13, 399, 150, 210, 351 ],
+      [ 465, 350, -330, 577, 535 ],
+      [ 631, 706, 240, 925, 898 ],
+      [ 159, 503, 0, 159, 503 ],
+      [ 719, 639, 240, 911, 941 ],
+      [ 491, 394, -270, 394, 491 ],
+      [ 123, 189, 60, 225, 200 ],
+      [ 318, 217, 0, 318, 217 ],
+      [ 682, 338, -270, 338, 682 ],
+      [ 697, 527, 90, 527, 697 ],
+      [ 159, 536, -270, 536, 159 ],
+      [ 896, 116, 90, 116, 896 ],
+      [ 949, 589, 30, 1115, 984 ],
+      [ 748, 708, -240, 986, 1000 ],
+      [ 222, 479, -360, 222, 479 ],
+      [ 50, 78, 30, 82, 92 ],
+      [ 180, 170, 210, 239, 236 ],
+      [ 790, 409, -330, 888, 748 ],
+      [ 280, 152, 0, 280, 152 ],
+      [ 411, 675, -240, 790, 691 ],
+      [ 41, 26, 270, 26, 41 ],
+      [ 202, 698, -360, 202, 698 ],
+      [ 829, 641, 210, 1037, 968 ],
+      [ 348, 433, 150, 517, 547 ],
+      [ 538, 599, -120, 787, 764 ],
+      [ 555, 636, -60, 827, 798 ],
+      [ 73, 2, 120, 38, 63 ],
+      [ 867, 594, -240, 947, 1046 ],
+      [ 925, 36, -90, 36, 925 ],
+      [ 409, 344, -180, 409, 344 ],
+      [ 595, 374, -150, 701, 620 ],
+      [ 470, 525, -210, 669, 688 ],
+      [ 499, 378, -330, 621, 576 ],
+      [ 289, 638, 90, 638, 289 ],
+      [ 1021, 273, -90, 273, 1021 ],
+      [ 343, 689, -210, 641, 767 ],
+      [ 793, 743, -210, 1057, 1038 ],
+      [ 445, 625, 360, 445, 625 ],
+      [ 641, 550, -360, 641, 550 ],
+      [ 16, 89, 0, 16, 89 ],
+      [ 289, 534, 360, 289, 534 ],
+      [ 596, 119, 120, 400, 574 ],
+      [ 808, 493, -270, 493, 808 ],
+      [ 850, 709, 360, 850, 709 ],
+      [ 445, 707, -120, 833, 738 ],
+      [ 838, 195, -210, 822, 586 ],
+      [ 30, 22, -240, 33, 35 ],
+      [ 249, 355, -360, 249, 355 ],
+      [ 235, 68, 150, 237, 175 ],
+      [ 269, 79, 240, 201, 271 ],
+      [ 761, 295, 30, 806, 635 ],
+      [ 726, 742, 150, 999, 1004 ],
+      [ 367, 580, -120, 684, 606 ],
+      [ 512, 449, -180, 512, 449 ],
+      [ 483, 15, -240, 254, 424 ],
+      [ 817, 643, -60, 964, 1028 ],
+      [ 22, 665, -30, 351, 587 ],
+      [ 217, 84, 300, 180, 229 ],
+      [ 221, 260, 360, 221, 260 ],
+      [ 958, 461, -300, 877, 1059 ],
+      [ 788, 263, 0, 788, 263 ],
+      [ 307, 40, -30, 284, 188 ],
+      [ 1007, 315, -210, 1029, 775 ],
+      [ 316, 698, 210, 621, 761 ],
+      [ 569, 292, 240, 536, 637 ],
+      [ 739, 137, 120, 488, 706 ],
+      [ 146, 153, 0, 146, 153 ],
+      [ 605, 315, 90, 315, 605 ],
+      [ 512, 480, 330, 682, 672 ],
+      [ 509, 430, 30, 655, 626 ],
+      [ 610, 253, 300, 522, 654 ],
+      [ 80, 483, 330, 310, 458 ],
+      [ 539, 470, -120, 675, 700 ],
+      [ 747, 707, -180, 747, 707 ],
+      [ 528, 365, 120, 579, 638 ],
+      [ 329, 151, 240, 294, 359 ],
+      [ 987, 260, -360, 987, 260 ],
+      [ 483, 713, -60, 857, 774 ],
+      [ 90, 329, -330, 241, 329 ],
+      [ 43, 710, 90, 710, 43 ],
+      [ 610, 400, 330, 727, 651 ],
+      [ 504, 460, 60, 649, 666 ],
+      [ 450, 96, -240, 307, 436 ],
+      [ 815, 655, -300, 974, 1032 ],
+      [ 63, 283, 60, 276, 195 ],
+      [ 724, 530, 210, 891, 820 ],
+      [ 542, 501, -300, 704, 719 ],
+      [ 563, 95, -360, 563, 95 ],
+      [ 1004, 162, -30, 949, 642 ],
+      [ 36, 194, -90, 194, 36 ],
+      [ 665, 652, 300, 896, 901 ],
+      [ 607, 261, 0, 607, 261 ],
+      [ 169, 598, 90, 598, 169 ],
+      [ 357, 441, 0, 357, 441 ],
+      [ 462, 488, 270, 488, 462 ],
+      [ 29, 263, 30, 156, 242 ],
+      [ 820, 669, -240, 988, 1043 ],
+      [ 934, 323, -150, 969, 746 ],
+      [ 974, 308, 30, 997, 753 ],
+      [ 429, 334, 210, 537, 502 ],
+      [ 830, 65, 90, 65, 830 ],
+      [ 739, 520, 360, 739, 520 ],
+      [ 237, 646, 180, 237, 646 ],
+      [ 885, 145, -120, 567, 838 ],
+      [ 359, 491, 330, 555, 604 ],
+      [ 210, 512, -150, 436, 547 ],
+      [ 767, 359, -240, 694, 842 ],
+      [ 967, 291, 60, 735, 982 ],
+      [ 270, 253, 360, 270, 253 ],
+      [ 813, 574, -60, 902, 991 ],
+      [ 589, 428, 0, 589, 428 ],
+      [ 210, 214, -240, 289, 287 ],
+      [ 179, 391, -360, 179, 391 ],
+      [ 944, 287, -210, 960, 719 ],
+      [ 249, 556, 270, 556, 249 ],
+      [ 204, 713, 0, 204, 713 ],
+      [ 509, 520, 360, 509, 520 ],
+      [ 682, 477, -90, 477, 682 ],
+      [ 262, 679, 150, 565, 717 ],
+      [ 251, 520, -60, 574, 477 ],
+      [ 686, 194, 360, 686, 194 ],
+      [ 182, 351, -180, 182, 351 ],
+      [ 371, 485, 210, 563, 604 ],
+      [ 396, 425, -270, 425, 396 ],
+      [ 614, 611, 270, 611, 614 ],
+      [ 461, 763, 240, 890, 780 ],
+      [ 991, 377, 0, 991, 377 ],
+      [ 974, 120, -300, 590, 903 ],
+      [ 320, 316, 360, 320, 316 ],
+      [ 3, 504, 120, 437, 253 ],
+      [ 451, 251, 300, 441, 515 ],
+      [ 444, 387, -90, 387, 444 ],
+      [ 723, 664, -360, 723, 664 ],
+      [ 498, 193, 30, 527, 415 ],
+      [ 656, 653, -120, 893, 894 ],
+      [ 529, 230, -120, 462, 572 ],
+      [ 329, 205, 240, 341, 386 ],
+      [ 821, 168, 360, 821, 168 ],
+      [ 925, 407, -90, 407, 925 ],
+      [ 909, 409, -330, 991, 808 ],
+      [ 562, 747, -90, 747, 562 ],
+      [ 473, 312, 300, 505, 565 ],
+      [ 852, 85, 180, 852, 85 ],
+      [ 852, 459, 360, 852, 459 ],
+      [ 394, 182, 270, 182, 394 ],
+      [ 750, 579, -270, 579, 750 ],
+      [ 74, 57, -60, 84, 92 ],
+      [ 924, 672, 90, 672, 924 ],
+      [ 910, 597, -270, 597, 910 ],
+      [ 292, 511, 150, 507, 587 ],
+      [ 346, 164, 120, 314, 380 ],
+      [ 734, 518, -330, 894, 815 ],
+      [ 613, 389, -240, 643, 723 ],
+      [ 353, 260, 210, 434, 400 ],
+      [ 349, 555, -360, 349, 555 ],
+      [ 191, 349, 210, 339, 396 ],
+      [ 340, 404, 240, 519, 495 ],
+      [ 762, 329, 150, 823, 664 ],
+      [ 383, 243, 0, 383, 243 ],
+      [ 546, 462, -270, 462, 546 ],
+      [ 229, 721, -90, 721, 229 ],
+      [ 908, 503, -330, 1037, 889 ],
+      [ 977, 194, 30, 943, 656 ],
+      [ 136, 458, 300, 463, 346 ],
+      [ 930, 720, 90, 720, 930 ],
+      [ 943, 95, -330, 863, 553 ],
+      [ 702, 349, 60, 652, 781 ],
+      [ 536, 152, -360, 536, 152 ],
+      [ 243, 439, -120, 500, 429 ],
+      [ 745, 80, 330, 684, 441 ],
+      [ 903, 251, 270, 251, 903 ],
+      [ 256, 164, 30, 303, 269 ],
+      [ 299, 129, 210, 322, 260 ],
+      [ 859, 230, -90, 230, 859 ],
+      [ 742, 160, -150, 721, 509 ],
+      [ 341, 98, -60, 254, 344 ],
+      [ 404, 624, 300, 740, 661 ],
+      [ 1006, 258, -300, 725, 1000 ],
+      [ 1021, 440, 120, 891, 1103 ],
+      [ 336, 230, 180, 336, 230 ],
+      [ 266, 139, -300, 252, 299 ],
+      [ 132, 331, -150, 279, 352 ],
+      [ 669, 554, -30, 855, 814 ],
+      [ 439, 430, 210, 594, 590 ],
+      [ 820, 219, 360, 820, 219 ],
+      [ 112, 474, -300, 465, 333 ],
+      [ 553, 8, 300, 282, 482 ],
     ];
   }
 
diff --git a/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php b/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php
index db78cd9458..faff21bb32 100644
--- a/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php
@@ -269,14 +269,6 @@ public static function providerTestParse() {
           'fragment' => 'footer',
         ],
       ],
-      'absolute fragment, no query' => [
-        'http://www.example.com/my/path#footer',
-        [
-          'path' => 'http://www.example.com/my/path',
-          'query' => [],
-          'fragment' => 'footer',
-        ],
-      ],
       [
         'http://',
         [
@@ -303,14 +295,6 @@ public static function providerTestParse() {
           'fragment' => 'footer',
         ],
       ],
-      'relative fragment, no query' => [
-        '/my/path#footer',
-        [
-          'path' => '/my/path',
-          'query' => [],
-          'fragment' => 'footer',
-        ],
-      ],
     ];
   }
 
@@ -407,11 +391,11 @@ public static function providerTestIsExternal() {
    * @covers ::filterBadProtocol
    *
    * @param string $uri
-   *   Protocol URI.
+   *    Protocol URI.
    * @param string $expected
-   *   Expected escaped value.
+   *    Expected escaped value.
    * @param array $protocols
-   *   Protocols to allow.
+   *    Protocols to allow.
    */
   public function testFilterBadProtocol($uri, $expected, $protocols) {
     UrlHelper::setAllowedProtocols($protocols);
@@ -446,11 +430,11 @@ public static function providerTestFilterBadProtocol() {
    * @covers ::stripDangerousProtocols
    *
    * @param string $uri
-   *   Protocol URI.
+   *    Protocol URI.
    * @param string $expected
-   *   Expected escaped value.
+   *    Expected escaped value.
    * @param array $protocols
-   *   Protocols to allow.
+   *    Protocols to allow.
    */
   public function testStripDangerousProtocols($uri, $expected, $protocols) {
     UrlHelper::setAllowedProtocols($protocols);
diff --git a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
index 5bd622061d..647da61255 100644
--- a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
@@ -128,9 +128,6 @@ public function testAccessForbiddenReason() {
     $reason = $this->getRandomGenerator()->string();
     $b = AccessResult::forbidden($reason);
     $verify($b, $reason);
-
-    $b = AccessResult::forbiddenIf(TRUE, $reason);
-    $verify($b, $reason);
   }
 
   /**
@@ -701,6 +698,8 @@ public function andOrCacheabilityPropagationProvider() {
       [$neutral_un, 'OR', $forbidden_un, FALSE, NULL],
 
 
+
+
       // Allowed (ct) AND allowed (ct,cf,un).
       [$allowed_ct, 'AND', $allowed_ct, TRUE, TRUE],
       [$allowed_ct, 'AND', $allowed_cf, TRUE, FALSE],
diff --git a/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php b/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php
index 5b7ae314a3..52ed59cc4f 100644
--- a/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php
@@ -142,9 +142,7 @@ public function testValidateParameterTypes($token, $value) {
 
     // The following check might throw PHP fatals and notices, so we disable
     // error assertions.
-    set_error_handler(function () {
-      return TRUE;
-    });
+    set_error_handler(function () {return TRUE;});
     $this->assertFalse($this->generator->validate($token, $value));
     restore_error_handler();
   }
diff --git a/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php b/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
index db39f1079b..5eecf1cd79 100644
--- a/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
+++ b/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
@@ -87,12 +87,12 @@ public function providerTestMerge() {
   public function testAddCacheTags() {
     $metadata = new CacheableMetadata();
     $add_expected = [
-      [[], [] ],
-      [['foo:bar'], ['foo:bar'] ],
-      [['foo:baz'], ['foo:bar', 'foo:baz'] ],
-      [['axx:first', 'foo:baz'], ['axx:first', 'foo:bar', 'foo:baz'] ],
-      [[], ['axx:first', 'foo:bar', 'foo:baz'] ],
-      [['axx:first'], ['axx:first', 'foo:bar', 'foo:baz'] ],
+      [ [], [] ],
+      [ ['foo:bar'], ['foo:bar'] ],
+      [ ['foo:baz'], ['foo:bar', 'foo:baz'] ],
+      [ ['axx:first', 'foo:baz'], ['axx:first', 'foo:bar', 'foo:baz'] ],
+      [ [], ['axx:first', 'foo:bar', 'foo:baz'] ],
+      [ ['axx:first'], ['axx:first', 'foo:bar', 'foo:baz'] ],
     ];
 
     foreach ($add_expected as $data) {
diff --git a/core/tests/Drupal/Tests/Core/Cache/Context/HeadersCacheContextTest.php b/core/tests/Drupal/Tests/Core/Cache/Context/HeadersCacheContextTest.php
deleted file mode 100644
index 8f69e21740..0000000000
--- a/core/tests/Drupal/Tests/Core/Cache/Context/HeadersCacheContextTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace Drupal\Tests\Core\Cache\Context;
-
-use Drupal\Core\Cache\Context\HeadersCacheContext;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * @coversDefaultClass \Drupal\Core\Cache\Context\HeadersCacheContext
- * @group Cache
- */
-class HeadersCacheContextTest extends UnitTestCase {
-
-  /**
-   * @covers ::getContext
-   *
-   * @dataProvider providerTestGetContext
-   */
-  public function testGetContext($headers, $header_name, $context) {
-    $request_stack = new RequestStack();
-    $request = Request::create('/', 'GET');
-    // Request defaults could change, so compare with default values instead of
-    // passed in context value.
-    $request->headers->replace($headers);
-    $request_stack->push($request);
-    $cache_context = new HeadersCacheContext($request_stack);
-    $this->assertSame($cache_context->getContext($header_name), $context);
-  }
-
-  /**
-   * Provides a list of headers and expected cache contexts.
-   */
-  public function providerTestGetContext() {
-    return [
-      [[], NULL, ''],
-      [[], 'foo', ''],
-      // Non-empty headers.
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], NULL, 'alpaca=&llama=rocks&panda=drools&z=0'],
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], 'llama', 'rocks'],
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], 'alpaca', '?valueless?'],
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], 'panda', 'drools'],
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], 'z', '0'],
-      [['llama' => 'rocks', 'alpaca' => '', 'panda' => 'drools', 'z' => '0'], 'chicken', ''],
-      // Header value could be an array.
-      [['z' => ['0', '1']], NULL, 'z=0,1'],
-      // Values are sorted to minimize cache variations.
-      [['z' => ['1', '0'], 'a' => []], NULL, 'a=&z=0,1'],
-      [['a' => [], 'z' => ['1', '0']], NULL, 'a=&z=0,1'],
-    ];
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/Core/Cache/DatabaseBackendFactoryTest.php b/core/tests/Drupal/Tests/Core/Cache/DatabaseBackendFactoryTest.php
deleted file mode 100644
index 9d5ac4bdf9..0000000000
--- a/core/tests/Drupal/Tests/Core/Cache/DatabaseBackendFactoryTest.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-namespace Drupal\Tests\Core\Cache;
-
-use Drupal\Core\Cache\CacheTagsChecksumInterface;
-use Drupal\Core\Cache\DatabaseBackend;
-use Drupal\Core\Cache\DatabaseBackendFactory;
-use Drupal\Core\Database\Connection;
-use Drupal\Core\Site\Settings;
-use Drupal\Tests\UnitTestCase;
-
-/**
- * @coversDefaultClass \Drupal\Core\Cache\DatabaseBackendFactory
- * @group Cache
- */
-class DatabaseBackendFactoryTest extends UnitTestCase {
-
-  /**
-   * @covers ::__construct
-   * @covers ::get
-   * @dataProvider getProvider
-   */
-  public function testGet(array $settings, $expected_max_rows_foo, $expected_max_rows_bar) {
-    $database_backend_factory = new DatabaseBackendFactory(
-      $this->prophesize(Connection::class)->reveal(),
-      $this->prophesize(CacheTagsChecksumInterface::class)->reveal(),
-      new Settings($settings)
-    );
-
-    $this->assertSame($expected_max_rows_foo, $database_backend_factory->get('foo')->getMaxRows());
-    $this->assertSame($expected_max_rows_bar, $database_backend_factory->get('bar')->getMaxRows());
-  }
-
-  public function getProvider() {
-    return [
-      'default' => [
-        [],
-        DatabaseBackend::DEFAULT_MAX_ROWS,
-        DatabaseBackend::DEFAULT_MAX_ROWS,
-      ],
-      'default overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'default' => 99,
-          ],
-        ],
-        99,
-        99,
-      ],
-      'default + foo bin overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'bins' => [
-              'foo' => 13,
-            ],
-          ],
-        ],
-        13,
-        DatabaseBackend::DEFAULT_MAX_ROWS,
-      ],
-      'default + bar bin overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'bins' => [
-              'bar' => 13,
-            ],
-          ],
-        ],
-        DatabaseBackend::DEFAULT_MAX_ROWS,
-        13,
-      ],
-      'default overridden + bar bin overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'default' => 99,
-            'bins' => [
-              'bar' => 13,
-            ],
-          ],
-        ],
-        99,
-        13,
-      ],
-      'default + both bins overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'bins' => [
-              'foo' => 13,
-              'bar' => 31,
-            ],
-          ],
-        ],
-        13,
-        31,
-      ],
-      'default overridden + both bins overridden' => [
-        [
-          'database_cache_max_rows' => [
-            'default' => 99,
-            'bins' => [
-              'foo' => 13,
-              'bar' => 31,
-            ],
-          ],
-        ],
-        13,
-        31,
-      ],
-    ];
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
index 0d417ab494..0a5d3d3e38 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
@@ -10,7 +10,6 @@
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Config\Schema\SchemaIncompleteException;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Plugin\DefaultLazyPluginCollection;
 use Drupal\Tests\Core\Config\Entity\Fixtures\ConfigEntityBaseWithPluginCollections;
@@ -38,11 +37,11 @@ class ConfigEntityBaseUnitTest extends UnitTestCase {
   protected $entityType;
 
   /**
-   * The entity type manager used for testing.
+   * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The ID of the type of the entity under test.
@@ -113,8 +112,8 @@ protected function setUp() {
       ->method('getConfigPrefix')
       ->willReturn('test_provider.' . $this->entityTypeId);
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -132,7 +131,7 @@ protected function setUp() {
     $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface');
 
     $container = new ContainerBuilder();
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('uuid', $this->uuid);
     $container->set('language_manager', $this->languageManager);
     $container->set('cache_tags.invalidator', $this->cacheTagsInvalidator);
@@ -469,7 +468,7 @@ public function testCreateDuplicate() {
    * @covers ::sort
    */
   public function testSort() {
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue([
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
index 3d86ecd112..c4540e1773 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
@@ -17,8 +17,8 @@
 use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityMalformedException;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageException;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Query\QueryFactoryInterface;
 use Drupal\Core\Entity\Query\QueryInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -136,8 +136,8 @@ protected function setUp() {
     $this->entityStorage = new ConfigEntityStorage($entity_type, $this->configFactory->reveal(), $this->uuidService->reveal(), $this->languageManager->reveal());
     $this->entityStorage->setModuleHandler($this->moduleHandler->reveal());
 
-    $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class);
-    $entity_type_manager->getDefinition('test_entity_type')->willReturn($entity_type);
+    $entity_manager = $this->prophesize(EntityManagerInterface::class);
+    $entity_manager->getDefinition('test_entity_type')->willReturn($entity_type);
 
     $this->cacheTagsInvalidator = $this->prophesize(CacheTagsInvalidatorInterface::class);
 
@@ -149,7 +149,7 @@ protected function setUp() {
     $this->configManager = $this->prophesize(ConfigManagerInterface::class);
 
     $container = new ContainerBuilder();
-    $container->set('entity_type.manager', $entity_type_manager->reveal());
+    $container->set('entity.manager', $entity_manager->reveal());
     $container->set('entity.query.config', $entity_query_factory->reveal());
     $container->set('config.typed', $typed_config_manager->reveal());
     $container->set('cache_tags.invalidator', $this->cacheTagsInvalidator->reveal());
@@ -553,7 +553,7 @@ public function testLoadMultipleAll() {
     $bar_config_object->getName()->willReturn('foo');
 
     $this->configFactory->listAll('the_provider.the_config_prefix.')
-      ->willReturn(['the_provider.the_config_prefix.foo', 'the_provider.the_config_prefix.bar']);
+      ->willReturn(['the_provider.the_config_prefix.foo' , 'the_provider.the_config_prefix.bar']);
     $this->configFactory->loadMultiple(['the_provider.the_config_prefix.foo', 'the_provider.the_config_prefix.bar'])
       ->willReturn([$foo_config_object->reveal(), $bar_config_object->reveal()]);
 
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
index 0f1ffc47ee..728fdca457 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
@@ -3,8 +3,6 @@
 namespace Drupal\Tests\Core\Config\Entity;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -34,13 +32,6 @@ class EntityDisplayModeBaseUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
   /**
    * The ID of the type of the entity under test.
    *
@@ -66,21 +57,13 @@ protected function setUp() {
       ->method('getProvider')
       ->will($this->returnValue('entity'));
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-
-    $this->entityManager = new EntityManager();
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
 
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('uuid', $this->uuid);
-
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager.
-    $this->entityManager->setContainer($container);
-
     \Drupal::setContainer($container);
   }
 
@@ -96,11 +79,11 @@ public function testCalculateDependencies() {
       ->will($this->returnValue('test_module'));
     $values = ['targetEntityType' => $target_entity_type_id];
 
-    $this->entityTypeManager->expects($this->at(0))
+    $this->entityManager->expects($this->at(0))
       ->method('getDefinition')
       ->with($target_entity_type_id)
       ->will($this->returnValue($target_entity_type));
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityType)
       ->will($this->returnValue($this->entityInfo));
diff --git a/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php b/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php
index c514b2e652..06653f6c3e 100644
--- a/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php
+++ b/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php
@@ -94,7 +94,7 @@ public function providerInvalidArgumentsUrlConversion() {
    *
    * @dataProvider providerGetConnectionInfoAsUrl
    */
-  public function testGetConnectionInfoAsUrl(array $info, $expected_url) {
+  public function testGetConnectionInfoAsUrl(Array $info, $expected_url) {
 
     Database::addConnectionInfo('default', 'default', $info);
     $url = Database::getConnectionInfoAsUrl();
diff --git a/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php b/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php
index 455cbcf799..2521d7782b 100644
--- a/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php
+++ b/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php
@@ -29,102 +29,78 @@ public function testWeekDaysOrdered($first_day, $expected) {
 
   public function providerTestWeekDaysOrdered() {
     $data = [];
-    $data[] = [
-      0,
-      [
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-      ],
-    ];
-    $data[] = [
-      1,
-      [
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-        0 => 'Sunday',
-      ]
-    ];
-    $data[] = [
-      2,
-      [
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-        0 => 'Sunday',
-        1 => 'Monday',
-      ],
-    ];
-    $data[] = [
-      3,
-      [
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-      ],
-    ];
-    $data[] = [
-      4,
-      [
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-      ],
-    ];
-    $data[] = [
-      5,
-      [
-        5 => 'Friday',
-        6 => 'Saturday',
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-      ],
-    ];
-    $data[] = [
-      6,
-      [
-        6 => 'Saturday',
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-      ],
-    ];
-    $data[] = [
-      7,
-      [
-        0 => 'Sunday',
-        1 => 'Monday',
-        2 => 'Tuesday',
-        3 => 'Wednesday',
-        4 => 'Thursday',
-        5 => 'Friday',
-        6 => 'Saturday',
-      ],
-    ];
+    $data[] = [0, [
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+    ]];
+    $data[] = [1, [
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+      0 => 'Sunday',
+    ]];
+    $data[] = [2, [
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+      0 => 'Sunday',
+      1 => 'Monday',
+    ]];
+    $data[] = [3, [
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+    ]];
+    $data[] = [4, [
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+    ]];
+    $data[] = [5, [
+      5 => 'Friday',
+      6 => 'Saturday',
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+    ]];
+    $data[] = [6, [
+      6 => 'Saturday',
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+    ]];
+    $data[] = [7, [
+      0 => 'Sunday',
+      1 => 'Monday',
+      2 => 'Tuesday',
+      3 => 'Wednesday',
+      4 => 'Thursday',
+      5 => 'Friday',
+      6 => 'Saturday',
+    ]];
     return $data;
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php b/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
index c2359f49a0..eff9f77294 100644
--- a/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
+++ b/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
@@ -156,16 +156,4 @@ public function providerTestInvalidDateDiff() {
     ];
   }
 
-  /**
-   * Tests setting the default time for date-only objects.
-   */
-  public function testDefaultDateTime() {
-    $utc = new \DateTimeZone('UTC');
-
-    $date = DrupalDateTime::createFromFormat('Y-m-d H:i:s', '2017-05-23 22:58:00', $utc, ['langcode' => 'en']);
-    $this->assertEquals('22:58:00', $date->format('H:i:s'));
-    $date->setDefaultDateTime();
-    $this->assertEquals('12:00:00', $date->format('H:i:s'));
-  }
-
 }
diff --git a/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php b/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php
index 4d198b9cb2..8983c8d76d 100644
--- a/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php
+++ b/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php
@@ -52,7 +52,8 @@ public function testDiscoverServiceNoContainerYamls() {
       'app' => [
         'core' => 'core/core.services.yml',
       ],
-      'site' => [],
+      'site' => [
+      ],
     ];
     $this->assertAttributeSame($expect, 'serviceYamls', $kernel);
   }
diff --git a/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php b/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
index 3dc70c214c..7278fd6a98 100644
--- a/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
+++ b/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php
@@ -177,14 +177,12 @@ public function testFindSitePath() {
 EOD;
 
       // Create the expected directory structure.
-      vfsStream::create([
-        'sites' => [
-          'sites.php' => $sites_php,
-          'example' => [
-            'settings.php' => 'test',
-          ],
-        ],
-      ]);
+      vfsStream::create(['sites' => [
+        'sites.php' => $sites_php,
+        'example' => [
+          'settings.php' => 'test'
+        ]
+      ]]);
 
       $request = new Request();
       $request->server->set('SERVER_NAME', 'www.example.org');
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
index 0d56516dd2..541ec88e2a 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
@@ -4,12 +4,7 @@
 
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\TypedData\TypedDataManagerInterface;
@@ -59,27 +54,6 @@ class ContentEntityBaseUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity field manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityFieldManager;
-
-  /**
-   * The entity type bundle manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeBundleInfo;
-
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
   /**
    * The type ID of the entity under test.
    *
@@ -150,18 +124,12 @@ protected function setUp() {
         'uuid' => 'uuid',
     ]));
 
-    $this->entityManager = new EntityManager();
-
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
 
-    $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class);
-
-    $this->entityTypeBundleInfo = $this->getMock(EntityTypeBundleInfoInterface::class);
-
     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
 
     $this->typedDataManager = $this->getMock(TypedDataManagerInterface::class);
@@ -200,16 +168,10 @@ protected function setUp() {
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_field.manager', $this->entityFieldManager);
-    $container->set('entity_type.bundle.info', $this->entityTypeBundleInfo);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('uuid', $this->uuid);
     $container->set('typed_data_manager', $this->typedDataManager);
     $container->set('language_manager', $this->languageManager);
     $container->set('plugin.manager.field.field_type', $this->fieldTypePluginManager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager and other services.
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
 
     $this->fieldDefinitions = [
@@ -217,14 +179,14 @@ protected function setUp() {
       'revision_id' => BaseFieldDefinition::create('integer'),
     ];
 
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getFieldDefinitions')
       ->with($this->entityTypeId, $this->bundle)
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entity = $this->getMockForAbstractClass(ContentEntityBase::class, [$values, $this->entityTypeId, $this->bundle], '', TRUE, TRUE, TRUE, ['isNew']);
+    $this->entity = $this->getMockForAbstractClass('\Drupal\Core\Entity\ContentEntityBase', [$values, $this->entityTypeId, $this->bundle], '', TRUE, TRUE, TRUE, ['isNew']);
     $values['defaultLangcode'] = [LanguageInterface::LANGCODE_DEFAULT => LanguageInterface::LANGCODE_NOT_SPECIFIED];
-    $this->entityUnd = $this->getMockForAbstractClass(ContentEntityBase::class, [$values, $this->entityTypeId, $this->bundle]);
+    $this->entityUnd = $this->getMockForAbstractClass('\Drupal\Core\Entity\ContentEntityBase', [$values, $this->entityTypeId, $this->bundle]);
   }
 
   /**
@@ -321,7 +283,7 @@ public function testGetRevisionId() {
    * @covers ::isTranslatable
    */
   public function testIsTranslatable() {
-    $this->entityTypeBundleInfo->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getBundleInfo')
       ->with($this->entityTypeId)
       ->will($this->returnValue([
@@ -420,7 +382,7 @@ public function testRequiredValidation() {
         $entity->preSave($storage);
       });
 
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
@@ -472,7 +434,7 @@ public function testAccess() {
     $access->expects($this->at(3))
       ->method('createAccess')
       ->will($this->returnValue(AccessResult::allowed()));
-    $this->entityTypeManager->expects($this->exactly(4))
+    $this->entityManager->expects($this->exactly(4))
       ->method('getAccessControlHandler')
       ->will($this->returnValue($access));
     $this->assertTrue($this->entity->access($operation));
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php
index dcde7f0300..4bed37da59 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php
@@ -73,35 +73,30 @@ public function testFormId($expected, $definition) {
   public function providerTestFormIds() {
     return [
       ['node_article_form', [
-          'entity_type' => 'node',
-          'bundle' => 'article',
-          'operation' => 'default',
-        ],
-      ],
+        'entity_type' => 'node',
+        'bundle' => 'article',
+        'operation' => 'default',
+      ]],
       ['node_article_delete_form', [
-          'entity_type' => 'node',
-          'bundle' => 'article',
-          'operation' => 'delete',
-        ],
-      ],
+        'entity_type' => 'node',
+        'bundle' => 'article',
+        'operation' => 'delete',
+      ]],
       ['user_user_form', [
-          'entity_type' => 'user',
-          'bundle' => 'user',
-          'operation' => 'default',
-        ],
-      ],
+        'entity_type' => 'user',
+        'bundle' => 'user',
+        'operation' => 'default',
+      ]],
       ['user_form', [
-          'entity_type' => 'user',
-          'bundle' => '',
-          'operation' => 'default',
-        ],
-      ],
+        'entity_type' => 'user',
+        'bundle' => '',
+        'operation' => 'default',
+      ]],
       ['user_delete_form', [
-          'entity_type' => 'user',
-          'bundle' => '',
-          'operation' => 'delete',
-        ],
-      ],
+        'entity_type' => 'user',
+        'bundle' => '',
+        'operation' => 'delete',
+      ]],
     ];
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php
index 38e9502e99..60bd4254bc 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityLinkTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Link;
 use Drupal\Tests\UnitTestCase;
@@ -15,11 +14,11 @@
 class EntityLinkTest extends UnitTestCase {
 
   /**
-   * The mocked entity type manager.
+   * The mocked entity manager.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The tested link generator.
@@ -41,12 +40,12 @@ class EntityLinkTest extends UnitTestCase {
   protected function setUp() {
     parent::setUp();
 
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
+    $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
     $this->linkGenerator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
     $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
 
     $container = new ContainerBuilder();
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('link_generator', $this->linkGenerator);
     $container->set('language_manager', $this->languageManager);
     \Drupal::setContainer($container);
@@ -87,7 +86,7 @@ public function testLink($entity_label, $link_text, $expected_text, $link_rel =
         ['langcode', 'langcode'],
       ]);
 
-    $this->entityTypeManager
+    $this->entityManager
       ->expects($this->any())
       ->method('getDefinition')
       ->with($entity_type_id)
@@ -149,7 +148,7 @@ public function testToLink($entity_label, $link_text, $expected_text, $link_rel
         ['langcode', 'langcode'],
       ]);
 
-    $this->entityTypeManager
+    $this->entityManager
       ->expects($this->any())
       ->method('getDefinition')
       ->with($entity_type_id)
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index ad68e2df68..44e771ceaa 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -11,7 +11,6 @@
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityListBuilder;
-use Drupal\Core\Routing\RedirectDestinationInterface;
 use Drupal\entity_test\EntityTestListBuilder;
 use Drupal\Tests\UnitTestCase;
 
@@ -63,13 +62,6 @@ class EntityListBuilderTest extends UnitTestCase {
    */
   protected $role;
 
-  /**
-   * The redirect destination service.
-   *
-   * @var \Drupal\Core\Routing\RedirectDestinationInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $redirectDestination;
-
   /**
    * The EntityListBuilder object to test.
    *
@@ -88,8 +80,7 @@ protected function setUp() {
     $this->moduleHandler = $this->getMock('\Drupal\Core\Extension\ModuleHandlerInterface');
     $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
     $this->translationManager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
-    $this->entityListBuilder = new TestEntityListBuilder($this->entityType, $this->roleStorage);
-    $this->redirectDestination = $this->getMock(RedirectDestinationInterface::class);
+    $this->entityListBuilder = new TestEntityListBuilder($this->entityType, $this->roleStorage, $this->moduleHandler);
     $this->container = new ContainerBuilder();
     \Drupal::setContainer($this->container);
   }
@@ -126,20 +117,12 @@ public function testGetOperations() {
     $url->expects($this->any())
       ->method('toArray')
       ->will($this->returnValue([]));
-    $url->expects($this->atLeastOnce())
-      ->method('mergeOptions')
-      ->with(['query' => ['destination' => '/foo/bar']]);
     $this->role->expects($this->any())
-      ->method('toUrl')
+      ->method('urlInfo')
       ->will($this->returnValue($url));
 
-    $this->redirectDestination->expects($this->atLeastOnce())
-      ->method('getAsArray')
-      ->willReturn(['destination' => '/foo/bar']);
-
-    $list = new EntityListBuilder($this->entityType, $this->roleStorage);
+    $list = new EntityListBuilder($this->entityType, $this->roleStorage, $this->moduleHandler);
     $list->setStringTranslation($this->translationManager);
-    $list->setRedirectDestination($this->redirectDestination);
 
     $operations = $list->getOperations($this->role);
     $this->assertInternalType('array', $operations);
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php
index 259647167c..6242322efc 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php
@@ -100,7 +100,7 @@ protected function setUp() {
 
     $container = $this->prophesize(ContainerInterface::class);
     $container->get('cache_tags.invalidator')->willReturn($this->cacheTagsInvalidator->reveal());
-    // $container->get('typed_data_manager')->willReturn($this->typedDataManager->reveal());
+    //$container->get('typed_data_manager')->willReturn($this->typedDataManager->reveal());
     \Drupal::setContainer($container->reveal());
 
     $this->entityTypeBundleInfo = new EntityTypeBundleInfo($this->entityTypeManager->reveal(), $this->languageManager->reveal(), $this->moduleHandler->reveal(), $this->typedDataManager->reveal(), $this->cacheBackend->reveal());
@@ -194,13 +194,15 @@ public function testGetBundleInfo($entity_type_id, $expected) {
   public function providerTestGetBundleInfo() {
     return [
       ['apple', [
-          'apple' => ['label' => 'Apple'],
+        'apple' => [
+          'label' => 'Apple',
         ],
-      ],
+      ]],
       ['banana', [
-          'banana' => ['label' => 'Banana'],
+        'banana' => [
+          'label' => 'Banana',
         ],
-      ],
+      ]],
       ['pear', []],
     ];
   }
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
index 1acb20c4e6..ad9e49c616 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
@@ -5,11 +5,7 @@
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Language\Language;
-use Drupal\entity_test\Entity\EntityTestMul;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -34,11 +30,11 @@ class EntityUnitTest extends UnitTestCase {
   protected $entityType;
 
   /**
-   * The entity type manager used for testing.
+   * The entity manager used for testing.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityTypeManager;
+  protected $entityManager;
 
   /**
    * The ID of the type of the entity under test.
@@ -98,8 +94,8 @@ protected function setUp() {
       ->method('getListCacheTags')
       ->willReturn([$this->entityTypeId . '_list']);
 
-    $this->entityTypeManager = $this->getMockForAbstractClass(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -115,9 +111,7 @@ protected function setUp() {
     $this->cacheTagsInvalidator = $this->getMock('Drupal\Core\Cache\CacheTagsInvalidator');
 
     $container = new ContainerBuilder();
-    // Ensure that Entity doesn't use the deprecated entity.manager service.
-    $container->set('entity.manager', NULL);
-    $container->set('entity_type.manager', $this->entityTypeManager);
+    $container->set('entity.manager', $this->entityManager);
     $container->set('uuid', $this->uuid);
     $container->set('language_manager', $this->languageManager);
     $container->set('cache_tags.invalidator', $this->cacheTagsInvalidator);
@@ -192,7 +186,7 @@ public function testLabel() {
 
     // Set a dummy property on the entity under test to test that the label can
     // be returned form a property if there is no callback.
-    $this->entityTypeManager->expects($this->at(1))
+    $this->entityManager->expects($this->at(1))
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue([
@@ -219,10 +213,9 @@ public function testAccess() {
     $access->expects($this->at(1))
       ->method('createAccess')
       ->will($this->returnValue(AccessResult::allowed()));
-    $this->entityTypeManager->expects($this->exactly(2))
+    $this->entityManager->expects($this->exactly(2))
       ->method('getAccessControlHandler')
       ->will($this->returnValue($access));
-
     $this->assertEquals(AccessResult::allowed(), $this->entity->access($operation));
     $this->assertEquals(AccessResult::allowed(), $this->entity->access('create'));
   }
@@ -246,11 +239,11 @@ public function setupTestLoad() {
     // Base our mocked entity on a real entity class so we can test if calling
     // Entity::load() on the base class will bubble up to an actual entity.
     $this->entityTypeId = 'entity_test_mul';
-    $methods = get_class_methods(EntityTestMul::class);
+    $methods = get_class_methods('Drupal\entity_test\Entity\EntityTestMul');
     unset($methods[array_search('load', $methods)]);
     unset($methods[array_search('loadMultiple', $methods)]);
     unset($methods[array_search('create', $methods)]);
-    $this->entity = $this->getMockBuilder(EntityTestMul::class)
+    $this->entity = $this->getMockBuilder('Drupal\entity_test\Entity\EntityTestMul')
       ->disableOriginalConstructor()
       ->setMethods($methods)
       ->getMock();
@@ -267,25 +260,21 @@ public function testLoad() {
 
     $class_name = get_class($this->entity);
 
-    $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
-    $entity_type_repository->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getEntityTypeFromClass')
       ->with($class_name)
       ->willReturn($this->entityTypeId);
 
-    $storage = $this->getMock(EntityStorageInterface::class);
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
     $storage->expects($this->once())
       ->method('load')
       ->with(1)
       ->will($this->returnValue($this->entity));
-
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
 
-    \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
-
     // Call Entity::load statically and check that it returns the mock entity.
     $this->assertSame($this->entity, $class_name::load(1));
   }
@@ -301,25 +290,21 @@ public function testLoadMultiple() {
 
     $class_name = get_class($this->entity);
 
-    $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
-    $entity_type_repository->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getEntityTypeFromClass')
       ->with($class_name)
       ->willReturn($this->entityTypeId);
 
-    $storage = $this->getMock(EntityStorageInterface::class);
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
     $storage->expects($this->once())
       ->method('loadMultiple')
       ->with([1])
       ->will($this->returnValue([1 => $this->entity]));
-
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
 
-    \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
-
     // Call Entity::loadMultiple statically and check that it returns the mock
     // entity.
     $this->assertSame([1 => $this->entity], $class_name::loadMultiple([1]));
@@ -332,26 +317,21 @@ public function testCreate() {
     $this->setupTestLoad();
 
     $class_name = get_class($this->entity);
-
-    $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
-    $entity_type_repository->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getEntityTypeFromClass')
       ->with($class_name)
       ->willReturn($this->entityTypeId);
 
-    $storage = $this->getMock(EntityStorageInterface::class);
+    $storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface');
     $storage->expects($this->once())
       ->method('create')
       ->with([])
       ->will($this->returnValue($this->entity));
-
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
 
-    \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
-
     // Call Entity::create() statically and check that it returns the mock
     // entity.
     $this->assertSame($this->entity, $class_name::create([]));
@@ -365,12 +345,10 @@ public function testSave() {
     $storage->expects($this->once())
       ->method('save')
       ->with($this->entity);
-
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
-
     $this->entity->save();
   }
 
@@ -383,12 +361,10 @@ public function testDelete() {
     // Testing the argument of the delete() method consumes too much memory.
     $storage->expects($this->once())
       ->method('delete');
-
-    $this->entityTypeManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getStorage')
       ->with($this->entityTypeId)
       ->will($this->returnValue($storage));
-
     $this->entity->delete();
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
index 1e9ee7c169..8381ea7c64 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
@@ -4,7 +4,7 @@
 
 use Drupal\Core\Entity\Entity;
 use Drupal\Core\Entity\EntityMalformedException;
-use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
 use Drupal\Core\Entity\RevisionableInterface;
@@ -21,11 +21,11 @@
 class EntityUrlTest extends UnitTestCase {
 
   /**
-   * The entity type bundle info service mock used in this test.
+   * The entity manager mock used in this test.
    *
-   * @var \Prophecy\Prophecy\ProphecyInterface|\Drupal\Core\Entity\EntityTypeBundleInfoInterface
+   * @var \Prophecy\Prophecy\ProphecyInterface|\Drupal\Core\Entity\EntityManagerInterface
    */
-  protected $entityTypeBundleInfo;
+  protected $entityManager;
 
   /**
    * The ID of the entity type used in this test.
@@ -362,9 +362,7 @@ public function testToUrlUriCallback(array $bundle_info, $uri_callback) {
   public function providerTestToUrlUriCallback() {
     $test_cases = [];
 
-    $uri_callback = function () {
-      return Url::fromRoute('<none>');
-    };
+    $uri_callback = function () { return Url::fromRoute('<none>'); };
     $test_cases['uri_callback'] = [[], $uri_callback];
     $test_cases['bundle_uri_callback'] = [['uri_callback' => $uri_callback], NULL];
 
@@ -511,7 +509,7 @@ public function providerTestUrl() {
    * @return \Drupal\Core\Entity\Entity|\PHPUnit_Framework_MockObject_MockObject
    */
   protected function getEntity($class, array $values, array $methods = []) {
-    $methods = array_merge($methods, ['getEntityType', 'entityManager', 'entityTypeBundleInfo']);
+    $methods = array_merge($methods, ['getEntityType', 'entityManager']);
 
     // Prophecy does not allow prophesizing abstract classes while actually
     // calling their code. We use Prophecy below because that allows us to
@@ -526,8 +524,8 @@ protected function getEntity($class, array $values, array $methods = []) {
     $this->entityType->getKey('langcode')->willReturn(FALSE);
     $entity->method('getEntityType')->willReturn($this->entityType->reveal());
 
-    $this->entityTypeBundleInfo = $this->prophesize(EntityTypeBundleInfoInterface::class);
-    $entity->method('entityTypeBundleInfo')->willReturn($this->entityTypeBundleInfo->reveal());
+    $this->entityManager = $this->prophesize(EntityManagerInterface::class);
+    $entity->method('entityManager')->willReturn($this->entityManager->reveal());
 
     return $entity;
   }
@@ -581,7 +579,7 @@ protected function registerLinkTemplate($link_template) {
    *   The bundle information to register.
    */
   protected function registerBundleInfo($bundle_info) {
-    $this->entityTypeBundleInfo
+    $this->entityManager
       ->getBundleInfo($this->entityTypeId)
       ->willReturn([$this->entityTypeId => $bundle_info])
     ;
diff --git a/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
index 4a2dac5653..6f20444a77 100644
--- a/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
@@ -4,12 +4,9 @@
 
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityMalformedException;
-use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityStorageException;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Tests\UnitTestCase;
 use Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage;
@@ -61,26 +58,12 @@ class KeyValueEntityStorageTest extends UnitTestCase {
   protected $entityStorage;
 
   /**
-   * The entity manager.
+   * The mocked entity manager.
    *
    * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
   protected $entityManager;
 
-  /**
-   * The mocked entity type manager.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
-  /**
-   * The mocked entity field manager.
-   *
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityFieldManager;
-
   /**
    * The mocked cache tags invalidator.
    *
@@ -119,16 +102,12 @@ protected function setUpKeyValueEntityStorage($uuid_key = 'uuid') {
       ->method('getListCacheTags')
       ->willReturn(['test_entity_type_list']);
 
-    $this->entityManager = new EntityManager();
-
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with('test_entity_type')
       ->will($this->returnValue($this->entityType));
 
-    $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class);
-
     $this->cacheTagsInvalidator = $this->getMock('Drupal\Core\Cache\CacheTagsInvalidatorInterface');
 
     $this->keyValueStore = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface');
@@ -148,13 +127,8 @@ protected function setUpKeyValueEntityStorage($uuid_key = 'uuid') {
 
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_field.manager', $this->entityFieldManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
     $container->set('language_manager', $this->languageManager);
     $container->set('cache_tags.invalidator', $this->cacheTagsInvalidator);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager and other services.
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
index 36f58c39fc..7e853bca2b 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
@@ -165,11 +165,9 @@ public function providerTestGetAddFormRoute() {
     $route
       ->setDefault('bundle_parameter', 'the_bundle_entity_type_id')
       ->setRequirement('_entity_create_access', 'the_entity_type_id:{the_bundle_entity_type_id}')
-      ->setOption('parameters', [
-        'the_bundle_entity_type_id' => [
-          'type' => 'entity:the_bundle_entity_type_id',
-        ],
-      ]);
+      ->setOption('parameters', ['the_bundle_entity_type_id' => [
+        'type' => 'entity:the_bundle_entity_type_id',
+      ]]);
     $data['add_form_bundle_entity_id_key_type_null'] = [clone $route, $entity_type5->reveal(), $bundle_entity_type->reveal()];
 
     $entity_type6 = $this->getEntityType($entity_type5);
@@ -187,12 +185,10 @@ public function providerTestGetAddFormRoute() {
     $route
       // Unset the 'the_entity_type_id' requirement.
       ->setRequirements(['_entity_create_access' => $route->getRequirement('_entity_create_access')])
-      ->setOption('parameters', [
-        'the_bundle_entity_type_id' => [
-          'type' => 'entity:the_bundle_entity_type_id',
-          'with_config_overrides' => TRUE,
-        ],
-      ]);
+      ->setOption('parameters', ['the_bundle_entity_type_id' => [
+      'type' => 'entity:the_bundle_entity_type_id',
+      'with_config_overrides' => TRUE,
+    ]]);
     $data['add_form_bundle_entity_id_key_type_integer'] = [clone $route, $entity_type7->reveal(), $bundle_entity_type->reveal(), $field_storage_definition->reveal()];
 
     return $data;
diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
index db92ca9d0a..aecc3e4364 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageSchemaTest.php
@@ -1151,7 +1151,7 @@ public function providerTestRequiresEntityDataMigration() {
       // Case 6: same storage class, ::hasData() === TRUE, no structure changes.
       [$updated_entity_type_definition, $original_entity_type_definition, TRUE, FALSE, FALSE],
       // Case 7: different storage class, original storage class exists,
-      // ::hasData() === TRUE, no structure changes.
+      //::hasData() === TRUE, no structure changes.
       [$updated_entity_type_definition, $original_entity_type_definition_other_existing, TRUE, FALSE, FALSE],
     ];
   }
diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
index bf3fd46eb6..b3e339b897 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
@@ -8,11 +8,8 @@
 namespace Drupal\Tests\Core\Entity\Sql;
 
 use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Query\QueryFactoryInterface;
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Language\Language;
@@ -53,20 +50,6 @@ class SqlContentEntityStorageTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The mocked entity type manager used in this test.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
-  /**
-   * The mocked entity field manager used in this test.
-   *
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityFieldManager;
-
   /**
    * The entity type ID.
    *
@@ -121,12 +104,7 @@ protected function setUp() {
     $this->container = new ContainerBuilder();
     \Drupal::setContainer($this->container);
 
-    $this->entityManager = new EntityManager();
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager and other services.
-    $this->entityManager->setContainer($this->container);
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityFieldManager = $this->getMock(EntityFieldManagerInterface::class);
+    $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
     $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
     $this->cache = $this->getMock('Drupal\Core\Cache\CacheBackendInterface');
     $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
@@ -136,10 +114,6 @@ protected function setUp() {
     $this->connection = $this->getMockBuilder('Drupal\Core\Database\Connection')
       ->disableOriginalConstructor()
       ->getMock();
-
-    $this->container->set('entity.manager', $this->entityManager);
-    $this->container->set('entity_type.manager', $this->entityTypeManager);
-    $this->container->set('entity_field.manager', $this->entityFieldManager);
   }
 
   /**
@@ -470,10 +444,26 @@ public function testGetTableMappingSimpleWithFields(array $entity_keys) {
    */
   public function providerTestGetTableMappingSimple() {
     return [
-      [['id' => 'test_id', 'bundle' => NULL, 'uuid' => NULL]],
-      [['id' => 'test_id', 'bundle' => 'test_bundle', 'uuid' => NULL]],
-      [['id' => 'test_id', 'bundle' => NULL, 'uuid' => 'test_uuid']],
-      [['id' => 'test_id', 'bundle' => 'test_bundle', 'uuid' => 'test_uuid']],
+      [[
+        'id' => 'test_id',
+        'bundle' => NULL,
+        'uuid' => NULL,
+      ]],
+      [[
+        'id' => 'test_id',
+        'bundle' => 'test_bundle',
+        'uuid' => NULL,
+      ]],
+      [[
+        'id' => 'test_id',
+        'bundle' => NULL,
+        'uuid' => 'test_uuid',
+      ]],
+      [[
+        'id' => 'test_id',
+        'bundle' => 'test_bundle',
+        'uuid' => 'test_uuid',
+      ]],
     ];
   }
 
@@ -1012,6 +1002,7 @@ public function testCreate() {
       ->will($this->returnValue($language));
 
     $this->container->set('language_manager', $language_manager);
+    $this->container->set('entity.manager', $this->entityManager);
     $this->container->set('module_handler', $this->moduleHandler);
 
     $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase')
@@ -1031,14 +1022,14 @@ public function testCreate() {
 
     // ContentEntityStorageBase iterates over the entity which calls this method
     // internally in ContentEntityBase::getProperties().
-    $this->entityFieldManager->expects($this->once())
+    $this->entityManager->expects($this->once())
       ->method('getFieldDefinitions')
       ->will($this->returnValue([]));
 
     $this->entityType->expects($this->atLeastOnce())
       ->method('isRevisionable')
       ->will($this->returnValue(FALSE));
-    $this->entityTypeManager->expects($this->atLeastOnce())
+    $this->entityManager->expects($this->atLeastOnce())
       ->method('getDefinition')
       ->with($this->entityType->id())
       ->will($this->returnValue($this->entityType));
@@ -1102,15 +1093,15 @@ protected function setUpEntityStorage() {
       ->disableOriginalConstructor()
       ->getMock();
 
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->will($this->returnValue($this->entityType));
 
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getFieldStorageDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
@@ -1146,7 +1137,9 @@ public function testLoadMultiplePersistentCached() {
     $this->cache->expects($this->once())
       ->method('getMultiple')
       ->with([$key])
-      ->will($this->returnValue([$key => (object) ['data' => $entity]]));
+      ->will($this->returnValue([$key => (object) [
+          'data' => $entity,
+        ]]));
     $this->cache->expects($this->never())
       ->method('set');
 
@@ -1284,15 +1277,15 @@ public function testHasData() {
       ->disableOriginalConstructor()
       ->getMock();
 
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->will($this->returnValue($this->entityType));
 
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getFieldStorageDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
-    $this->entityFieldManager->expects($this->any())
+    $this->entityManager->expects($this->any())
       ->method('getBaseFieldDefinitions')
       ->will($this->returnValue($this->fieldDefinitions));
 
diff --git a/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php
index d932993cfa..953daac887 100644
--- a/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php
@@ -3,9 +3,6 @@
 namespace Drupal\Tests\Core\Entity\TypedData;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
-use Drupal\Core\Entity\EntityManager;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Language\LanguageInterface;
@@ -56,19 +53,6 @@ class EntityAdapterUnitTest extends UnitTestCase {
    */
   protected $entityManager;
 
-  /**
-   * The entity type manager used for testing.
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityTypeManager;
-
-  /**
-   *
-   * @var \Drupal\Core\Entity\EntityFieldManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-   */
-  protected $entityFieldManager;
-
   /**
    * The type ID of the entity under test.
    *
@@ -146,10 +130,8 @@ protected function setUp() {
         'uuid' => 'uuid',
     ]));
 
-    $this->entityManager = new EntityManager();
-
-    $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
-    $this->entityTypeManager->expects($this->any())
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityManager->expects($this->any())
       ->method('getDefinition')
       ->with($this->entityTypeId)
       ->will($this->returnValue($this->entityType));
@@ -201,30 +183,23 @@ protected function setUp() {
       ->method('createFieldItemList')
       ->willReturn($this->fieldItemList);
 
-    $this->entityFieldManager = $this->getMockForAbstractClass(EntityFieldManagerInterface::class);
-
     $container = new ContainerBuilder();
     $container->set('entity.manager', $this->entityManager);
-    $container->set('entity_type.manager', $this->entityTypeManager);
-    $container->set('entity_field.manager', $this->entityFieldManager);
     $container->set('uuid', $this->uuid);
     $container->set('typed_data_manager', $this->typedDataManager);
     $container->set('language_manager', $this->languageManager);
     $container->set('plugin.manager.field.field_type', $this->fieldTypePluginManager);
-    // Inject the container into entity.manager so it can defer to
-    // entity_type.manager and other services.
-    $this->entityManager->setContainer($container);
     \Drupal::setContainer($container);
 
     $this->fieldDefinitions = [
       'id' => BaseFieldDefinition::create('integer'),
       'revision_id' => BaseFieldDefinition::create('integer'),
     ];
-    $this->entityFieldManager->expects($this->any())
+
+    $this->entityManager->expects($this->any())
       ->method('getFieldDefinitions')
       ->with($this->entityTypeId, $this->bundle)
       ->will($this->returnValue($this->fieldDefinitions));
-
     $this->entity = $this->getMockForAbstractClass('\Drupal\Core\Entity\ContentEntityBase', [$values, $this->entityTypeId, $this->bundle]);
 
     $this->entityAdapter = EntityAdapter::createFromEntity($this->entity);
@@ -320,7 +295,7 @@ public function testGetWithoutData() {
    * @covers ::set
    */
   public function testSet() {
-    $id_items = [['value' => $this->id + 1] ];
+    $id_items = [ ['value' => $this->id + 1] ];
 
     $this->fieldItemList->expects($this->once())
       ->method('setValue')
@@ -334,7 +309,7 @@ public function testSet() {
    */
   public function testSetWithoutData() {
     $this->entityAdapter->setValue(NULL);
-    $id_items = [['value' => $this->id + 1] ];
+    $id_items = [ ['value' => $this->id + 1] ];
     $this->setExpectedException(MissingDataException::class);
     $this->entityAdapter->set('id', $id_items);
   }
@@ -397,7 +372,7 @@ public function testGetDataDefinition() {
     $definition = $this->entityAdapter->getDataDefinition();
     $this->assertInstanceOf('\Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface', $definition);
     $this->assertEquals($definition->getEntityTypeId(), $this->entityTypeId);
-    $this->assertEquals($definition->getBundles(), [$this->bundle ]);
+    $this->assertEquals($definition->getBundles(), [ $this->bundle ]);
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/EntityReferenceSelection/EntityReferenceSelectionUnitTest.php b/core/tests/Drupal/Tests/Core/EntityReferenceSelection/EntityReferenceSelectionUnitTest.php
deleted file mode 100644
index bfd5143849..0000000000
--- a/core/tests/Drupal/Tests/Core/EntityReferenceSelection/EntityReferenceSelectionUnitTest.php
+++ /dev/null
@@ -1,235 +0,0 @@
-<?php
-
-namespace Drupal\Tests\Core\EntityReferenceSelection;
-
-use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase;
-use Drupal\Tests\UnitTestCase;
-
-/**
- * Provides unit testing for selection handlers.
- *
- * @coversDefaultClass \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase
- *
- * @group entity_reference
- * @group legacy
- */
-class EntityReferenceSelectionUnitTest extends UnitTestCase {
-
-  /**
-   * Tests invalid default configuration.
-   *
-   * @covers ::defaultConfiguration
-   * @covers ::resolveBackwardCompatibilityConfiguration
-   */
-  public function testInvalidDefaultConfiguration() {
-    $this->setExpectedException(\InvalidArgumentException::class, "TestSelectionWithInvalidDefaultConfiguration::defaultConfiguration() should not contain a 'handler_settings' key. All settings should be placed in the root level.");
-    new TestSelectionWithInvalidDefaultConfiguration(
-      [],
-      'test_selector',
-      ['class' => 'TestSelectionWithInvalidDefaultConfiguration']
-    );
-  }
-
-  /**
-   * Tests the selection handler with malformed 'handler_settings' value.
-   *
-   * @covers ::setConfiguration
-   * @covers ::resolveBackwardCompatibilityConfiguration
-   */
-  public function testMalformedHandlerSettingsValue() {
-    $this->setExpectedException(\InvalidArgumentException::class, "The setting 'handler_settings' is reserved and cannot be used.");
-    new TestSelection(
-      // The deprecated 'handler_setting' should be an array.
-      ['handler_settings' => FALSE],
-      'test_selector',
-      ['class' => 'TestSelectionWithInvalidDefaultConfiguration']
-    );
-  }
-
-  /**
-   * Provides test data for ::testSetConfiguration()
-   *
-   * @return array
-   *
-   * @see \Drupal\Tests\Core\EntityReferenceSelection\testSetConfiguration
-   */
-  public function providerTestSetConfiguration() {
-    return [
-      [
-        [
-          'setting1' => 'foo',
-          'setting2' => [
-            'bar' => 'bar value',
-            'baz' => 'baz value',
-          ],
-        ],
-      ],
-      [
-        [
-          'handler_settings' => [
-            'setting1' => 'foo',
-            'setting2' => [
-              'bar' => 'bar value',
-              'baz' => 'baz value',
-            ],
-          ],
-        ],
-      ],
-      [
-        [
-          'setting1' => 'foo',
-          'handler_settings' => [
-            'setting2' => [
-              'bar' => 'bar value',
-              'baz' => 'baz value',
-            ],
-          ]
-        ],
-      ],
-      [
-        [
-          'setting1' => 'foo',
-          'setting2' => [
-            'bar' => 'bar value',
-            'baz' => 'baz value',
-          ],
-          'handler_settings' => [
-            // Same setting from root level takes precedence.
-            'setting2' => 'this will be overwritten',
-          ]
-        ],
-      ],
-    ];
-  }
-
-  /**
-   * Tests selection handler plugin configuration set.
-   *
-   * @dataProvider providerTestSetConfiguration
-   * @covers ::setConfiguration
-   * @covers ::resolveBackwardCompatibilityConfiguration
-   * @covers ::ensureBackwardCompatibilityConfiguration
-   *
-   * @param array $options
-   *   The configuration passed to the plugin.
-   */
-  public function testSetConfiguration($options) {
-    $selection = new TestSelection($options, 'test_selector', []);
-
-    $expected = [
-      'target_type' => NULL,
-      'handler' => 'test_selector',
-      'entity' => NULL,
-      'setting1' => 'foo',
-      'setting2' => [
-        'qux' => 'qux value',
-        'bar' => 'bar value',
-        'baz' => 'baz value',
-      ],
-      'setting3' => 'foobar',
-      'handler_settings' => [
-        'setting1' => 'foo',
-        'setting2' => [
-          'qux' => 'qux value',
-          'bar' => 'bar value',
-          'baz' => 'baz value',
-        ],
-        'setting3' => 'foobar',
-      ],
-    ];
-
-    $this->assertArrayEquals($expected, $selection->getConfiguration());
-  }
-
-  /**
-   * Tests the selection handler plugin BC structure.
-   *
-   * @covers ::setConfiguration
-   * @covers ::resolveBackwardCompatibilityConfiguration
-   * @covers ::ensureBackwardCompatibilityConfiguration
-   */
-  public function testSetConfigurationBcLevel() {
-    $config = [
-      'target_type' => 'some_entity_type_id',
-      'handler' => 'test_selector',
-      'setting1' => 'foo',
-    ];
-    $selection = new TestSelection($config, 'test_selector', []);
-
-    $expected = [
-      'target_type' => 'some_entity_type_id',
-      'handler' => 'test_selector',
-      'entity' => NULL,
-      'setting1' => 'foo',
-      'setting2' => ['qux' => 'qux value'],
-      'setting3' => 'foobar',
-      'handler_settings' => [
-        'setting1' => 'foo',
-        'setting2' => ['qux' => 'qux value'],
-        'setting3' => 'foobar',
-      ],
-    ];
-
-    $this->assertArrayEquals($expected, $selection->getConfiguration());
-
-    // Read the stored values and override a setting.
-    $config = $selection->getConfiguration();
-    $config['setting1'] = 'bar';
-    $selection->setConfiguration($config);
-    $expected['setting1'] = 'bar';
-    $expected['handler_settings']['setting1'] = 'bar';
-
-    $this->assertArrayEquals($expected, $selection->getConfiguration());
-  }
-
-  /**
-   * Tests deprecation error triggering.
-   *
-   * @covers ::setConfiguration
-   * @covers ::resolveBackwardCompatibilityConfiguration
-   * @expectedDeprecation Providing settings under 'handler_settings' is deprecated and will be removed before 9.0.0. Move the settings in the root of the configuration array. See https://www.drupal.org/node/2870971.
-   */
-  public function testDeprecationErrorTriggering() {
-    // Configuration with BC level.
-    $config = ['handler_settings' => ['setting1' => TRUE]];
-    new TestSelection($config, 'test_selector', []);
-    // Ensure at least one assertion.
-    $this->assertTrue(TRUE);
-  }
-
-}
-
-/**
- * Provides a testing plugin.
- */
-class TestSelection extends SelectionPluginBase {
-
-  public function defaultConfiguration() {
-    return [
-      'setting2' => [
-        'qux' => 'qux value',
-      ],
-      'setting3' => 'foobar',
-    ] + parent::defaultConfiguration();
-  }
-
-  public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {}
-
-  public function validateReferenceableEntities(array $ids) {}
-
-  public function countReferenceableEntities($match = NULL, $match_operator = 'CONTAINS') {}
-
-}
-
-/**
- * Provides a testing plugin with invalid default configuration.
- */
-class TestSelectionWithInvalidDefaultConfiguration extends TestSelection {
-
-  public function defaultConfiguration() {
-    return [
-      'handler_settings' => ['foo' => 'bar'],
-    ];
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/PsrResponseSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/PsrResponseSubscriberTest.php
index f5855be837..38ae7f7d77 100644
--- a/core/tests/Drupal/Tests/Core/EventSubscriber/PsrResponseSubscriberTest.php
+++ b/core/tests/Drupal/Tests/Core/EventSubscriber/PsrResponseSubscriberTest.php
@@ -3,7 +3,7 @@
 namespace Drupal\Tests\Core\EventSubscriber;
 
 use Drupal\Tests\UnitTestCase;
-use Drupal\Core\EventSubscriber\PsrResponseSubscriber;
+use \Drupal\Core\EventSubscriber\PsrResponseSubscriber;
 
 /**
  * @coversDefaultClass \Drupal\Core\EventSubscriber\PsrResponseSubscriber
@@ -77,10 +77,10 @@ public function testDoesNotConvertControllerResult() {
    * Sets up an alias event that return $controllerResult.
    *
    * @param mixed $controller_result
-   *   The return Object.
+   *    The return Object.
    *
    * @return \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent|\PHPUnit_Framework_MockObject_MockObject
-   *   A mock object to test.
+   *    A mock object to test.
    */
   protected function createEventMock($controller_result) {
     $event = $this->getMock('Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent', [], [], '', NULL);
diff --git a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
index 4fda0022b7..bfe3a0620a 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php
@@ -374,14 +374,12 @@ public function testCachedGetImplementations() {
   public function testCachedGetImplementationsMissingMethod() {
     $this->cacheBackend->expects($this->exactly(1))
       ->method('get')
-      ->will($this->onConsecutiveCalls((object) [
-        'data' => [
-          'hook' => [
-            'module_handler_test' => [],
-            'module_handler_test_missing' => [],
-          ],
-        ],
-      ]));
+      ->will($this->onConsecutiveCalls(
+        (object) ['data' => ['hook' => [
+          'module_handler_test' => [],
+          'module_handler_test_missing' => [],
+        ]]]
+      ));
 
     // Ensure buildImplementationInfo doesn't get called and that we work off cached results.
     $module_handler = $this->getMockBuilder(ModuleHandler::class)
@@ -447,8 +445,9 @@ public function testGetHookInfo() {
       ->method('get')
       ->will($this->onConsecutiveCalls(
         NULL,
-        (object) ['data' => ['hook_foo' => ['group' => 'hook']]]
-      ));
+        (object) ['data' =>
+          ['hook_foo' => ['group' => 'hook']]])
+      );
 
     // Results from building from mocked environment.
     $this->assertEquals([
diff --git a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module
index ea0d93d89b..3e0d59c680 100644
--- a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module
+++ b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module
@@ -14,6 +14,4 @@ function module_handler_test_hook_info() {
   ];
 }
 
-function module_handler_test_hook($arg) {
-  return $arg;
-}
+function module_handler_test_hook($arg) { return $arg; }
diff --git a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module
index 29d8de5e11..563b7a5c2d 100644
--- a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module
+++ b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module
@@ -8,6 +8,4 @@
 /**
  * Returns an array to test nested merge in invoke all.
  */
-function module_handler_test_all1_hook($arg) {
-  return [$arg];
-}
+function module_handler_test_all1_hook($arg) { return [$arg]; }
diff --git a/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php b/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
index 76b7584186..aa3739c945 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
@@ -888,8 +888,8 @@ public function getFormId() {
   public function buildForm(array $form, FormStateInterface $form_state) {
     return test_form_id();
   }
-  public function validateForm(array &$form, FormStateInterface $form_state) {}
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
+  public function validateForm(array &$form, FormStateInterface $form_state) { }
+  public function submitForm(array &$form, FormStateInterface $form_state) { }
 
 }
 class TestFormInjected extends TestForm implements ContainerInjectionInterface {
diff --git a/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php b/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php
index 3ae9d6c139..8b2734d51c 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php
@@ -299,18 +299,16 @@ public function testLoadCachedFormStateWithFiles() {
       ->method('isAnonymous')
       ->willReturn(TRUE);
 
-    $cached_form_state = [
-      'build_info' => [
-        'files' => [
-          [
-            'module' => 'a_module',
-            'type' => 'the_type',
-            'name' => 'some_name',
-          ],
-          ['module' => 'another_module'],
-        ],
+    $cached_form_state = ['build_info' => ['files' => [
+      [
+        'module' => 'a_module',
+        'type' => 'the_type',
+        'name' => 'some_name',
       ],
-    ];
+      [
+        'module' => 'another_module',
+      ],
+    ]]];
     $this->moduleHandler->expects($this->at(0))
       ->method('loadInclude')
       ->with('a_module', 'the_type', 'some_name');
diff --git a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
index 23579a12a9..40179044df 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
@@ -439,7 +439,7 @@ public function getFormId() {
   }
 
   public function buildForm(array $form, FormStateInterface $form_state) {}
-  public function validateForm(array &$form, FormStateInterface $form_state) {}
-  public function submitForm(array &$form, FormStateInterface $form_state) {}
+  public function validateForm(array &$form, FormStateInterface $form_state) { }
+  public function submitForm(array &$form, FormStateInterface $form_state) { }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
index 2512602afa..d2b283adb9 100644
--- a/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
+++ b/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
@@ -113,14 +113,14 @@ public function providerTestLog() {
     $request_mock->headers = $this->getMock('Symfony\Component\HttpFoundation\ParameterBag');
 
     // No request or account.
-    $cases[] = [
+    $cases [] = [
       function ($context) {
         return $context['channel'] == 'test' && empty($context['uid']) && empty($context['ip']);
       },
     ];
     // With account but not request. Since the request is not available the
     // current user should not be used.
-    $cases[] = [
+    $cases [] = [
       function ($context) {
         return $context['uid'] === 0 && empty($context['ip']);
       },
@@ -128,14 +128,14 @@ function ($context) {
       $account_mock,
     ];
     // With request but not account.
-    $cases[] = [
+    $cases [] = [
       function ($context) {
         return $context['ip'] === '127.0.0.1' && empty($context['uid']);
       },
       $request_mock,
     ];
     // Both request and account.
-    $cases[] = [
+    $cases [] = [
       function ($context) {
         return $context['ip'] === '127.0.0.1' && $context['uid'] === 1;
       },
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalTaskIntegrationTestBase.php b/core/tests/Drupal/Tests/Core/Menu/LocalTaskIntegrationTestBase.php
index 839f8ae083..8ac0bbf536 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalTaskIntegrationTestBase.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalTaskIntegrationTestBase.php
@@ -128,7 +128,7 @@ protected function getLocalTaskManager($module_dirs, $route_name, $route_params)
    * @param $expected_tasks
    *   A list of tasks groups by level expected at the given route
    * @param array $route_params
-   *   (optional) A list of route parameters used to resolve tasks.
+   *   (optional) a list of route parameters used to resolve tasks.
    */
   protected function assertLocalTasks($route_name, $expected_tasks, $route_params = []) {
 
diff --git a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
index 929930a521..57dfbfa160 100644
--- a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
+++ b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
@@ -131,12 +131,10 @@ public function testProcessInbound() {
       ->getMock();
     $negotiator->expects($this->any())
       ->method('getNegotiationMethods')
-      ->will($this->returnValue([
-        LanguageNegotiationUrl::METHOD_ID => [
-          'class' => 'Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl',
-          'weight' => 9,
-        ],
-      ]));
+      ->will($this->returnValue([LanguageNegotiationUrl::METHOD_ID => [
+        'class' => 'Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl',
+        'weight' => 9,
+        ]]));
     $method = new LanguageNegotiationUrl();
     $method->setConfig($config_factory_stub);
     $method->setLanguageManager($this->languageManager);
diff --git a/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php b/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
index 2190d53918..e9b596438a 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
@@ -168,4 +168,4 @@ protected function setUpDefaultValue($default_value = NULL) {
 /**
  * Test interface used for mocking.
  */
-interface TypedDataCacheableDependencyInterface extends CacheableDependencyInterface, TypedDataInterface {}
+interface TypedDataCacheableDependencyInterface extends CacheableDependencyInterface, TypedDataInterface { }
diff --git a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php
index 01f837c0ff..a2c000e1fc 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php
@@ -28,7 +28,8 @@ public function testGetDefinitions() {
         'subdir2' => [
           'plugin3.yml' => "id: plugin3\ntest_provider: module_a",
         ],
-        'subdir3' => [],
+        'subdir3' => [
+        ]
       ],
       'module_b' => [
         'subdir1' => [
diff --git a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php
index 04e686ae8b..096c33fc73 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php
@@ -88,8 +88,8 @@ public function testGetDefinitionsWithTranslatableDefinitions() {
       ],
       'test_2' => [
         'test_2.test.yml' => $file_2,
-      ],
-    ]);
+      ]]
+    );
 
     $discovery = new YamlDiscovery('test', ['test_1' => vfsStream::url('root/test_1'), 'test_2' => vfsStream::url('root/test_2')]);
     $discovery->addTranslatableProperty('title', 'title_context');
diff --git a/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php b/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php
index ce0f1518c5..3e80a3f2e1 100644
--- a/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php
@@ -30,7 +30,7 @@ class PlaceholderGeneratorTest extends RendererTestBase {
   public function testCreatePlaceholderGeneratesValidHtmlMarkup(array $element) {
     $build = $this->placeholderGenerator->createPlaceholder($element);
 
-    $original_placeholder_markup = (string) $build['#markup'];
+    $original_placeholder_markup = (string)$build['#markup'];
     $processed_placeholder_markup = Html::serialize(Html::load($build['#markup']));
 
     $this->assertEquals($original_placeholder_markup, $processed_placeholder_markup);
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php b/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
index b9f8b07fe8..0666367c21 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
@@ -554,23 +554,17 @@ public function providerTestBubblingWithPrerender() {
     $data = [];
 
     // Test element without theme.
-    $data[] = [
-      [
-        'foo' => [
-          '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'],
-        ],
-      ],
-    ];
+    $data[] = [[
+      'foo' => [
+        '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'],
+      ]]];
 
     // Test element with theme.
-    $data[] = [
-      [
-        '#theme' => 'common_test_render_element',
-        'foo' => [
-          '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'],
-        ],
-      ],
-    ];
+    $data[] = [[
+      '#theme' => 'common_test_render_element',
+      'foo' => [
+        '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'],
+      ]]];
 
     return $data;
   }
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
index fb0c0c5227..a92c363619 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
@@ -547,11 +547,12 @@ protected function generatePlaceholderElement() {
 
   /**
    * @param false|array $cid_parts
+   * @param array $expected_data
+   *   FALSE if no render cache item is expected, a render array with the
+   *   expected values if a render cache item is expected.
    * @param string[] $bubbled_cache_contexts
    *   Additional cache contexts that were bubbled when the placeholder was
    *   rendered.
-   * @param array $expected_data
-   *   A render array with the expected values.
    */
   protected function assertPlaceholderRenderCache($cid_parts, array $bubbled_cache_contexts, array $expected_data) {
     if ($cid_parts !== FALSE) {
@@ -875,16 +876,13 @@ public function testInvalidLazyBuilderArguments() {
    */
   public function testScalarLazybuilderCallbackContext() {
     $element = [];
-    $element['#lazy_builder'] = [
-      '\Drupal\Tests\Core\Render\PlaceholdersTest::callback',
-      [
-        'string' => 'foo',
-        'bool' => TRUE,
-        'int' => 1337,
-        'float' => 3.14,
-        'null' => NULL,
-      ],
-    ];
+    $element['#lazy_builder'] = ['\Drupal\Tests\Core\Render\PlaceholdersTest::callback', [
+      'string' => 'foo',
+      'bool' => TRUE,
+      'int' => 1337,
+      'float' => 3.14,
+      'null' => NULL,
+    ]];
 
     $result = $this->renderer->renderRoot($element);
     $this->assertInstanceOf('\Drupal\Core\Render\Markup', $result);
@@ -897,18 +895,15 @@ public function testScalarLazybuilderCallbackContext() {
    */
   public function testNonScalarLazybuilderCallbackContext() {
     $element = [];
-    $element['#lazy_builder'] = [
-      '\Drupal\Tests\Core\Render\PlaceholdersTest::callback',
-      [
-        'string' => 'foo',
-        'bool' => TRUE,
-        'int' => 1337,
-        'float' => 3.14,
-        'null' => NULL,
-        // array is not one of the scalar types.
-        'array' => ['hi!'],
-      ],
-    ];
+    $element['#lazy_builder'] = ['\Drupal\Tests\Core\Render\PlaceholdersTest::callback', [
+      'string' => 'foo',
+      'bool' => TRUE,
+      'int' => 1337,
+      'float' => 3.14,
+      'null' => NULL,
+      // array is not one of the scalar types.
+      'array' => ['hi!'],
+    ]];
 
     $this->setExpectedException(\DomainException::class, "A #lazy_builder callback's context may only contain scalar values or NULL.");
     $this->renderer->renderRoot($element);
@@ -1080,7 +1075,7 @@ protected function generatePlaceholdersWithChildrenTestElement(array $args_1, ar
         ],
         'placeholders' => [
           'parent-x-parent' => [
-            '#lazy_builder' => [__NAMESPACE__ . '\\PlaceholdersTest::callback', $args_1],
+            '#lazy_builder' => [ __NAMESPACE__ . '\\PlaceholdersTest::callback', $args_1],
           ],
         ],
       ],
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
index f3ea379b63..7ac4a90164 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
@@ -74,145 +74,98 @@ public function providerTestRenderBasic() {
     // Pass an empty string.
     $data[] = ['', ''];
     // Previously printed, see ::renderTwice for a more integration-like test.
-    $data[] = [
-      ['#markup' => 'foo', '#printed' => TRUE],
-      '',
-    ];
+    $data[] = [[
+      '#markup' => 'foo',
+      '#printed' => TRUE,
+    ], ''];
     // Printed in pre_render.
-    $data[] = [
-      [
-        '#markup' => 'foo',
-        '#pre_render' => [[new TestCallables(), 'preRenderPrinted']],
-      ],
-      '',
-    ];
+    $data[] = [[
+      '#markup' => 'foo',
+      '#pre_render' => [[new TestCallables(), 'preRenderPrinted']]
+    ], ''];
     // Basic #markup based renderable array.
-    $data[] = [
-      ['#markup' => 'foo'],
-      'foo',
-    ];
+    $data[] = [[
+      '#markup' => 'foo',
+    ], 'foo'];
     // Basic #plain_text based renderable array.
-    $data[] = [
-      ['#plain_text' => 'foo'],
-      'foo',
-    ];
+    $data[] = [[
+      '#plain_text' => 'foo',
+    ], 'foo'];
     // Mixing #plain_text and #markup based renderable array.
-    $data[] = [
-      ['#plain_text' => '<em>foo</em>', '#markup' => 'bar'],
-      '&lt;em&gt;foo&lt;/em&gt;',
-    ];
+    $data[] = [[
+      '#plain_text' => '<em>foo</em>',
+      '#markup' => 'bar',
+    ], '&lt;em&gt;foo&lt;/em&gt;'];
     // Safe strings in #plain_text are still escaped.
-    $data[] = [
-      ['#plain_text' => Markup::create('<em>foo</em>')],
-      '&lt;em&gt;foo&lt;/em&gt;',
-    ];
+    $data[] = [[
+      '#plain_text' => Markup::create('<em>foo</em>'),
+    ], '&lt;em&gt;foo&lt;/em&gt;'];
     // Renderable child element.
-    $data[] = [
-      ['child' => ['#markup' => 'bar']],
-      'bar',
-    ];
+    $data[] = [[
+      'child' => ['#markup' => 'bar'],
+    ], 'bar'];
     // XSS filtering test.
-    $data[] = [
-      ['child' => ['#markup' => "This is <script>alert('XSS')</script> test"]],
-      "This is alert('XSS') test",
-    ];
+    $data[] = [[
+      'child' => ['#markup' => "This is <script>alert('XSS')</script> test"],
+    ], "This is alert('XSS') test"];
     // XSS filtering test.
-    $data[] = [
-      [
-        'child' => [
-          '#markup' => "This is <script>alert('XSS')</script> test",
-          '#allowed_tags' => ['script'],
-        ],
-      ],
-      "This is <script>alert('XSS')</script> test",
-    ];
+    $data[] = [[
+      'child' => ['#markup' => "This is <script>alert('XSS')</script> test", '#allowed_tags' => ['script']],
+    ], "This is <script>alert('XSS')</script> test"];
     // XSS filtering test.
-    $data[] = [
-      [
-        'child' => [
-          '#markup' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>",
-          '#allowed_tags' => ['em', 'strong'],
-        ],
-      ],
-      "This is <em>alert('XSS')</em> <strong>test</strong>",
-    ];
+    $data[] = [[
+      'child' => ['#markup' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>", '#allowed_tags' => ['em', 'strong']],
+    ], "This is <em>alert('XSS')</em> <strong>test</strong>"];
     // Html escaping test.
-    $data[] = [
-      [
-        'child' => [
-          '#plain_text' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>",
-        ],
-      ],
-      "This is &lt;script&gt;&lt;em&gt;alert(&#039;XSS&#039;)&lt;/em&gt;&lt;/script&gt; &lt;strong&gt;test&lt;/strong&gt;",
-    ];
+    $data[] = [[
+      'child' => ['#plain_text' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>"],
+    ], "This is &lt;script&gt;&lt;em&gt;alert(&#039;XSS&#039;)&lt;/em&gt;&lt;/script&gt; &lt;strong&gt;test&lt;/strong&gt;"];
     // XSS filtering by default test.
-    $data[] = [
-      [
-        'child' => [
-          '#markup' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>",
-        ],
-      ],
-      "This is <em>alert('XSS')</em> <strong>test</strong>",
-    ];
+    $data[] = [[
+      'child' => ['#markup' => "This is <script><em>alert('XSS')</em></script> <strong>test</strong>"],
+    ], "This is <em>alert('XSS')</em> <strong>test</strong>"];
     // Ensure non-XSS tags are not filtered out.
-    $data[] = [
-      [
-        'child' => [
-          '#markup' => "This is <strong><script>alert('not a giraffe')</script></strong> test",
-        ],
-      ],
-      "This is <strong>alert('not a giraffe')</strong> test",
-    ];
+    $data[] = [[
+      'child' => ['#markup' => "This is <strong><script>alert('not a giraffe')</script></strong> test"],
+    ], "This is <strong>alert('not a giraffe')</strong> test"];
     // #children set but empty, and renderable children.
-    $data[] = [
-      ['#children' => '', 'child' => ['#markup' => 'bar']],
-      'bar',
-    ];
+    $data[] = [[
+      '#children' => '',
+      'child' => ['#markup' => 'bar'],
+    ], 'bar'];
     // #children set, not empty, and renderable children. #children will be
     // assumed oto be the rendered child elements, even though the #markup for
     // 'child' differs.
-    $data[] = [
-      ['#children' => 'foo', 'child' => ['#markup' => 'bar']],
-      'foo',
-    ];
+    $data[] = [[
+      '#children' => 'foo',
+      'child' => ['#markup' => 'bar'],
+    ], 'foo'];
     // Ensure that content added to #markup via a #pre_render callback is safe.
-    $data[] = [
-      [
-        '#markup' => 'foo',
-        '#pre_render' => [function($elements) {
-          $elements['#markup'] .= '<script>alert("bar");</script>';
-          return $elements;
-        }
-        ],
-      ],
-      'fooalert("bar");',
-    ];
+    $data[] = [[
+      '#markup' => 'foo',
+      '#pre_render' => [function($elements) {
+        $elements['#markup'] .= '<script>alert("bar");</script>';
+        return $elements;
+      }]
+    ], 'fooalert("bar");'];
     // Test #allowed_tags in combination with #markup and #pre_render.
-    $data[] = [
-      [
-        '#markup' => 'foo',
-        '#allowed_tags' => ['script'],
-        '#pre_render' => [function($elements) {
-          $elements['#markup'] .= '<script>alert("bar");</script>';
-          return $elements;
-        }
-        ],
-      ],
-      'foo<script>alert("bar");</script>',
-    ];
+    $data[] = [[
+      '#markup' => 'foo',
+      '#allowed_tags' => ['script'],
+      '#pre_render' => [function($elements) {
+        $elements['#markup'] .= '<script>alert("bar");</script>';
+        return $elements;
+      }]
+    ], 'foo<script>alert("bar");</script>'];
     // Ensure output is escaped when adding content to #check_plain through
     // a #pre_render callback.
-    $data[] = [
-      [
-        '#plain_text' => 'foo',
-        '#pre_render' => [function($elements) {
-          $elements['#plain_text'] .= '<script>alert("bar");</script>';
-          return $elements;
-        }
-        ],
-      ],
-      'foo&lt;script&gt;alert(&quot;bar&quot;);&lt;/script&gt;',
-    ];
+    $data[] = [[
+      '#plain_text' => 'foo',
+      '#pre_render' => [function($elements) {
+        $elements['#plain_text'] .= '<script>alert("bar");</script>';
+        return $elements;
+      }]
+    ], 'foo&lt;script&gt;alert(&quot;bar&quot;);&lt;/script&gt;'];
 
     // Part 2: render arrays using #theme and #theme_wrappers.
 
diff --git a/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php b/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
index 7b3a0d45da..0f5142c945 100644
--- a/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
+++ b/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
@@ -142,8 +142,6 @@ public function testSetFormat() {
 }
 
 class StubNegotiationMiddleware extends NegotiationMiddleware {
-  public function getContentType(Request $request) {
-    return parent::getContentType($request);
-  }
+  public function getContentType(Request $request) { return parent::getContentType($request); }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
index 53a9241421..2cd750bf10 100644
--- a/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
@@ -50,7 +50,7 @@ public function providerTestFormatPlural() {
   /**
    * @dataProvider providerTestFormatPlural
    */
-  public function testFormatPlural($count, $singular, $plural, array $args, array $options, $expected) {
+  public function testFormatPlural($count, $singular, $plural, array $args = [], array $options = [], $expected) {
     $langcode = empty($options['langcode']) ? 'fr' : $options['langcode'];
     $translator = $this->getMock('\Drupal\Core\StringTranslation\Translator\TranslatorInterface');
     $translator->expects($this->once())
@@ -78,7 +78,7 @@ public function testFormatPlural($count, $singular, $plural, array $args, array
    *
    * @dataProvider providerTestTranslatePlaceholder
    */
-  public function testTranslatePlaceholder($string, array $args, $expected_string) {
+  public function testTranslatePlaceholder($string, array $args = [], $expected_string) {
     $actual = $this->translationManager->translate($string, $args);
     $this->assertInstanceOf(MarkupInterface::class, $actual);
     $this->assertEquals($expected_string, (string) $actual);
diff --git a/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php b/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
index cf39a8bb3a..1bbb9f4dd1 100644
--- a/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
+++ b/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
@@ -85,14 +85,14 @@ public function testEntitySafePrefixes() {
       ->with('test')
       ->willReturn(TRUE);
     $result = $this->twig->render('{{ entity.hasLinkTemplate("test") }}', ['entity' => $entity]);
-    $this->assertTrue((bool) $result, 'Sandbox policy allows has* functions to be called.');
+    $this->assertTrue((bool)$result, 'Sandbox policy allows has* functions to be called.');
 
     $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
     $entity->expects($this->atLeastOnce())
       ->method('isNew')
       ->willReturn(TRUE);
     $result = $this->twig->render('{{ entity.isNew }}', ['entity' => $entity]);
-    $this->assertTrue((bool) $result, 'Sandbox policy allows is* functions to be called.');
+    $this->assertTrue((bool)$result, 'Sandbox policy allows is* functions to be called.');
 
     $entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
     $entity->expects($this->atLeastOnce())
diff --git a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
index 4df9172799..01b16ad43f 100644
--- a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
@@ -121,10 +121,10 @@ public function providerTestAssembleWithLocalUri() {
       ['base:example', ['query' => ['foo' => 'bar']], FALSE, '/example?foo=bar'],
       ['base:example', ['query' => ['foo' => '"bar"']], FALSE, '/example?foo=%22bar%22'],
       ['base:example', ['query' => ['foo' => '"bar"', 'zoo' => 'baz']], FALSE, '/example?foo=%22bar%22&zoo=baz'],
-      ['base:example', ['fragment' => 'example'], FALSE, '/example#example'],
+      ['base:example', ['fragment' => 'example', ], FALSE, '/example#example'],
       ['base:example', [], TRUE, '/subdir/example'],
       ['base:example', ['query' => ['foo' => 'bar']], TRUE, '/subdir/example?foo=bar'],
-      ['base:example', ['fragment' => 'example'], TRUE, '/subdir/example#example'],
+      ['base:example', ['fragment' => 'example', ], TRUE, '/subdir/example#example'],
       ['base:/drupal.org', [], FALSE, '/drupal.org'],
     ];
   }
diff --git a/core/tests/Drupal/Tests/TestRequirementsTrait.php b/core/tests/Drupal/Tests/TestRequirementsTrait.php
deleted file mode 100644
index 84937ad69c..0000000000
--- a/core/tests/Drupal/Tests/TestRequirementsTrait.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-namespace Drupal\Tests;
-
-use Drupal\Core\Extension\ExtensionDiscovery;
-
-/**
- * Allows test classes to require Drupal modules as dependencies.
- *
- * This trait is assumed to be on a subclass of \PHPUnit_Framework_TestCase, and
- * overrides \PHPUnit_Framework_TestCase::checkRequirements(). This allows the
- * test to be marked as skipped before any kernel boot processes have happened.
- */
-trait TestRequirementsTrait {
-
-  /**
-   * Returns the Drupal root directory.
-   *
-   * @return string
-   */
-  protected static function getDrupalRoot() {
-    return dirname(dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__))));
-  }
-
-  /**
-   * Check module requirements for the Drupal use case.
-   *
-   * This method is assumed to override
-   * \PHPUnit_Framework_TestCase::checkRequirements().
-   *
-   * @throws \PHPUnit_Framework_SkippedTestError
-   *   Thrown when the requirements are not met, and this test should be
-   *   skipped. Callers should not catch this exception.
-   */
-  protected function checkRequirements() {
-    parent::checkRequirements();
-
-    $root = static::getDrupalRoot();
-
-    // Check if required dependencies exist.
-    $annotations = $this->getAnnotations();
-    if (!empty($annotations['class']['requires'])) {
-      $this->checkModuleRequirements($root, $annotations['class']['requires']);
-    }
-    if (!empty($annotations['method']['requires'])) {
-      $this->checkModuleRequirements($root, $annotations['method']['requires']);
-    }
-  }
-
-  /**
-   * Checks missing module requirements.
-   *
-   * Iterates through a list of requires annotations and looks for missing
-   * modules. The test will be skipped if any of the required modules is
-   * missing.
-   *
-   * @param string $root
-   *   The path to the root of the Drupal installation to scan.
-   * @param string[] $annotations
-   *   A list of requires annotations from either a method or class annotation.
-   *
-   * @throws \PHPUnit_Framework_SkippedTestError
-   *   Thrown when the requirements are not met, and this test should be
-   *   skipped. Callers should not catch this exception.
-   */
-  private function checkModuleRequirements($root, array $annotations) {
-    // drupal_valid_ua() might not be loaded.
-    require_once $root . '/core/includes/bootstrap.inc';
-
-    // Make a list of required modules.
-    $required_modules = [];
-    foreach ($annotations as $requirement) {
-      if (strpos($requirement, 'module ') === 0) {
-        $required_modules[] = trim(str_replace('module ', '', $requirement));
-      }
-    }
-
-    // If there are required modules, check if they're available.
-    if (!empty($required_modules)) {
-      // Scan for modules.
-      $discovery = new ExtensionDiscovery($root, FALSE);
-      $discovery->setProfileDirectories([]);
-      $list = array_keys($discovery->scan('module'));
-      $not_available = array_diff($required_modules, $list);
-      if (!empty($not_available)) {
-        throw new \PHPUnit_Framework_SkippedTestError('Required modules: ' . implode(', ', $not_available));
-      }
-    }
-  }
-
-}
diff --git a/core/tests/Drupal/Tests/Traits/Core/Config/SchemaConfigListenerTestTrait.php b/core/tests/Drupal/Tests/Traits/Core/Config/SchemaConfigListenerTestTrait.php
index 5a73cad4bb..e2cc00cf4d 100644
--- a/core/tests/Drupal/Tests/Traits/Core/Config/SchemaConfigListenerTestTrait.php
+++ b/core/tests/Drupal/Tests/Traits/Core/Config/SchemaConfigListenerTestTrait.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\Traits\Core\Config;
 
-use Drupal\Core\Config\Schema\SchemaIncompleteException;
+use \Drupal\Core\Config\Schema\SchemaIncompleteException;
 
 /**
  * Adds a test for the configuration schema checker use in tests.
diff --git a/core/tests/Drupal/Tests/UnitTestCase.php b/core/tests/Drupal/Tests/UnitTestCase.php
index 5139f97730..8aaeb85743 100644
--- a/core/tests/Drupal/Tests/UnitTestCase.php
+++ b/core/tests/Drupal/Tests/UnitTestCase.php
@@ -180,12 +180,6 @@ public function getConfigStorageStub(array $configs) {
    *
    * @return \Drupal\block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject
    *   The mocked block.
-   *
-   * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test
-   *   base classes should not have dependencies on extensions. Set up mocks in
-   *   individual tests.
-   *
-   * @see https://www.drupal.org/node/2896072
    */
   protected function getBlockMockWithMachineName($machine_name) {
     $plugin = $this->getMockBuilder('Drupal\Core\Block\BlockBase')
@@ -201,7 +195,6 @@ protected function getBlockMockWithMachineName($machine_name) {
     $block->expects($this->any())
       ->method('getPlugin')
       ->will($this->returnValue($plugin));
-    @trigger_error(__METHOD__ . ' is deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test base classes should not have dependencies on extensions. Set up mocks in individual tests.', E_USER_DEPRECATED);
     return $block;
   }
 
diff --git a/core/tests/Drupal/Tests/UnitTestCaseDeprecationTest.php b/core/tests/Drupal/Tests/UnitTestCaseDeprecationTest.php
deleted file mode 100644
index 8ecb70ca2c..0000000000
--- a/core/tests/Drupal/Tests/UnitTestCaseDeprecationTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Drupal\Tests;
-
-/**
- * @coversDefaultClass \Drupal\Tests\UnitTestCase
- *
- * @group Test
- * @group legacy
- */
-class UnitTestCaseDeprecationTest extends UnitTestCase {
-
-  /**
-   * @covers ::getBlockMockWithMachineName
-   * @expectedDeprecation Drupal\Tests\UnitTestCase::getBlockMockWithMachineName is deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test base classes should not have dependencies on extensions. Set up mocks in individual tests.
-   */
-  public function testDeprecatedGetBlockMockWithMachineName() {
-    $block_mock = $this->getBlockMockWithMachineName('test_name');
-    $this->assertEquals('test_name', $block_mock->getPlugin()->getMachineNameSuggestion());
-  }
-
-}
diff --git a/core/tests/fixtures/BrowserMissingDependentModuleMethodTest.php b/core/tests/fixtures/BrowserMissingDependentModuleMethodTest.php
deleted file mode 100644
index 4a94a53691..0000000000
--- a/core/tests/fixtures/BrowserMissingDependentModuleMethodTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalTests;
-
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * A fixture test class with requires annotation.
- *
- * This is a fixture class for
- * \Drupal\FunctionalTests\BrowserTestBaseTest::testMethodRequiresModule().
- *
- * This test class should not be discovered by run-tests.sh or phpunit.
- *
- * @group fixture
- */
-class BrowserMissingDependentModuleMethodTest extends BrowserTestBase {
-
-  /**
-   * This method should be skipped since it requires a module that is not found.
-   *
-   * @requires module module_does_not_exist
-   */
-  public function testRequiresModule() {
-    $this->fail('Running test with missing required module.');
-  }
-
-  /**
-   * Public access for checkRequirements() to avoid reflection.
-   */
-  public function publicCheckRequirements() {
-    return parent::checkRequirements();
-  }
-
-}
diff --git a/core/tests/fixtures/BrowserMissingDependentModuleTest.php b/core/tests/fixtures/BrowserMissingDependentModuleTest.php
deleted file mode 100644
index 9650fc1b95..0000000000
--- a/core/tests/fixtures/BrowserMissingDependentModuleTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-namespace Drupal\FunctionalTests;
-
-use Drupal\Tests\BrowserTestBase;
-
-/**
- * A fixture test class with requires annotation.
- *
- * This is a fixture class for
- * \Drupal\FunctionalTests\BrowserTestBaseTest::testRequiresModule().
- *
- * This test class should not be discovered by run-tests.sh or phpunit.
- *
- * @requires module module_does_not_exist
- * @group fixture
- */
-class BrowserMissingDependentModuleTest extends BrowserTestBase {
-
-  /**
-   * Placeholder test method.
-   *
-   * Depending on configuration, PHPUnit might fail a test if it has no test
-   * methods, so we must provide one. This method should never be executed.
-   */
-  public function testRequiresModule() {
-    $this->fail('Running test with missing required module.');
-  }
-
-  /**
-   * Public access for checkRequirements() to avoid reflection.
-   */
-  public function publicCheckRequirements() {
-    return parent::checkRequirements();
-  }
-
-}
diff --git a/core/tests/fixtures/KernelMissingDependentModuleMethodTest.php b/core/tests/fixtures/KernelMissingDependentModuleMethodTest.php
deleted file mode 100644
index 33dc79389f..0000000000
--- a/core/tests/fixtures/KernelMissingDependentModuleMethodTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests;
-
-/**
- * A fixture test class with requires annotation.
- *
- * This is a fixture class for
- * \Drupal\KernelTests\KernelTestBaseTest::testRequiresModule().
- *
- * This test class should not be discovered by run-tests.sh or phpunit.
- *
- * @group fixture
- */
-class KernelMissingDependentModuleMethodTest extends KernelTestBase {
-
-  /**
-   * This method should be skipped since it requires a module that is not found.
-   *
-   * @requires module module_does_not_exist
-   */
-  public function testRequiresModule() {
-    $this->fail('Running test with missing required module.');
-  }
-
-  /**
-   * Public access for checkRequirements() to avoid reflection.
-   */
-  public function publicCheckRequirements() {
-    return parent::checkRequirements();
-  }
-
-}
diff --git a/core/tests/fixtures/KernelMissingDependentModuleTest.php b/core/tests/fixtures/KernelMissingDependentModuleTest.php
deleted file mode 100644
index 3b8f316b22..0000000000
--- a/core/tests/fixtures/KernelMissingDependentModuleTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Drupal\KernelTests;
-
-/**
- * A fixture test class with requires annotation.
- *
- * This is a fixture class for
- * \Drupal\KernelTests\KernelTestBaseTest::testRequiresModule().
- *
- * This test class should not be discovered by run-tests.sh or phpunit.
- *
- * @requires module module_does_not_exist
- * @group fixture
- */
-class KernelMissingDependentModuleTest extends KernelTestBase {
-
-  /**
-   * Placeholder test method.
-   *
-   * Depending on configuration, PHPUnit might fail a test if it has no test
-   * methods, so we must provide one. This method should never be executed.
-   */
-  public function testRequiresModule() {
-    $this->fail('Running test with missing required module.');
-  }
-
-  /**
-   * Public access for checkRequirements() to avoid reflection.
-   */
-  public function publicCheckRequirements() {
-    return parent::checkRequirements();
-  }
-
-}
diff --git a/core/themes/bartik/css/components/form.css b/core/themes/bartik/css/components/form.css
index 8ec05a3d7f..672e59118e 100644
--- a/core/themes/bartik/css/components/form.css
+++ b/core/themes/bartik/css/components/form.css
@@ -172,7 +172,7 @@ input.form-submit:focus {
 .node-form .form-wrapper {
   margin-bottom: 2em;
 }
-.node-form .entity-content-form-footer,
+.node-form .node-form-footer,
 .node-form .field--name-status {
   margin-bottom: 0;
 }
diff --git a/core/themes/bartik/css/components/node-preview.css b/core/themes/bartik/css/components/node-preview.css
index e391dd15b1..520141a331 100644
--- a/core/themes/bartik/css/components/node-preview.css
+++ b/core/themes/bartik/css/components/node-preview.css
@@ -7,7 +7,7 @@
   position: fixed;
   z-index: 499;
   width: 100%;
-  padding: 5px 10px;
+  padding: 10px;
 }
 .node-preview-backlink {
   background-color: #419ff1;
@@ -19,15 +19,13 @@
   color: #fff;
   font-size: 0.9em;
   line-height: normal;
-  margin: 5px 10px 5px 0; /* LTR */
+  margin: 0;
   padding: 4px 1em 4px 0.6em; /* LTR */
   text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);
-  display: inline-block;
 }
 [dir="rtl"] .node-preview-backlink {
   background: url(../../../../misc/icons/000000/chevron-right.svg) right no-repeat, -webkit-linear-gradient(top, #419ff1, #1076d5);
   background: url(../../../../misc/icons/000000/chevron-right.svg) right no-repeat, linear-gradient(to bottom, #419ff1, #1076d5);
-  margin: 5px 0 5px 10px;
   padding: 4px 0.6em 4px 1em;
   float: right;
 }
@@ -61,15 +59,3 @@
   width: 10px;
   display: inline-block;
 }
-[dir="rtl"] .node-preview-backlink::after {
-  content: '';
-  width: 10px;
-  display: inline-block;
-}
-.node-preview-container .form-item-view-mode {
-  display: inline-block;
-  margin: 5px 0;
-}
-[dir="rtl"] .node-preview-container .form-item-view-mode {
-  margin-right: 0;
-}
diff --git a/core/themes/engines/twig/twig.engine b/core/themes/engines/twig/twig.engine
index 177e01a511..791f9083b8 100644
--- a/core/themes/engines/twig/twig.engine
+++ b/core/themes/engines/twig/twig.engine
@@ -128,7 +128,7 @@ function twig_render_template($template_file, array $variables) {
  *
  * @param array|object $element
  *   The parent renderable array to exclude the child items.
- * @param string[] ...
+ * @param string[] $args, ...
  *   The string keys of $element to prevent printing.
  *
  * @return array
diff --git a/core/themes/seven/css/theme/colors.css b/core/themes/seven/css/components/colors.css
similarity index 100%
rename from core/themes/seven/css/theme/colors.css
rename to core/themes/seven/css/components/colors.css
diff --git a/core/themes/seven/css/components/dropbutton.component.css b/core/themes/seven/css/components/dropbutton.component.css
index 751ec2c422..2cf014107f 100644
--- a/core/themes/seven/css/components/dropbutton.component.css
+++ b/core/themes/seven/css/components/dropbutton.component.css
@@ -203,21 +203,8 @@
   -webkit-transition: none;
   transition: none;
 }
-.dropbutton .dropbutton-action .ajax-progress {
-  position: absolute;
-  z-index: 2;
-  top: 0.2em;
-  right: 0.2em;
-  padding: 0 0 0 0.1em;
-}
-.dropbutton-multiple .dropbutton-action .ajax-progress {
-  right: 2.2em;
-  top: 0.15em;
-  margin-right: 0;
-}
-.dropbutton-multiple .secondary-action .ajax-progress {
-  top: auto;
-  bottom: 0.3em;
+.dropbutton-single .dropbutton-action a.use-ajax {
+  float: left;
 }
 
 /**
diff --git a/core/themes/seven/css/theme/maintenance-page.css b/core/themes/seven/css/theme/maintenance-page.css
index e2875e3c1d..bea8321e34 100644
--- a/core/themes/seven/css/theme/maintenance-page.css
+++ b/core/themes/seven/css/theme/maintenance-page.css
@@ -76,14 +76,14 @@
     border: solid transparent;
     border-color: rgba(235, 234, 228, 0);
     border-left-color: #ebeae4; /* LTR */
-    border-width: 1.269em;
+    border-width: 1.35em;
     content: " ";
     height: 0;
     width: 0;
     position: absolute;
     pointer-events: none;
     top: 50%;
-    margin-top: -1.269em;
+    margin-top: -1.32em;
   }
   [dir="rtl"] .task-list .is-active:after {
     left: auto;
diff --git a/core/themes/seven/seven.libraries.yml b/core/themes/seven/seven.libraries.yml
index 75e8c1aa05..21ac5bca48 100644
--- a/core/themes/seven/seven.libraries.yml
+++ b/core/themes/seven/seven.libraries.yml
@@ -10,6 +10,7 @@ global-styling:
       css/components/content-header.css: {}
       css/components/breadcrumb.css: {}
       css/components/buttons.css: {}
+      css/components/colors.css: {}
       css/components/messages.css: {}
       css/components/dropbutton.component.css: {}
       css/components/entity-meta.css: {}
@@ -32,8 +33,6 @@ global-styling:
       css/components/system-status-counter.css: {}
       css/components/tabs.css: {}
       css/components/views-ui.css: {}
-    theme:
-      css/theme/colors.css: {}
     layout:
       css/layout/layout.css: {}
   dependencies:
diff --git a/core/themes/stable/templates/admin/admin-block.html.twig b/core/themes/stable/templates/admin/admin-block.html.twig
index 7401695766..9464d405a8 100644
--- a/core/themes/stable/templates/admin/admin-block.html.twig
+++ b/core/themes/stable/templates/admin/admin-block.html.twig
@@ -10,15 +10,9 @@
  *   - content: (optional) The content of the block.
  *   - description: (optional) A description of the block.
  *     (Description should only be output if content is not available).
- * - attributes: HTML attributes for the containing div element.
  */
 #}
-{%
-  set classes = [
-    'panel',
-  ]
-%}
-<div{{ attributes.addClass(classes) }}>
+<div class="panel">
   {% if block.title %}
     <h3 class="panel__title">{{ block.title }}</h3>
   {% endif %}
